2014-09-19 2 views
0

У меня есть два флажка в моей форме:Как проверить ввод флажка с помощью PHP?

<div class="label-input-wrapper pickup">  
     <div class="form-label">I need Airport pick-up</div> 
     <div class="form-input"> 
      <input type="checkbox" name="pick_up" value="Yes" />Yes 
      <input type="checkbox" name="pick_up" value="No" />No 
      <div class="error-msg"> 
       <?php if(isset($errors['pick_up_no'])) { echo '<span style="color: red">'.$errors['pick_up_no'].'</span>'; } ?> 
      </div> 
     </div> 
</div> 

переменных, которая сохраняет значение вышеуказанных флажков: $pickup = $_POST['pick_up'];

Validation:

//Check the airport pickup and make sure that it isn't a blank/empty string. 
     if ($pickup == ""){ 
      //Blank string, add error to $errors array.   
      $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; 
     }  

     if (($pick_up = Yes) && ($pick_up = No)) { 
      //if both selected, add error to $errors array.   
      $errors['pick_up_no'] = "Can not select Yes and No together!"; 
     } 

Но выше проверку только печать Can not select Yes and No together! если оба выбраны НЕ, или выбран только один выбранный или даже оба. Он дает такое же сообщение об ошибке для всех выборов. Зачем?

+1

используйте радиокнопку – Ghost

+0

nop .. Я просто хочу использовать флажки. Мне нравится это имя @Ghost –

+0

Вы должны обрабатывать значения Да и Нет как строки - так что кавычки вокруг них! – Adimeus

ответ

2

Я не знаю, почему вам нужен флажок для этого (это то, что кнопки радиостанции должны делать), но вы можете сделать это что-то вроде:

if(!isset($_POST['pick_up']) || count($_POST['pick_up']) > 1) { 
    echo 'please select at least 1 choice'; 
} else { 
    echo $_POST['pick_up'][0]; 
} 

Затем сделайте ваши имена флажка:

name="pick_up[]" 

Если у вас действительно есть отдельные сообщения об ошибках.Сделайте примерно следующее:

$errors['pick_up_no'] = ''; 
if(!isset($_POST['pick_up'])) { 
    $errors['pick_up_no'] = "Please let us know your airport pick up requirement!"; 
} elseif(count($_POST['pick_up']) > 1) { 
    $errors['pick_up_no'] = "Can not select Yes and No together!"; // weird UX, should have prevented this with a radio button 
} 

if($errors['pick_up_no'] != '') { 
    echo $errors['pick_up_no']; 
} else { 
    echo $_POST['pick_up'][0]; 
} 
+0

Я склонен думать, что это сработает, хотя я еще не тестировал его. OP должен дать какой-то ввод, если он сделал это или нет. Я прямо посреди чего-то, поэтому я вернусь позже, чтобы сообщить, если это произойдет, я обязательно буду +1;), но я склонен думать, что переключатели являются более выполнимым вариантом, как я отметил в моем редактировании. Флажки для да и нет, не имеет смысла, ИМХО. –

+0

@ Fred-ii- да, на самом деле, я тестировал это перед публикацией, но я также согласен с вашими чувствами, это, должно быть, радиокнопка, без сомнения, странно для пользователя, чтобы на самом деле выбрать и да, и нет. – Ghost

+1

. Это сводится к «желаемое решение» - это да ** или ** нет. Возьмите меня в 8 и не опаздывайте на хахаха! –

1

Невозможно, чтобы $ _POST ['pick_up'] был одновременно да и нет, поскольку имя pick_up и не pick_up [] < - указывает на несколько переменных. Таким образом, это будет либо «да», либо «нет», потому что один параметр перезапишет другой. Вам нужно будет использовать javascript, чтобы проверить, что только один проверен перед отправкой в ​​этом случае.

+0

Следуйте этому и конвертируйте имя флажков 'pick_up []' и измените, как th is 'if (($ pick_up == 'Yes') && ($ pick_up == 'No'))' –

+0

Почему я ** получил это вниз. Мой ответ абсолютно правильный. Поскольку в настоящее время его код, параметр _POST не может содержать как «да», так и «нет» одновременно. –

3

Вы в настоящее время назначения с одним = знаком вместо сравнения == с

if (($pick_up = Yes) && ($pick_up = No)) 

вам нужно изменить его

if (($pick_up == "Yes") && ($pick_up == "No")){...} 

обёртывания Yes и No в кавычках, чтобы быть обрабатывается как строка.


Edit:

Лучше всего использовать радио-кнопки, ИМХО.

Использование флажков при предоставлении пользователю параметров «Да» и «Нет» не должно использоваться; это сбивает с толку.

Это должно быть либо YesИЛИNo и не и.

<input type="radio" name="pick_up" value="Yes" />Yes 
<input type="radio" name="pick_up" value="No" />No 

Это наиболее осуществимое решение.

+0

Я обновил до 'if (($ pick_up ==" Да ") && ($ pick_up ==" Нет ")) { \t \t \t // если оба выбраны, добавьте ошибку в массив $ errors. \t \t \t $ errors ['pick_up_no'] = "Невозможно выбрать Да и Нет вместе!"; \t \t} ', но он просто ничего не печатает, если выбраны бот. –

+0

Я сделал редактирование с помощью' if (($ pick_up == «Да») || ($ pick_up == «Нет»)) 'try оператор 'OR' @RiffazStarr или см. ответ Ghost. –

+0

@RiffazStarr Вы что-то повторяете «$ errors»? Просто сделайте '$ errors ['pick_up_no'] =« Пожалуйста ... »ничего не делает без эха. –

1

Используйте массив элементов поля флажка;

<input type="checkbox" name="pick_up[]" />Yes 
<input type="checkbox" name="pick_up[]" />No 

затем в вашем PHP скрипт:

<?php 

$pick_ups=$_POST['pick_up']; 

$first=isset($pick_ups[0]); //true/false of first checkbox status 
$second=isset($pick_ups[1]); //true/false of second checkbox status 

?> 

Опять же, как вы уже сказали, вы должны использовать радио-кнопки для этой цели! Учтите, что $ _POST не отправляет флажок, если он не установлен (проверьте с isset ($ _ POST ['name'])

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