2012-10-24 5 views
5

Powiel możliwe:
php: ‘0’ as a string with empty()

mam wkład w postaci jak tak

<input name='var' type='number'> 

Po przesłaniu formularza dane wejściowe są wysyłane do pliku PHP za pośrednictwem POST. na plik PHP, to sprawdza, czy wejście jest wypełniony przez sprawdzanie

empty($_POST['var']) 

Kiedy wpisać „0” (zero) w polu tekstowym i przesłać formularz powraca kod PHP „1” dla empty ($ _ POST ['var']) mimo, że próbowałem print_r ($ _ POST), a 'var' wyraźnie ma wartość '0'.

Czy to ma się stać? Czy po prostu muszę sprawdzić, czy dla tego wyjątku jest równe == 0? Dzięki.

+1

Tak, [to jest udokumentowane] (http://us2.php.net/manual/en/function.empty.php). Zero to "pusta" wartość w ciągach, int i float forms. –

+2

Jeśli potrzebujesz kodu wokół przypadku zerowego, użyj 'if (empty ($ _ POST ['var']) &&! Is_numeric ($ _ POST ['var']))' –

+0

Dzięki za link do dokumentacji, nie widziałem tę listę wcześniej. :) Czy istnieje sposób na zaznaczenie komentarza jako odpowiedzi? – AnsonL

Odpowiedz

0

Nie można użyć tylko empty, aby sprawdzić, czy jest pusty ciąg lub ciąg zawiera tylko pusty znak.

Zastosowanie tak:

function isEmpty($key) { 
    return isset($_POST[$key]) && trim($_POST[$key]) === ''; 
} 
+0

Dzięki za porady na puste miejsca, używam już regex do sprawdzania poprawności. – AnsonL

3

Aby sprawdzić, czy pole jest wypełnione lub nie, użyj isset($_POST['var']) zamiast empty($_POST['var']).

+0

Ma jednak własne zastrzeżenia. 'isset()' zwróci 'TRUE' na pustym łańcuchu, który dla potrzeb klucza' $ _POST' może nie być zamierzonym zachowaniem. –

0

empty() zwraca wartość true, jeśli sprawdzana zmienna jest niezdefiniowana, 0, pusty ciąg "", false, pusta tablica lub wartość pusta. Wynik, który widzisz, jest w 100% poprawny.

W przypadku, gdy 0 jest wartością legalną, należy użyć funkcji is_set().