2

问题是当我使用

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

在 PHP 端,在填写了 fname 字段的表单提交后,得到的输出与我填写的完全一致,在提交未填写的 fname 输入字段后,得到输出绝对没有。!empty改用代码

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

使用未填充的 fname 输入字段提交后,得到输出sample

4

5 回答 5

8

isset()只需检查变量是否NULL存在,如果您访问数组中的未定义索引(与 不同is_null()),则不会引发 E_NOTICE 错误。

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

于 2011-11-09T14:24:46.433 回答
5

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

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

于 2011-11-09T14:28:13.670 回答
4

这似乎完全符合我的预期。

您提交了一个带有名为 的元素的表单fname,因此即使它是空的,它仍然被设置。

意义isset评估为真,因此如果你什么都不提交,你什么也不输出

于 2011-11-09T14:26:39.663 回答
2

你的问题是什么?

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

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

于 2011-11-09T14:25:22.333 回答
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
于 2011-11-09T14:32:56.913 回答