PHP isset()vs!空的()

PHP isset()vs!空的(),php,isset,Php,Isset,问题是当我使用 $fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample'; die($fname); 在PHP端,表单提交后,填写fname字段得到的输出与我填写的完全一样,提交后,填写未填写fname输入字段,得到的输出完全没有任何内容。使用代码!改为空 $fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample'; die($fname); 在使用未填充的fnam

问题是当我使用

$fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在PHP端,表单提交后,填写fname字段得到的输出与我填写的完全一样,提交后,填写未填写fname输入字段,得到的输出完全没有任何内容。使用代码
!改为空

$fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在使用未填充的fname输入字段提交后,获取输出
sample

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

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

你的问题是什么

在这种情况下,在
$\u POST['key']
上使用
isset()
将返回
true
,因为变量本身已经设置并从表单传递。因为您正在将
$\u POST['fname']
的值分配给
$fname
变量,所以即使该值为空,也将始终分配该值


empty()
如果没有为该变量赋值,则将返回false。

我似乎完全希望如此

您提交了一个表单,其中包含一个名为
fname
的元素,因此即使表单为空,它仍然被设置


意思是
isset
的计算结果为true,因此如果提交时不带任何内容,则不会输出任何内容

这是因为“fname”变量无论如何都会发送,它只是空的,但会发送


尝试将表单方法从POST更改为GET,您将自己看到。

我觉得这是对的。当输入字段被发送为空时,它将在
$\u POST
数组中为空,而不是
NULL

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

$_POST['fname'] = "";
!empty($_POST['fname']) == false;
您可以使用
array\u key\u exists
检查它是否在
$\u POST
数组中,而不是
isset

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

人们可能希望
is\u null()
检查它是否为null,并
isset()
检查它是否已设置。遗憾的是,您的描述是准确的。其他人可能希望看到RTFM不是一个有效的答案。