我有这段代码来检查我的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
答案 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()
。