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

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.

Edit

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().