Как проверить, установлен ли флажок в PHP?

Я пытаюсь проверить, был ли флажок установлен на PHP для регистрации. Но сейчас это не работает. Это код, который я использую до сих пор, чтобы проверить, проверен ли он.

if(!isset($_POST['tos'])) $this->errors[] = 'Please accept our Terms of Service.'; 

И это HTML-код.

 <div class="checkbox"> <label> <input type="checkbox" name="tos" value="0"> I agree to the <a href="#">Terms of Service</a> and <a href="#">Privacy Policy</a> </label> </div> 

Полный код формы:

  <form role="form" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>"> <div class="form-group"> <div class="row"> <div class="col-sm-6"> <label for="firstname">Firstname</label> <input type="text" class="form-control" id="firstname" name="firstname" placeholder="Firstname"> </div> <div class="col-sm-6"> <label for="surname">Surname</label> <input type="text" class="form-control" id="surname" name="surname" placeholder="Surname"> </div> </div> </div> <div class="form-group"> <label for="username">Username</label> <input type="text" class="form-control" id="ruser" name="ruser" placeholder="Username"> </div> <div class="form-group"> <label for="email2">Email address</label> <input type="email" class="form-control" id="remail" name="remail" placeholder="Enter email"> </div> <div class="form-group"> <div class="row"> <div class="col-sm-6"> <label for="password2">Password</label> <input type="password" class="form-control" id="rpass" name="rpass" placeholder="Password"> </div> <div class="col-sm-6"> <label for="password2">Repeat password</label> <input type="password" class="form-control" id="rpass2" name="rpass2" placeholder="Password"> </div> </div> </div> <div class="checkbox"> <label> <input type="checkbox" name="tos" value="0"> I agree to the <a href="#">Terms of Service</a> and <a href="#">Privacy Policy</a> </label> </div> <input type="hidden" name="secur" value="<?php echo $ip;?>"/> <input type="hidden" name="token" value="<?php echo $token;?>"/> <button type="submit" name="register" class="btn btn-block btn-color btn-xxl">Create an account</button> </form> 

Что случилось с этим кодом? Любая помощь будет оценена по достоинству.

 if(!isset($_POST['tos'])) $this->errors[] = 'Please accept our Terms of Service.';` 

То, что это делает, говорит, что в $ _POST нет «tos», выдайте ошибку.

Действительно, вы должны, вероятно, проверить эту клиентскую сторону на javascript, прежде чем форма будет отправлена ​​на сервер.

Вы также можете …

 <input type="checkbox" name="tos" value="accepted" checked> 

И PHP:

 if(isset($_POST['tos']) && $_POST['tos']==='accepted') echo 'All good'; else array_push($errors,'err code here'); //to add to $error array 

Обновить

Я не уверен, что вы используете jQuery или нет, но для более удобного подхода:

 var tos = $('#tos'); var notice = $('.notice'); tos.on('click',function(){ if(tos.is(':checked')){ notice.text('Thank you.'); } else{ notice.text('Please accept our ToS to continue.'); } }) 

См. Рабочий пример здесь. Вы можете даже остановить форму вместе, если она не установлена. BTW, если я правильно помню, что checkbox входы посылают только POST-данные, если они checkbox .