我正在使用我的本地wampserver,我在那里用PHP测试表单验证;我无法理解为什么我的输入值总是被设置 - if(isset($_POST['variable']))
- ,即使我什么也没输入?
这对选择标签来说最烦人:如果我什么都不选(然后我明白没有“选择”属性),第一个选项值将被设置为我的选择......
有人可以帮我吗?谢谢; - )
答案 0 :(得分:2)
这种行为是正确的,这是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
}
我应该在这里指出empty()
will看到0为空,所以如果你要发回整数,那么你应该用以下方式检查:
if(isset($_POST['test'] && '' !== $_POST['test']) {
// there is something in the field
} else {
// trigger error
}
答案 1 :(得分:1)
如果它作为参数发送,它将被设置,即使该值是空字符串。
isset()
告诉您是否已定义变量,而不是是否已填充变量。
您需要检查帖子变量上的isset()
,但您也可以检查他们是否有值:
if(isset($_POST['variable']) && $_POST['variable']!=='') { .... }
希望有所帮助。
答案 2 :(得分:0)
您应该测试它是否有值:
if (isset($_POST['variable']) && $_POST['variable'])
答案 3 :(得分:0)
这就是HTML的工作方式,你无法帮助它 唯一没有被发送到服务器的输入类型是一个空的复选框(它反过来令人恼火)
只需在选择标记的顶部添加一个空选项。
由于这种行为,您不必使用isset检查每个字段。
答案 4 :(得分:0)
如果您想取消设置空输入,请尝试array_filter($_POST)
。
答案 5 :(得分:0)
我建议使用empty():
,而不是使用isset()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>
答案 6 :(得分:-1)
您的表格是什么样的?根据此处的isset文档:http://php.net/manual/en/function.isset.php,isset仅在设置值时返回true或不为null。
因此,如果您的表单设置了值,则可能就是您看到此行为的原因。在正常情况下,未设置的值应在isset检查中返回false。