我正在本地 wampserver 上工作,我正在使用 PHP 测试表单验证;我不明白为什么我的输入值总是被设置——if(isset($_POST['variable']))
即使我什么也没输入?
这对于选择标签来说是最烦人的:如果我什么都不选择(然后我知道没有“选择”属性),第一个选项值将被设置为我的选择......
有人能帮我一下吗 ?谢谢 ;-)
这种行为是正确的,它是 HTML 的工作方式。要解决此问题,您还需要检查您返回的值是否正确,而不仅仅是设置是否正确。
您可以将选择中的第一个值设为空:
<select name="test">
<option value="">Please select an option...</option>
<option value="option1">Option 1</option>
</select>
然后在你的 PHP 中做:
if(isset($_POST['test'] && !empty($_POST['test'])) {
// there is something in the field
} else {
// trigger error
}
我可能应该在这里指出, 0empty()
会被视为空,因此如果您要发回整数,那么您应该按以下方式进行检查:
if(isset($_POST['test'] && '' !== $_POST['test']) {
// there is something in the field
} else {
// trigger error
}
如果它作为参数发送,它将被设置,即使该值为空字符串。
isset()
告诉您变量是否已定义,而不是是否已填充。
您确实需要检查isset()
您的帖子变量,但您也可以检查它们是否有值:
if(isset($_POST['variable']) && $_POST['variable']!=='') { .... }
希望有帮助。
你应该测试它是否有一个值:
if (isset($_POST['variable']) && $_POST['variable'])
如果要取消设置空输入,请尝试array_filter($_POST)
。
这就是 HTML 的工作方式,你无能为力。
唯一没有发送到服务器的输入类型是一个空的复选框(这反过来又会激怒人们)
只需在您的选择标签顶部添加一个空选项。
由于这种行为,您不必使用 isset 检查每个字段。
我建议使用 empty(),而不是使用 isset():
if(!empty($_POST['variable'])) {
// do something
}
它相当于:
if (isset($_POST['variable']) && $_POST['variable']) {
// do something
}
但更容易阅读,而且更轻。
对于选择标签,您可以在顶部添加禁用选项,然后选择变量将不会被提交,除非他们明确选择了某些东西。
<select name="variable>
<option disabled=disabled>Select one...</option>
//other options here
</select>
你的表格是什么样的?根据位于此处的 isset 文档:http: //php.net/manual/en/function.isset.php, isset 仅在值设置或不为空时返回 true。
因此,如果您的表单正在设置该值,则可能这就是您看到此行为的原因。在正常情况下,未设置的值应在 isset 检查中返回 false。