Câu hỏi: Kiểm tra liệu giá trị $ _POST có là trống không.
Dịch: Kiểm tra xem liệu khóa/chỉ mục mảng có giá trị được liên kết với nó hay không.
Trả lời: Phụ thuộc vào sự nhấn mạnh của bạn về bảo mật. Phụ thuộc vào những gì được cho phép là đầu vào hợp lệ.
1. Some people say use empty().
Từ hướng dẫn sử dụng PHP: "[Trống] xác định xem biến có được để trống hay không. Biến được coi là trống nếu biến không tồn tại hoặc nếu giá trị của nó bằng FALSE". Sau đây được coi là trống rỗng.
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
Nếu không có giá trị nào hợp lệ cho điều khiển nhập của bạn thì empty()
sẽ hoạt động. Vấn đề ở đây là empty()
có thể là quá rộng để được sử dụng nhất quán (cùng một cách, vì lý do tương tự, trên các lần gửi kiểm soát đầu vào khác nhau đến $_POST
hoặc $_GET
). Sử dụng tốt empty()
là để kiểm tra xem có toàn bộ mảng toàn bộ không trống (không có phần tử nào).
2. Some people say use isset().
isset()
(một cấu trúc ngôn ngữ) không thể hoạt động trên toàn bộ mảng, như trong isset($myArray)
. Nó chỉ có thể hoạt động trên biến số và thành phần mảng (thông qua chỉ mục/khóa): isset($var)
và isset($_POST['username'])
. Cấu trúc ngôn ngữ isset()
làm hai việc. Đầu tiên nó kiểm tra xem liệu một biến hoặc chỉ mục/khóa mảng có một giá trị liên kết với nó hay không. Thứ hai, nó kiểm tra để đảm bảo rằng giá trị không bằng giá trị NULL NULL.
Trong ngắn hạn, kiểm tra chính xác nhất có thể được thực hiện tốt nhất với isset()
, vì một số điều khiển đầu vào thậm chí không đăng ký với $ _POST khi chúng không được chọn hoặc kiểm tra. Tôi chưa bao giờ biết một biểu mẫu đã gửi giá trị NULL NULL. Không có gì của tôi, vì vậy tôi sử dụng isset()
để kiểm tra xem một khóa $_POST
không có giá trị nào được liên kết với nó (và đó không phải là NULL). isset()
là kiểm tra chặt chẽ hơn về tính trống rỗng (theo nghĩa câu hỏi của bạn) so với empty()
.
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
Bạn có thể kiểm tra bất cứ điều gì để đánh giá đúng hoặc sai trong một câu lệnh if. Các mảng trống đánh giá sai và do đó, các biến không được đặt. Các biến chứa giá trị NULL NULL cũng đánh giá sai. Thật không may trong trường hợp này, giống như với empty()
, nhiều thứ khác cũng được đánh giá là sai: 1. chuỗi trống '', số không (0), số không. (0), chuỗi 0 ', boolean false và một số trống Các đối tượng XML.
--Doyle, Bắt đầu từ PHP 5.3
Tóm lại, sử dụng isset()
và xem xét kết hợp nó với các xét nghiệm khác. Ví dụ:
Có thể không hoạt động do trục vít siêu cứng, nhưng sẽ hoạt động đối với các mảng khác không có câu hỏi.
if(is_array($_POST) && !empty($_POST))
{
//Now test for your successful controls in $_POST with isset()
}
Điều này cũng hoạt động.
if(is_array($_POST) && $_POST)
{
//Now test for your successful controls in $_POST with isset()
//Always validate your input.
}
Do đó, tại sao tìm kiếm một giá trị gắn liền với một chìa khóa trước khi bạn thậm chí biết chắc chắn rằng $_POST
đại diện cho một mảng và đã bất kỳ giá trị lưu giữ trong nó ở tất cả (một cái gì đó nhiều người thất bại trong việc xem xét)? Hãy nhớ rằng, mọi người có thể gửi dữ liệu đến biểu mẫu của bạn mà không cần sử dụng trình duyệt web. Một ngày nào đó bạn có thể đến điểm kiểm tra rằng $_POST
chỉ có các phím được cho phép, nhưng cuộc hội thoại đó là cho một ngày khác.
tài liệu tham khảo hữu ích:
PHP Manual: Type Testing Comparison Tables
kiểm tra giá trị đặt cược nếu biến đã được đặt. tuy nhiên khi bạn gửi một biểu mẫu, một biến sẽ là một chuỗi rỗng. – miki725