2012-10-24 56 views
5

thể trùng lặp:
php: ‘0’ as a string with empty()

Tôi có một đầu vào trong một hình thức như vậy

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

Khi biểu mẫu được gửi, đầu vào được gửi tới tệp PHP qua POST. Trên file PHP, nó sẽ kiểm tra xem các đầu vào được điền bằng cách kiểm tra

empty($_POST['var']) 

Khi tôi nhập '0' (zero) vào textbox và gửi biểu mẫu, trở về mã PHP '1' cho trống ($ _ POST ['var']) mặc dù tôi đã thử print_r ($ _ POST) và 'var' rõ ràng có giá trị '0'.

Điều này có nghĩa vụ phải xảy ra không? Tôi chỉ cần kiểm tra == 0 cho ngoại lệ này? Cảm ơn.

+1

Yep, [tài liệu đó] (http://us2.php.net/manual/en/function.empty.php). Zero là một giá trị "trống" ở dạng chuỗi, int và float. –

+2

Nếu bạn cần mã hóa xung quanh trường hợp 0, sử dụng 'if (empty ($ _ POST ['var']) &&! Is_numeric ($ _ POST ['var']))' –

+0

Cảm ơn liên kết tài liệu, không thấy danh sách đó trước đây. :) Có cách nào để đánh dấu nhận xét của bạn là câu trả lời không? – AnsonL

Trả lời

0

Bạn không thể sử dụng empty chỉ để kiểm tra xem đó là chuỗi rỗng hoặc chuỗi chỉ chứa ký tự trống.

Sử dụng như thế này:

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

Cảm ơn lời khuyên về không gian trống, tôi đã sử dụng regex để xác thực. – AnsonL

3

Để kiểm tra xem trường được điền hay không, hãy sử dụng isset($_POST['var']) thay vì empty($_POST['var']).

+0

Mặc dù vậy, nó có những cảnh báo riêng. 'isset()' sẽ trả về 'TRUE' trên một chuỗi rỗng, với mục đích của một khóa' $ _POST' có thể không phải là hành vi dự định. –

0

empty() trả về true nếu biến được kiểm tra không được xác định, 0, chuỗi rỗng '', false, một mảng trống hoặc null. Vì vậy, kết quả bạn thấy là chính xác 100%.

Trong trường hợp 0 ​​là giá trị hợp lệ, hãy sử dụng is_set().

Các vấn đề liên quan