I have this code to check that my ToS checkbox is checked:
if (!isset($_POST['tosagree'])) {//if the user did not agree to ToS
$errors[] = '<span>Please agree to the Terms of Service.<span>';
}
For some reason it is allowing me to register even with that code there. The weird thing is that if any other field is not field and that field is not checked it will print the error, but if that is the only problem it allows the user to register.
Update: seems like its a problem with something weird in my code. If you feel like looking through 217 lines of code here is all the code: http://pastebin.com/YkERYpeF
Whether !isset($_POST['tosagree'])
will be enough depends on the browser.
To be safe, always set the value
attribute of the checkbox. Then, you simply check if that value is present:
<input type='checkbox' value='agreed'/>
Then do this:
if (!isset($_POST['tosagree']) || $_POST['tosagree'] != "agreed" ) {
$errors[] = '<span>Please agree to the Terms of Service.<span>';
}
Also, when the value
attribute is not explicitly specified, browsers will usually set value
to On
when it is checked.
Ok, I know what's happening. In your PHP code, you have this block:
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>';
}
Then later you have this line:
if ($un && $e && $p && $ic) { //if there are no errors
The problem is that you don't have a flag for when the TOS checkbox isn't checked. The error can't be printed because in the if
statement you have a call to exit()
.