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


Why is my input value always set in php?

我正在我的本地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。