Проверка переключателей в php

Я новичок в PHP и пытаюсь написать код, чтобы проверить, нажал ли пользователь переключатель в ответ на вопрос опроса. Есть множество переключателей. Если они не нажали на один, я хотел бы сделать ошибку пользователю. Я пробовал пару подходов, но ничего не нашел. Вот мой текущий код и сообщение об ошибке, которое я получаю. Для скрипта PHP я пробовал все три следующих примера:

.... if ($_POST['degree_type'] == "MS"||"MA"||"MBA"||"JD"||"PhD") { $degree_type = ($_POST['degree_type']); } else if ($_POST['degree_type'] == null) { $errors[] = 'Please select a degree type.'; } if (isset($_POST['degree_type'])) { $errors[] = 'Please select a degree type.'; } else { $degree_type= $_POST['degree_type']; } if (array_key_exists('degree_type', $_POST)) { $degree_type = ($_POST['degree_type']); } else { $errors[] = 'Please select a degree type.'; } .... 

Вот мой html, расположенный на той же странице и ниже PHP.

  <table> <tr> <td class="span6">What type of degree?</td> <td class="span6"> <input type="radio" name="degree_type" value="MA" <?php if (($_POST['degree_type']) == 'MA') {echo 'checked="checked"';} ?> >MA <input type="radio" name="degree_type" value="MS" <?php if (($_POST['degree_type']) == 'MS') {echo 'checked="checked"';} ?> >MS <input type="radio" name="degree_type" value="MBA" <?php if (($_POST['degree_type']) == 'MBA') {echo 'checked="checked"';} ?> >MBA <input type="radio" name="degree_type" value="JD" <?php if (($_POST['degree_type']) == 'JD') {echo 'checked="checked"';} ?> >JD </td> </tr> ETC.... 

Я получаю ошибку «неопределенного индекса» в каждой из строк HTML, ссылающихся на переключатель. Я понимаю, что это может быть проще сделать в JavaScript, но я мало что знаю о JS … Детальный ответ был бы очень признателен!

Благодаря!

Если вы получаете неопределенную ошибку на странице HTML, просто добавьте проверку isset() в логику, в которой вы печатаете значение. Например:

 <input type="radio" name="degree_type" value="JD" <?php if (($_POST['degree_type']) == 'JD') {echo 'checked="checked"';} ?> >JD 

становится

 <input type="radio" name="degree_type" value="JD" <?php if (isset($_POST['degree_type']) && $_POST['degree_type'] == 'JD') {echo 'checked="checked"';} ?>>JD 

Ошибка «неопределенного индекса» в PHP означает, что вы используете неопределенную переменную в выражении. Так, например, когда вы это сделали:

 <?php if (($_POST['degree_type']) == 'MA') {echo 'checked="checked"';} ?> 

$ _POST ['degree_type'] не определен. Существует несколько различных причин, по которым переменные не определены. Я должен увидеть остальную часть файла PHP, чтобы узнать точную причину.

Одной из причин может быть то, что форма не была должным образом представлена. Другая причина может заключаться в том, что выражение оценивалось до отправки формы.

В любом случае, код ниже должен работать. Обратите внимание, что я проверяю, установлено ли каждое поле, прежде чем пытаться проверить его или сравнить его значение.

ПРИМЕЧАНИЕ. Очевидно, что вы должны иметь надлежащий HTML-тип, открывать и закрывать теги тела и т. Д. HTML в этом примере является только частью формы страницы.

  <!-- myform.php --> <form name="my-form" method="POST" action="/myform.php"> <span>What degree do you have?</span> <label for="bs">BS</label> <input type="radio" name="degree" id="bs" value="BS" <?php if(isset($degree) && $degree == 'BS') echo 'checked="checked"';?> /> <label for="ma">MA</label> <input type="radio" name="degree" id="ma" value="MA" <?php if(isset($degree) && $degree == 'MA') echo 'checked="checked"';?> /> <label for="phd">PHD</label> <input type="radio" name="degree" id="phd" value="PHD" <?php if(isset($degree) && $degree == 'PHD') echo 'checked="checked"';?> /> <span>Which do you like better?</span> <label for="steak">steak</label> <input type="radio" name="food" id="steak" value="steak" <?php if(isset($food) && $food == 'steak') echo 'checked="checked"';?> /> <label for="lobster">lobster</label> <input type="radio" name="food" id="lobster" value="lobster" <?php if(isset($food) && $food == 'lobster') echo 'checked="checked"';?> /> <input type="hidden" name="submitted" value="submitted" /> <input type="submit" name="submit" value="submit" /> </form> <?php if (isset($_POST['submitted'])) { $errors = array(); if (isset($_POST['degree'])) { $degree = $_POST['degree']; } else { $errors[] = 'Please select your degree type.'; } if (isset($_POST['food'])) { $food = $_POST['food']; } else { $errors[] = 'Please select your food preference.'; } if (count($errors) > 0) { foreach($errors as $error) { echo $error; } } else { echo 'Thank you for your submission.'; } } ?> 

Причина, по которой вы видите эти уведомления, состоит в том, что $_POST['degree_type'] просто не установлен. Либо опечатка, либо она просто не была отправлена ​​(потому что вы не выбрали ее перед отправкой формы).

Также обратите внимание,

 if ($_POST['degree_type'] == "MS"||"MA"||"MBA"||"JD"||"PhD") { 

Это не работает. Это проверит, что $_POST['degree_type'] == "MS" ИЛИ: "MS" is truthy (always true) ИЛИ "MA" is truthy (always true) … см., "MA" is truthy (always true) я направляюсь?

 if (in_array($_POST['degree_type'], array("MS", "MA", "MBA", "JS", "PhD")) { 

Лучшая альтернатива.


Unrelated:

Вы должны действительно использовать элементы <label> для разметки ваших ярлыков. Пример:

 <label><input type="radio" name="degree_type" value="MA"> MA</label>. 

Это будет MA clickable.

Когда форма отправляется без участия группы переключателей (определяемой как группа переключателей, чьи атрибуты имени одинаковы), представленные данные не включают это имя вообще.

Вот почему вы получаете ошибку «неопределенного индекса» (фактически уведомление); когда вы проверяете значение $_POST['degree_type'] , и никакой радиокнопки с именем «degree_type» не выбраны, $_POST['degree_type'] вообще не существует.

К счастью, это упрощает вашу проверку. array_key_exists('degree_type', $_POST) , вы можете узнать, присутствует или нет ключ, и, таким образом, был ли выбран переключатель, не запрашивая уведомление «неопределенного индекса» PHP. Если вызов функции возвращает true, вы знаете, что был выбран переключатель; в противном случае вы знаете, что этого не было, и именно это пытается определить ваша проверка. Следовательно:

 if (array_key_exists('degree_type', $_POST)) { $degree_type = $_POST['degree_type']; } else { array_push($errors, "Please select a degree type."); }; 

будет чисто выполнять вашу задачу.

 //set a default $degree_type = ""; if (isset($_POST['degree_type'])) { $degree_type = $_POST['degree_type']; } else { $errors[] = 'Please select a degree type.'; } 

Затем вместо использования

 if (($_POST['degree_type']) == 'MA') 

для ваших проверок используйте:

 if($degree_type == 'MA') 

undefined index означает, что используемый вами ключ не был инициализирован. Таким образом, $ _POST ['degree_type'] не будет отображаться до тех пор, пока первая форма не будет отправлена.