Проверьте, пусто ли значение $_POST
if(isset($_POST['submit'])) {
if(!isset($_POST['userName'])) {
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
Я не могу заставить $username
быть "анонимным"? Это либо пустое, либо значение $_POST['userName']
.
Ответы
Ответ 1
isset()
вернет true, если переменная была инициализирована. Если у вас есть поле формы с его значением name
, установленным на userName
, когда эта форма отправлена, значение всегда будет "установлено", хотя в нем не может быть никаких данных.
Вместо trim()
строку и проверить ее длину
if("" == trim($_POST['userName'])){
$username = 'Anonymous';
}
Ответ 2
Если форма была успешно отправлена, всегда следует устанавливать $_POST['userName']
, хотя она может содержать пустую строку, которая отличается от не заданной вообще. Вместо этого проверьте, если он empty()
if (isset($_POST['submit'])) {
if (empty($_POST['userName'])) {
$username = 'Anonymous';
} else {
$username = $_POST['userName'];
}
}
Ответ 3
Чтобы проверить, присутствует ли свойство, независимо от значения, используйте:
if (array_key_exists('userName', $_POST)) {}
Чтобы проверить, установлено ли свойство (свойство присутствует, а значение не равно null
или false
), используйте:
if (isset($_POST['userName'])) {}
Чтобы проверить, установлено ли свойство и не пусто (не пустая строка, 0
(целое число), 0.0
(float), '0'
(строка), null
, false
или []
(пустой массив)), используйте:
if (!empty($_POST['userName'])) {}
Ответ 4
Вопрос: Проверьте, является ли значение $ _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, также оцениваются как false. К сожалению, в этом случае, как и в случае empty()
, многие другие значения также оцениваются как false: 1. пустая строка '', zero (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: сравнительные таблицы тестирования типов
Ответ 5
Измените это:
if(isset($_POST['submit'])){
if(!(isset($_POST['userName']))){
$username = 'Anonymous';
}
else $username = $_POST['userName'];
}
Для этого:
if(!empty($_POST['userName'])){
$username = $_POST['userName'];
}
if(empty($_POST['userName'])){
$username = 'Anonymous';
}
Ответ 6
я бы использовал простой однострочный для этих случаев использования
$username = trim($_POST['userName'])?:'Anonymous';
Это для случая использования вы уверены, что регистрация ошибок отключена, поэтому вы не получите предупреждение о том, что переменная не инициализирована.
это параноидальная версия:
$username = !empty(trim(isset($_POST['userName'])?$_POST['userName']:''))?$_POST['userName']:'Anonymous';
Это реализует проверку, если установлена переменная $_POST
. прежде чем получить к нему доступ.
Ответ 7
isset проверяет, установлен ли ключ, который вы проверяете в хеше (или ассоциативном массиве). Значение в этом контексте означает только то, знает ли оно значение. Ничто не является ценностью. Таким образом, он определяется как пустая строка.
По этой причине, если у вас есть поле ввода с именем userName, независимо от того, заполнит ли он это, это будет верно. То, что вы действительно хотите сделать, - проверить, равно ли имя пользователя пустой пустой строке ''
Ответ 8
$username = filter_input(INPUT_POST, 'userName', FILTER_SANITIZE_STRING);
if ($username == '') {$username = 'Anonymous';}
Лучшая практика - всегда фильтруйте входные данные, очистка строки - это нормально, но лучше использовать специальную функцию обратного вызова, чтобы отфильтровать то, что не приемлемо. Затем проверьте переменную now-safe, если она пуста/пуста, и если она есть, установите значение Anonymous. Не требует оператора 'else', поскольку он был установлен, если он существовал в первой строке.