Как использовать флажки для ввода true (1) или false (0) в mySQL И показывать, как указано в форме php / html?

У меня есть таблица с именем поля Shift_Trig которая должна иметь либо значение true либо false введенное в нее в форме 1 или 0 . У меня есть html-форма с флажком для каждой строки, которая при проверке должна ввести 1 в поле. Я также хочу, чтобы этот флажок отображал текущее значение, хранящееся в поле Shift_Trig в базе данных.

Проблема, с которой я Shift_Trig с моим текущим кодом, – это когда я Shift_Trig поле Shift_Trig , я не получаю результаты, которые я хочу. Например, если я выбираю:

 ---------------------- | ROW 1 | false | ---------------------- | ROW 2 | true | ---------------------- | ROW 3 | false | ---------------------- | ROW 4 | true | ---------------------- | ROW 5 | true | ---------------------- 

Он будет UPDATE следующим образом:

 ---------------------- | ROW 1 | true | ---------------------- | ROW 2 | true | ---------------------- | ROW 3 | true | ---------------------- | ROW 4 | false | ---------------------- | ROW 5 | false | ---------------------- 

Вот мой код формы:

 while($shift_query = $result_shift_query->fetch_assoc()) { echo "<tr>"; echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>"; echo "<td><input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\"><input type=\"checkbox\" name=\"Shift_Trig[]\""; if($shift_query['Shift_Trig'] == '1') { echo " checked=\"checked\""; } echo " value=\"1\"></td>"; echo "<td><input type=\"checkbox\" name=\"deleteBox[]\"></td>"; echo "</tr>"; } 

Вот мой код UPDATE :

 if(isset($_POST['update_submit'])) { $id = $_POST['Shift_ID']; $name = $_POST['Shift_Name']; $short_name = $_POST['Shift_Short_Name']; $color = $_POST['Shift_Color']; $trig = $_POST['Shift_Trig']; $i = 0; foreach($id as $update) { $sql = ("UPDATE shift SET Shift_Name = '$name[$i]', Shift_Short_Name = '$short_name[$i]', Shift_Color = '$color[$i]', Shift_Trig = '$trig[$i]' WHERE Shift_ID = '$update'"); if(!$result_shift_update = $mysqli->query($sql)) { die = ("There was an error updating the shift table [" . $mysqli->error . "]"); } echo "sql: " . $sql . "<br>"; $i++; } 

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

Когда я выбираю строки 2 и 3 в форме, затем повторяю инструкции $sql , я получаю следующее:

 sql: UPDATE shift SET Shift_Name = 'None', Shift_Short_Name = 'None', Shift_Color = '#FF0000', Shift_Trig = '1' WHERE Shift_ID = '1' sql: UPDATE shift SET Shift_Name = 'Morning (05:30 - 14:30)', Shift_Short_Name = 'AM', Shift_Color = '#FFF8AF', Shift_Trig = '1' WHERE Shift_ID = '2' sql: UPDATE shift SET Shift_Name = 'Evening (14:30 - 23:30)', Shift_Short_Name = 'PM', Shift_Color = '#AF9BCF', Shift_Trig = '' WHERE Shift_ID = '3' sql: UPDATE shift SET Shift_Name = 'General (07:30 - 17:30)', Shift_Short_Name = 'GEN', Shift_Color = '#ABFFB3', Shift_Trig = '' WHERE Shift_ID = '4' sql: UPDATE shift SET Shift_Name = 'Night (18:00 - 06:00)', Shift_Short_Name = 'EMMA', Shift_Color = '#BFFAFF', Shift_Trig = '' WHERE Shift_ID = '5' sql: UPDATE shift SET Shift_Name = 'Training', Shift_Short_Name = 'TRN', Shift_Color = '#FFD9BF', Shift_Trig = '' WHERE Shift_ID = '6' sql: UPDATE shift SET Shift_Name = 'Day Off', Shift_Short_Name = 'OFF', Shift_Color = '#FFD859', Shift_Trig = '' WHERE Shift_ID = '7' 

То, что происходит, имеет смысл, потому что первый флажок не выбран, он не передается в данные $_POST , но как я могу написать код, чтобы получить желаемые результаты?

EDIT: Я добавил: <input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\"> но теперь я получаю каждый второй флажок, показывая, как отмечено.

Вы должны указать флажкам явный индекс в HTML:

 $i = 0; while($shift_query = $result_shift_query->fetch_assoc()) { echo "<tr>"; echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>"; echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>"; echo "<td><input type=\"checkbox\" name=\"Shift_Trig[$i]\""; if($shift_query['Shift_Trig'] == '1') { echo " checked=\"checked\""; } echo " value=\"1\"></td>"; echo "<td><input type=\"checkbox\" name=\"deleteBox[$i]\"></td>"; echo "</tr>"; $i++; } 

В коде обновления в начале цикла выполните:

  if (!isset($trig[$i])) { $trig[$i] = 0; } 

Остальная часть кода обновления не изменяется.