Я пытаюсь проверить, был ли флажок установлен на 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
.