这是检查PHP检查复选框的正确方法吗?

时间:2011-03-05 22:25:45

标签: php html forms checkbox

我有这段代码来检查我的ToS复选框是否已选中:

if (!isset($_POST['tosagree'])) {//if the user did not agree to ToS
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

出于某种原因,它允许我在那里注册那些代码。奇怪的是,如果任何其他字段不是字段并且未检查该字段,则它将打印错误,但如果这是唯一的问题,则允许用户注册。

更新:在我的代码中看起来像是一个奇怪的问题。如果您想查看217行代码,请输入以下代码:http://pastebin.com/YkERYpeF

1 个答案:

答案 0 :(得分:6)

!isset($_POST['tosagree'])是否足够取决于浏览器。

为安全起见,请始终设置复选框的value属性。然后,您只需检查该值是否存在:

<input type='checkbox' value='agreed'/>

然后这样做:

if (!isset($_POST['tosagree']) || $_POST['tosagree'] != "agreed" ) {
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

此外,如果未明确指定value属性,浏览器通常会在检查时将value设置为On

修改

好的,我知道发生了什么。在您的PHP代码中,您有以下块:

if (!isset($_POST['tosagree']) || $_POST['tosagree'] != "agreed") {//if the user did not agree to ToS
    $errors[] = '<span>Please agree to the Terms of Service.<span>';
}

之后你会有这一行:

if ($un && $e && $p && $ic) { //if there are no errors

问题是,如果未选中TOS复选框,则没有标记。无法打印错误,因为在if声明中您调用了exit()