Вопрос: Проверьте, является ли значение $ _POST пустым .
Перевод: Проверьте, имеет ли ключ / индекс массива значение, связанное с ним.
Ответ: Зависит от вашего акцента на безопасности. Зависит от того, что допустимо в качестве допустимого ввода.
1. Some people say use empty().
Из руководства по PHP: «[Пусто] определяет, будет ли переменная считаться пустой. Переменная считается пустой, если она не существует или если ее значение равно 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()
будет работать. Проблема здесь заключается в том, что empty()
может быть слишком широким , чтобы использоваться последовательно (таким же образом, по той же причине, для разных элементов управления вводом в $_POST
или $_GET
). Хорошее использование empty()
состоит в том, чтобы проверить, является ли весь массив пустым (без элементов).
2. Some people say use isset().
isset()
(языковая конструкция) не может работать с целыми массивами, как в isset($myArray)
. Он может работать только с переменными и элементами массива (через индекс / ключ): isset($var)
и isset($_POST['username'])
. Языковая конструкция isset()
делает две вещи. Сначала он проверяет, имеет ли значение индекс или ключ переменной или массива связанный с ним. Во-вторых, он проверяет, что значение не равно значению PHP NULL.
Короче говоря, наиболее точную проверку лучше всего выполнить с 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.
Вы можете проверить все, что оценивается как true или false в if
заявление. Пустые массивы оцениваются как ложные, как и переменные, которые
не установлен. Переменные, содержащие значение PHP NULL, также оцениваются как
ложный. К сожалению, в этом случае, как с empty()
, многие другие
вещи также оцениваются как ложные: 1. пустая строка '', ноль (0),
zero.zero (0.0), строка ноль '0', логическое значение false и определенное пустое
Объекты XML.
- Doyle, начало PHP 5.3
В заключение, используйте isset()
и подумайте о том, чтобы объединить его с другими тестами. Пример:
Может не работать из-за суперглобальной ввинчиваемости, но без проблем будет работать для других массивов.
if (is_array($_POST) && !empty($_POST)) {
// Now test for your successful controls in $_POST with isset()
}
Следовательно, зачем искать значение, связанное с ключом, прежде чем вы точно узнаете, что $_POST
представляет массив и содержит ли в нем какие-либо значения (что многие люди не учитывают)? Помните, что люди могут отправлять данные в вашу форму без использования веб-браузера. Однажды вы можете дойти до точки проверки, что у $_POST
есть только разрешенные ключи, но этот разговор предназначен для другого дня.
Полезная ссылка:
Руководство по PHP: сравнительные таблицы тестирования типов