Отправить HTML-форму с пустыми флажками

У меня есть HTML-форма – с PHP, я отправляю данные формы в базу данных MySQL. Некоторые ответы на вопросы по форме имеют флажки. Очевидно, пользователю не нужно указывать все флажки для одного вопроса. Я также хочу, чтобы другие вопросы (включая радиогруппы) были необязательными.

Однако, если я отправлю форму с пустыми полями, радио-группами и т. Д., Я получил длинный список сообщений об ошибках «Undefined index» для каждого из них.

Как я могу обойти это? Благодарю.

Непроверенные радио или элементы флажка не отправляются, поскольку они не считаются успешными . Поэтому вам нужно проверить, отправлены ли они с помощью функции isset или empty .

 if (isset($_POST['checkbox'])) { // checkbox has been checked } 

Я использовал эту технику время от времени:

 <input type="hidden" name="the_checkbox" value="0" /> <input type="checkbox" name="the_checkbox" value="1" /> 

Примечание. Это интерпретируется по- разному на разных серверных языках, поэтому проверяйте и при необходимости отрегулируйте. Благодаря SimonSimCity для наконечника.

Флажок непроверенный не отправляется в данных POST. Вы должны просто проверить, не пуст ли он:

 if (empty($_POST['myCheckbox'])) .... else .... 

В PHP empty() и isset() не генерируются уведомления.

Вот простой способ обхода проблемы с помощью javascript:

перед отправкой формы, содержащей флажки, установите «выключен» на 0 и проверьте их, чтобы они были отправлены. это работает, например, для checkbox-массивов.

///// пример //////

учитывая форму с id = "formId"

 <form id="formId" onSubmit="return formSubmit('formId');" method="POST" action="yourAction.php"> <!-- your checkboxes here . for example: --> <input type="checkbox" name="cb[]" value="1" >R <input type="checkbox" name="cb[]" value="1" >G <input type="checkbox" name="cb[]" value="1" >B </form> 
 <?php if($_POST['cb'][$i] == 0) { // empty } elseif ($_POST['cb'][$i] == 1) { // checked } else { // ???? } ?> <script> function formSubmit(formId){ var theForm = document.getElementById(formId); // get the form var cb = theForm.getElementsByTagName('input'); // get the inputs for(var i=0;i<cb.length;i++){ if(cb[i].type=='checkbox' && !cb[i].checked) // if this is an unchecked checkbox { cb[i].value = 0; // set the value to "off" cb[i].checked = true; // make sure it submits } } return true; } </script> 

Чтобы добавить код fmsf, добавляя флажки, я делаю их массивом, имея [] в имени

 <FORM METHOD=POST ACTION="statistics.jsp?q=1&g=1"> <input type="radio" name="gerais_radio" value="primeiras">Primeiras Consultas por medico<br/> <input type="radio" name="gerais_radio" value="salas">Consultas por Sala <br/> <input type="radio" name="gerais_radio" value="assistencia">Pacientes por assistencia<br/> <input type="checkbox" name="option[]" value="Option1">Option1<br/> <input type="checkbox" name="option[]" value="Option2">Option2<br/> <input type="checkbox" name="option[]" value="Option3">Option3<br/> <input type="submit" value="Ver"> 

Использовать это

 $myvalue = (isset($_POST['checkbox']) ? $_POST['checkbox'] : 0; 

Или замените то, что не имеет значения для 0

У нас проблемы с обнаружением того, какой из них проверен или нет.

Если вы заполняете форму в цикле for, используйте свойство value в качестве владельца данных:

  <?php for($i=1;$i<6;$i++):?> <input type="checkbox" name="active[]" value="<?php echo $i ?>" <?endfor;?> 

Если вы отправите форму, вы получите порядковые номера отмеченных флажков (в этом случае я проверил 3-й и 4-й флажки):

  array(1) { ["active"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "4" } } 

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

  if(in_array($_POST['active'] ,$i)) $answer_result = true; else $answer_result = false; 

Окончательный код для тестирования:

  <?php if (isset($_POST) && !empty($_POST)): echo '<pre>'; var_dump($_POST); echo '</pre>'; endif; ?> <form action="test.php" method="post"> <?php for($i=1;$i<6;$i++):?> <input type="checkbox" name="active[]" value="<?php echo $i; ?>" /> <?php endfor;?> <button type="submit">Submit</button> </form> 

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

То, что я хотел получить, – это набор флажков с значениями включения и выключения. Хитрость заключалась в том, чтобы отправить для каждого флажка значение вкл / выкл разделителя. Допустим, что разделитель «;» поэтому строка, которую вы получаете, это

;, on,;,;;;

Затем, как только вы получите сообщение, просто разделите данные на массив, используя символ «,» в качестве символа для разделения, а затем, если элемент массива содержит «включено», флажок включен, иначе он выключен.

Для каждого флажка измените идентификатор, все остальное будет таким же … и синтаксис, который повторяется:

  <div> <input type="hidden" name="onoffswitch" class="onoffswitch-checkbox" value=";" /> ...some other custom code here... <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch1" checked> </div> 

EDIT: вместо «;» вы можете использовать некоторое строковое значение KEY, и таким образом вы узнаете, что вы не испортили заказ, как только POST будет получен на стороне сервера … таким образом вы можете легко создать карту, хэш или что-то еще. PS: держите их обоих в одном теге div.