Флажок PHP form и неопределенный индекс

Я получаю сообщение об ошибке «Неопределенный индекс» при отправке формы с отмеченным флажком. Есть ли другой способ помимо запуска «isset» или «empty» check для каждого отдельного опубликованного значения?

Я посмотрел на этот вопрос, и у меня возникли проблемы с верой в то, что это единственное решение.

Ниже приведен пример кода: EDIT: пожалуйста, не то, что это не фактические имена столбцов таблиц; они называются уникальными (например, postAddress, displayPhone, student и т. д.),

Вы можете написать функцию, которая проверяет, был ли установлен флажок:

function checkbox_value($name) { return (isset($_POST[$name]) ? 1 : 0); } 

Теперь вызовите эту функцию в вашем запросе следующим образом:

 $sql = 'UPDATE table SET '. 'checkbox1 = '. checkbox_value('checkbox1') .','. 'checkbox2 = '. checkbox_value('checkbox2') .','. 'checkbox3 = '. checkbox_value('checkbox3') .','. 'checkbox4 = '. checkbox_value('checkbox4') .','. 'checkbox5 = '. checkbox_value('checkbox5') .','. "LIMIT 1"; 

Если вы хотите включить / выключить флажок, вы можете написать скрытое значение, прежде чем писать этот флажок.

 <input type="hidden" name="checkbox1" value="no" /> <input type="checkbox" name="checkbox1" value="yes" /> 

Это всегда будет возвращать значение, либо нет (по умолчанию, если флажок установлен по умолчанию) или да.

Вы можете проверить ввод с функциями фильтра с помощью FILTER_VALIDATE_BOOLEAN .

Его проще, если вы пишете функцию для этого, например formCheckbox ($ name), с параметрами значений (значение «on» означает, что флажок установлен по умолчанию), атрибуты и т. Д.

попробуйте следующее

 <?php //first part of the query $query = "UPDATE table SET "; $howManyCheckboxes = 5; //for every checkbox , see if it exist , if it is, add it to the query for($i=1;$i<=$howManyCheckboxes;$i++) { if(isset($_POST['checkbox'.$i])) { $query = $query . " checkbox".$i."='".escape($_POST['checkbox'.$i])."',"; } } //lets remove the last coma $query = substr($query,0,-1); //add the rest of the query $query = $query . " LIMIT 1"; $result = mysql_query( $query ); if( ! $result ) echo "um, not everything went as expected."; ?>