0

我正在本地 wampserver 上工作,我正在使用 PHP 测试表单验证;我不明白为什么我的输入值总是被设置——if(isset($_POST['variable']))即使我什么也没输入?

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

有人能帮我一下吗 ?谢谢 ;-)

4

7 回答 7

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
}

我可能应该在这里指出, 0empty()被视为空,因此如果您要发回整数,那么您应该按以下方式进行检查:

if(isset($_POST['test'] && '' !== $_POST['test']) {
    // there is something in the field
} else {
    // trigger error
}
于 2011-08-26T15:38:17.520 回答
1

如果它作为参数发送,它将被设置,即使该值为空字符串。

isset()告诉您变量是否已定义,而不是是否已填充。

您确实需要检查isset()您的帖子变量,但您也可以检查它们是否有值:

if(isset($_POST['variable']) && $_POST['variable']!=='') { .... }

希望有帮助。

于 2011-08-26T15:38:44.333 回答
0

你应该测试它是否有一个值:

if (isset($_POST['variable']) && $_POST['variable'])
于 2011-08-26T15:38:02.280 回答
0

如果要取消设置空输入,请尝试array_filter($_POST)

于 2011-08-26T15:41:36.130 回答
0

这就是 HTML 的工作方式,你无能为力。
唯一没有发送到服务器的输入类型是一个空的复选框(这反过来又会激怒人们)

只需在您的选择标签顶部添加一个空选项。

由于这种行为,您不必使用 isset 检查每个字段。

于 2011-08-26T15:38:31.750 回答
0

我建议使用 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>
于 2011-08-26T16:02:13.060 回答
-1

你的表格是什么样的?根据位于此处的 isset 文档:http: //php.net/manual/en/function.isset.php, isset 仅在值设置或不为空时返回 true。

因此,如果您的表单正在设置该值,则可能这就是您看到此行为的原因。在正常情况下,未设置的值应在 isset 检查中返回 false。

于 2011-08-26T15:38:39.877 回答