PHP isset() 与 !empty()
问题是,当我
$fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在 PHP 端使用填充了 fname 字段的表单提交后,得到的输出正是我填写的内容,而在使用未填充的 fname 输入字段提交后,得到的输出绝对没有。 使用代码 !empty
代替,获取输出 sample
。
$fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在使用未填充的 fname 输入字段提交后,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
isset()
只是检查变量是否为NULL
,如果您访问数组中未定义的索引,则不会抛出 E_NOTICE 错误(与is_null( 不同) )
)。它不检查变量是否包含空字符串!
isset()
just checks whether the variable isNULL
or not and won't throw an E_NOTICE error if you accessed an undefined index in an array (unlikeis_null()
).It does not check whether the variable is containing an empty string!
那是因为“fname”变量无论如何都会发送,它只是空的但已发送!
尝试将表单方法从 POST 更改为 GET,您就会自己看到。
That's because the 'fname' variable is sent anyway, it's just empty but sent!
Try changing your form method from POST to GET and you'll see by yourself.
这对我来说似乎完全是预料之中的。
您提交了一个包含名为
fname
的元素的表单,因此即使它为空,它仍然被设置。意思是
isset
计算结果为 true,因此如果您不提交任何内容,则不会输出任何内容This seems completely expected to me.
You submitted a form with an element called
fname
, so even though it was empty it was still set.Meaning
isset
evaluates to true, hence you output nothing if you submit with nothing你的问题是什么?
在这种情况下,对
$_POST['key']
使用isset()
将返回true
,因为变量本身已经被设置并传递了从形式上看。由于您将$_POST['fname']
的值分配给$fname
变量,因此该值将始终被分配,即使它为空也是如此。如果没有对该变量进行赋值,
empty()
将返回 false。What is your question?
Using
isset()
on$_POST['key']
will returntrue
in this circumstance, because the variable itself has been set and passed through from the form. Because you're assigning the value of$_POST['fname']
to the$fname
variable, the value will always been assigned, even if it's empty.empty()
will return false if there is no assignment to that variable.这对我来说似乎是正确的。碰巧当输入字段发送为空时,
$_POST
数组中的空,不是NULL
。您可以做的是使用
array_key_exists
检查它是否在$_POST
数组中而不是isset
中:It seems right to me. It happens that when input field is sent empty, it'll be empty in
$_POST
array, notNULL
.What you could do is use
array_key_exists
to check it is in$_POST
array instead ofisset
: