Подтвердить что ты не робот

Проверьте, пусто ли значение $_POST

if(isset($_POST['submit'])) {
    if(!isset($_POST['userName'])) {
        $username = 'Anonymous';
    }      
    else $username = $_POST['userName'];
}

Я не могу заставить $username быть "анонимным"? Это либо пустое, либо значение $_POST['userName'].

4b9b3361

Ответ 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', поскольку он был установлен, если он существовал в первой строке.