问题出在我使用
时$fname = isset($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在表单提交后的PHP端,填充的fname字段输出正是我填写的内容,在提交未填充的fname输入字段后,输出绝对没有输出。使用代码!empty
代替
$fname = !empty($_POST['fname']) ? $_POST['fname'] : 'sample';
die($fname);
在提交未填充的fname输入字段后,获取输出sample
。
答案 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