PHP isset()vs!empty()

时间:2011-11-09 14:22:14

标签: php isset

问题出在我使用

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

在表单提交后的PHP端,填充的fname字段输出正是我填写的内容,在提交未填充的fname输入字段后,输出绝对没有输出。使用代码!empty代替

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

在提交未填充的fname输入字段后,获取输出sample

5 个答案:

答案 0 :(得分:8)

isset()只检查变量是否为NULL,如果访问数组中的未定义索引(不像is_null()),则不会抛出E_NOTICE错误。

检查变量是否包含空字符串!

答案 1 :(得分:5)

那是因为'fname'变量无论如何都是发送的,它只是空的但是被发送了!

尝试将您的表单方法从POST更改为GET,您可以自己查看。

答案 2 :(得分:4)

这似乎完全是我所期待的。

您提交了一个名为fname的元素的表单,所以即使它是空的,它仍然设置。

含义isset的计算结果为true,因此如果您不提交任何内容,则不输出任何内容

答案 3 :(得分:2)

你的问题是什么?

isset()上使用$_POST['key']会在这种情况下返回true,因为变量本身已经设置并从表单中传递。由于您要将$_POST['fname']的值分配给$fname变量,因此将始终为该值指定值,即使该值为空。

如果没有对该变量的赋值,

empty()将返回false。

答案 4 :(得分:2)

对我来说似乎是对的。当输入字段被发送为空时,它会在$_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