PHP isset() против !empty()

Проблема в том, что когда я использую

$fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);

на стороне PHP после отправки формы с заполненным полем fname выводится именно то, что я заполнил, после отправки с незаполненным полем ввода fname выводится АБСОЛЮТНО НИЧЕГО. Вместо этого используется код !empty

$fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);

после отправки с незаполненным полем ввода fname получаем вывод sample.


person Tural Ali    schedule 09.11.2011    source источник
comment
другие могут захотеть увидеть stackoverflow.com/questions/1219542/   -  person ErichBSchulz    schedule 25.10.2013
comment
RTFM НЕ является допустимым ответом.   -  person iconoclast    schedule 10.05.2014


Ответы (5)


Это потому, что переменная 'fname' все равно отправляется, она просто пуста, но отправлена!

Попробуйте изменить метод формы с POST на GET, и вы сами все увидите.

person moongoal    schedule 09.11.2011

isset() просто проверяет, является ли переменная NULL или нет, и не выдает ошибку E_NOTICE, если вы обращаетесь к неопределенному индексу в массиве (в отличие от is_null()).

Он не проверяет, содержит ли переменная пустую строку!

person ComFreek    schedule 09.11.2011
comment
Можно было бы ожидать, что is_null() проверит, является ли оно нулевым или нет, а isset() проверит, установлено ли оно вообще. К сожалению, ваше описание соответствует действительности. - person Michael Krelin - hacker; 09.11.2011

Это кажется мне совершенно ожидаемым.

Вы отправили форму с элементом под названием fname, поэтому, хотя он был пуст, он все еще был установлен.

Значение isset оценивается как true, поэтому вы ничего не выводите, если отправляете ничего.

person Lucas    schedule 09.11.2011

Какой у Вас вопрос?

Использование isset() для $_POST['key'] в этом случае вернет true, потому что сама переменная была установлена ​​и передана из формы. Поскольку вы присваиваете значение $_POST['fname'] переменной $fname, это значение всегда будет присвоено, даже если оно пустое.

empty() вернет false, если этой переменной не присвоено значение.

person BenM    schedule 09.11.2011

Мне это кажется правильным. Бывает, что когда поле ввода отправляется пустым, оно будет пустым в массиве $_POST, не NULL.

$_POST['fname'] = "";
isset($_POST['fname']) == true;

$_POST['fname'] = "";
!empty($_POST['fname']) == false;

Что вы можете сделать, так это использовать array_key_exists, чтобы проверить, что он находится в массиве $_POST вместо isset:

$_POST['fname'] = "";
array_key_exists('fname', $_POST) == true; // independent of its value
person gustavotkg    schedule 09.11.2011