为什么我的输入值总是在php中设置?

时间:2011-08-26 15:35:02

标签: php forms isset

我正在使用我的本地wampserver,我在那里用PHP测试表单验证;我无法理解为什么我的输入值总是被设置 - if(isset($_POST['variable'])) - ,即使我什么也没输入?

这对选择标签来说最烦人:如果我什么都不选(然后我明白没有“选择”属性),第一个选项值将被设置为我的选择......

有人可以帮我吗?谢谢; - )

7 个答案:

答案 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。