Php i validacja zmiennej

z formularza powinienem otrzymać tylko i wyłącznie liczbę w postaci

np. 56 albo 43.832…

jak sprawdzić czy ma taki format czy też może zawiera coś innego?

Czyli chcesz sprawdzić czy wartość jest liczbą całkowitą lub zmiennoprzecinkową (ułamkiem). Dobrze rozumiem?

Do tego służą funkcje:

http://pl.php.net/manual/pl/function.is-int.php

http://pl.php.net/manual/pl/function.is-float.php

na przykład:

if(is_int($zmienna)||is_float($zmienna))

ewentualnie jedna funkcja:

http://pl.php.net/manual/pl/function.is-numeric.php

Tylko, że ta funkcja zwraca TRUE również wtedy, gdy zmienna jest numerycznym stringiem. Ale o tym wszystkim pisze w linku, który podałem.

hm, ja bym zrobił tak:

ponieważ dana przesyłana z formularza jest traktowana jako strong, to wpierw przy pomocy str_replace zamienił bym , na . (dużo osób stawia jednak przecinki zamiast kropek dla oddzielenia części dziesiętnych). samo sprawdzenie możesz wykonać poprzez is_float()

$zmienna = htmlspecialchars($_GET['zmienna']);

$zmienna = str_replace(',', '.', $zmienna);

if( is_float($zmienna) ){

echo ('zmienna typu float');

}

Hmmm… ale kolega api nie powiedział również nam czy dane przesyła POSTEM czy GETEm, no bo jeśli GETEM to i tak wszystko będzie stringiem.

Więc najpierw zastosowałbym Twoje str_replace, ale nie używałbym is_int czy is_float, tylko po prostu is_numeric

@EDIT:

orta zrobiłem xD

nawet jeśli przesyła POSTem, to i tak is_int i is_float mogą zwrócić false.

chyba że zastosuje się wcześniej rzutowanie typu:

Ale lepiej jest jednak wykorzystać is_numeric

Pięknie dziękuje, na WAS zawsze można liczyć! :smiley:

Tylko, że nie wiemy co jest wartością zmiennej. A jeśli string? Wtedy po rzutowaniu dostaniemy bezwzględnie ze stringa floata. A już nie muszę chyba wspominać co się namiesza w samej wartości zmiennej.

W praktyce wygląda to tak, że ktoś przesyła w zmiennej stringa a my i tak rozpoznamy to jako float.

Tak więc… is_numeric()

fakt, skupiłem się na czym innym i pominąłem tę możliwość zakładając że przeslano liczbę. Dlatego szkoda kombinować, is_numeric załatwia spraawę.