2014-01-26 4 views
1

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

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

+1

У вас есть форма POST для HTML? var_dump ($ _ POST); –

+0

Да, у меня есть форма POST для html-кода. – Anders

+1

можете ли вы разместить полную форму? – Aris

ответ

3
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 

Update

я не уверен, если вы используете 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.'); 
    } 
}) 

See a working example here. Вы можете даже закрыть форму, если она не установлена. BTW, если я правильно помню checkbox входы посылают только данные POST если проверено.

+0

Я пробовал код bro, но я не уверен, работает ли он. Мне нужен текст в массив ошибок, если он не проверен. Пробовал это -> if (isset ($ _ POST ['tos']) && $ _POST ['tos'] === 1) $ this-> errors [] = 'All good'; \t else $ this-> errors [] = 'ToS не был принят ...'; <--- Но он не добавляет его в массив ошибок. Есть идеи? – Anders

+0

Я не уверен, что у вас есть, но я думаю, что вы используете JS-подход к массивам. Если у вас уже существует '$ errors = array()', вы можете добавить значение, используя 'array_push ($ errors, 'err code here');'. Или даже '$ errors [0] = 'err code';', если 0 пусто, и вы не хотите перезаписывать его каждый раз. –

+0

Серьезно, хотя, если вы собираетесь передавать ввод через POST, я бы проверял до отправки с помощью javascript. Было бы гораздо удобнее для пользователя, я бы подумал, вместо того, чтобы нажимать submit, нужно вернуться и, возможно, потерять данные, которые они ввели. –

Смежные вопросы