Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] liczba która nie jest liczbą
Forum PHP.pl > Forum > Przedszkole
adi456
Witam

mam taki dziwny problem, przechwytuje niby liczbę przez zmienną POST która nie jest liczbą, tzn przez echo oraz print wyświetla się 2, ale ani mysql nie rozpoznaje jej jako 2, gdy mnożę tą liczbę razy 1 otrzymuje 0, funkcja intval też pokazuje 0. Spotkał się ktoś z takim problemem za bardzo nie wiem gdzie szukać
dublinka
To pokaz to co ma ten post

Sprawdz przez


is_numeric()
adi456
2

sprawdzałem is_numeric() wyświetla fałsz, z tym że zawsze wystarczyło albo użyć trim albo mnożyć razy 1, albo zdefiniować typ zmiennej (int)
dublinka
Mam rozumiec ze przekazujesz liczbe 2 postem a potem podczas odczytu nie jest juz "dwójką"?
Nie kombinujesz nic miedzyczasie z tym ?
adi456
  1. echo 'problem dotyczy '.$kod.'<br>';
  2. if(is_numeric($kod)){
  3. echo 'liczba';
  4. } else {
  5. echo 'lipa liczba';
  6. }
  7. echo '<br>';
  8.  
  9. if(is_array($kod)){
  10. echo 'tablica';
  11. } else {
  12. echo 'lipa tablica';
  13. }
  14.  
  15. echo '<br>';
  16.  
  17. $test1=$kod*1;
  18. echo $test1.'<br>';
  19.  
  20. $test2=(int) $kod;
  21. echo $test2.'<br>';
  22.  
  23. $test2=intval($kod);
  24. echo $test2.'<br>';


wynik:
problem dotyczy 2
lipa liczba
lipa tablica
0
0
0
Pyton_000
pokaż `var_dump($_POST['twoja_liczba']);`
adi456
string(7) "2"
Pyton_000
formularz masz skopany. Pokaż go
dublinka
Jesli ustawisz na sztywno $liczbe


  1. $kod = 2;
  2.  
  3. echo "problem dotyczy $kod.<br>";
  4. if(is_numeric($kod)){
  5. echo 'liczba';
  6. } else {
  7. echo 'lipa liczba';
  8. }
  9. echo '<br>';
  10.  
  11. if(is_array($kod)){
  12. echo 'tablica';
  13. } else {
  14. echo 'lipa tablica';
  15. }
  16.  
  17. echo '<br>';
  18.  
  19. $test1=$kod*1;
  20. echo $test1.'<br>';
  21.  
  22. $test2=(int) $kod;
  23. echo $test2.'<br>';
  24.  
  25. $test2=intval($kod);
  26. echo $test2.'<br>';


Wynik:

problem dotyczy 2.
liczba
lipa tablica
2
2
2

Wiec problem w formularzu raczej
adi456
  1. $txt['js_onlick_rozlicz']=' czytaj(\'php/test.php\',\'nr_rozlicz='.$r['id'].'&nr_serwis='.$r['nr'].'&typ_rozlicz='.$r['typ'].'\',\'wynikpoz\'); ';


  1. $rozl=rozliczenia('lista',array('rozlicz_nr'=>$arr['post']['nr_rozlicz']))[0];
  2. $kody=explode(' ',$rozl['row']['kody']);
  3.  
  4. foreach($kody as $licz=>$kod){ $licz++;
  5. var_dump($kod);
  6.  
  7. $r=kod('info',array('kod'=>$kod))['row'];
  8. $razem+=$r['cena'];
  9. }


a sorki teraz się zorientowałem że ta liczba 2 pochodzi z bazy a nie z zmiennej POST (sorki ale mam gorączke)
ale dlaczego ten string nie chce się konwertować na liczbę?
Pyton_000
Dlatego że ma białe znaki na froncie. Konwersja (rzutowanie) działa na zasadzie że jeśli 1-szy znak jest liczbą to string jest konwertowany na liczbę do 1-szego nienumerycznego znaku.

Możesz zrobić tak:
Kod
(int)filter_var($kod, FILTER_SANITIZE_NUMBER_INT)



Inne pytanie dlaczego tak się zapisuje (brak obróbki przed zapisem?)
dublinka
Jesli pole w tabeli jest tylko dla liczb to ustaw ja na INT. Nie wiem jak tam masz. Moze jest varchar. Przed zapisem tez rzutuj na liczbe i moze settype()
adi456
w tym przypadku varchar jest wygodny bo najczęściej jest kilka liczb ale przynajmniej wiem w czym problem dzięki wielkie za info
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.