Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] liczba która nie jest liczbą

Napisany przez: adi456 11.09.2019, 13:28:26

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ć

Napisany przez: dublinka 11.09.2019, 13:36:00

To pokaz to co ma ten post

Sprawdz przez


is_numeric()

Napisany przez: adi456 11.09.2019, 13:39:54

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)

Napisany przez: dublinka 11.09.2019, 13:45:19

Mam rozumiec ze przekazujesz liczbe 2 postem a potem podczas odczytu nie jest juz "dwójką"?
Nie kombinujesz nic miedzyczasie z tym ?

Napisany przez: adi456 11.09.2019, 13:47:44

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


wynik:
problem dotyczy 2
lipa liczba
lipa tablica
0
0
0

Napisany przez: Pyton_000 11.09.2019, 13:47:53

pokaż `var_dump($_POST['twoja_liczba']);`

Napisany przez: adi456 11.09.2019, 13:51:04

string(7) "2"

Napisany przez: Pyton_000 11.09.2019, 13:51:54

formularz masz skopany. Pokaż go

Napisany przez: dublinka 11.09.2019, 13:54:46

Jesli ustawisz na sztywno $liczbe


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


Wynik:

problem dotyczy 2.
liczba
lipa tablica
2
2
2

Wiec problem w formularzu raczej

Napisany przez: adi456 11.09.2019, 13:56:32

  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',http://www.php.net/array('rozlicz_nr'=>$arr['post']['nr_rozlicz']))[0];
  2. $kody=http://www.php.net/explode(' ',$rozl['row']['kody']);
  3.  
  4. foreach($kody as $licz=>$kod){ $licz++;
  5. http://www.php.net/var_dump($kod);
  6.  
  7. $r=kod('info',http://www.php.net/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ę?

Napisany przez: Pyton_000 11.09.2019, 14:06:04

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?)

Napisany przez: dublinka 11.09.2019, 14:14:48

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()

Napisany przez: adi456 11.09.2019, 14:17:17

w tym przypadku varchar jest wygodny bo najczęściej jest kilka liczb ale przynajmniej wiem w czym problem dzięki wielkie za info

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)