Вопрос: Проверить ли значение $ _POST равно пусто.
Проверьте, имеет ли значение атрибут/индекс массива значение, связанное с ним.
Ответ: В зависимости от вашего внимания к безопасности. Зависит от допустимого ввода.
1. Some people say use empty().
Из Руководства PHP: «[Empty] определяет, считается ли переменная быть пустым переменной считается пустым, если она не существует, или если его значение равно FALSE..» Таким образом, считается пустым.
"" (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)
Если ни одно из этих значений не действительны для входного контроля, то empty()
будет работать. Проблема здесь в том, что может быть слишком широким, который будет использоваться последовательно (так же, по той же причине, на разных входах управления доступом до $_POST
или $_GET
). Хорошее использование empty()
состоит в том, чтобы проверить, что пустой массив пуст (не имеет элементов).
2. Some people say use isset().
isset()
(конструкция языка) не может работать на целых массивов, как и в isset($myArray)
. Он может работать только с переменными и элементами массива (с помощью индекса/ключа): isset($var)
и isset($_POST['username'])
. Конструкция языка isset()
делает две вещи. Сначала он проверяет, имеет ли переменная или индекс/ключ массива значение, связанное с ним. Во-вторых, он проверяет, чтобы значение не было равно значению NULL PHP.
Короче говоря, наиболее точную проверку можно выполнить с помощью isset()
, так как некоторые элементы управления вводом даже не регистрируются с помощью $ _POST, когда они не выбраны или не выбраны. Я никогда не знал формы, которая предоставила значение PHP NULL. Ничего из этого не делаю, поэтому я использую isset()
, чтобы проверить, не связан ли ключ $_POST
(и это не NULL). isset()
является более строгим тестом пустоты (в смысле вашего вопроса), чем empty()
.
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
Вы можете проверить все, что оценивает в истинной или ложные в если заявление. Пустые массивы оцениваются как false, поэтому переменные не заданы. Переменные, содержащие значение NULL PHP, также оцениваются как false. К сожалению, в этом случае, как и в случае с empty()
, многие другие вещи также вычисляют значение false: 1. пустая строка '', ноль (0), zero.zero (0.0), строка 0 ', логическая ложь и некоторая пустая Объекты XML.
--Doyle, начиная с PHP 5.3
В заключение, используйте isset()
и рассмотреть вопрос об объединении с другими тестами. Пример:
Может не работать из-за сверхглобальной завинчивости, но без проблем работать с другими массивами.
if(is_array($_POST) && !empty($_POST))
{
//Now test for your successful controls in $_POST with isset()
}
Это тоже должно работать.
if(is_array($_POST) && $_POST)
{
//Now test for your successful controls in $_POST with isset()
//Always validate your input.
}
Следовательно, зачем искать значение, связанное с ключом, прежде чем вы даже знать наверняка, что $_POST
представляет собой массив и любые значения, сохраненные в нем вообще (то, что многие люди не считают)? Помните, что люди могут отправлять данные в вашу форму без использования веб-браузера. Вы можете в один прекрасный момент дойти до того, что у $_POST
есть только разрешенные ключи, но этот разговор на другой день.
Полезные ссылки:
PHP Manual: Type Testing Comparison Tables
Значение isset проверяет, была ли уже установлена переменная. однако, когда вы отправляете форму, переменная будет пустой строкой. – miki725