我正在我的本地wampserver上工作,在那里我正在用PHP测试表单验证;我不明白为什么我的输入值总是设置为——if(isset($_POST['variable']))
——,即使我什么都不输入?
这是最恼人的选择标签:如果我不选择(然后我知道没有"selected"属性),第一个选项值将被设置为我的选择…
这里有人能帮我吗?谢谢,-)说明
这个行为是正确的,这是HTML的工作方式。为了解决这个问题,你还需要检查你返回的值是否正确,而不仅仅是它是否设置。
你可以让select的第一个值为空:
<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
}
我应该在这里指出empty()
将0视为空,所以如果您发送回整数,那么您应该以以下方式进行检查:
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'])
这就是HTML的工作方式,你没办法。
唯一没有被发送到服务器的输入类型是一个空的复选框(这让人很恼火)
只需在select标签的顶部添加一个空选项。
由于这种行为,您不必使用isset检查每个字段。
如果您想取消设置空输入,请尝试array_filter($_POST)
与其使用isset(),不如使用empty():
if(!empty($_POST['variable'])) {
// do something
}
相当于:
if (isset($_POST['variable']) && $_POST['variable']) {
// do something
}
,但更容易阅读,略轻。
对于select标签,你可以在顶部添加一个禁用选项,然后select变量将不会被提交,除非他们显式地选择一些东西。
<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。