Я получаю сообщение об ошибке «Неопределенный индекс» при отправке формы с отмеченным флажком. Есть ли другой способ помимо запуска «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."; ?>