У меня есть таблица с именем поля Shift_Trig
, которое должно иметь значение true
или false
, введенное в него в форме 1
или 0
. У меня есть html-форма с флажком для каждой строки, которая при проверке должна ввести 1
в поле. Я также хочу, чтобы этот флажок отражал текущее значение, хранящееся в поле Shift_Trig
в базе данных.Как использовать флажки для ввода true (1) или false (0) в mySQL И показывать, как указано в форме php/html?
Проблема, с которой я столкнулся с моим текущим кодом, - это когда я UPDATE
поле 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++;
}
I'v e удалил некоторый код, чтобы облегчить его чтение, например, где он заполняет текстовые поля данными поля из базы данных.
Когда я выбираю строку 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\">
, но теперь я получаю каждый второй флажок, показывая, как отмечено.
Рассмотрите этот подход: ''. Если флажок установлен, он будет перезаписывать скрытое значение, если нет, скрытое значение будет отправлено. На мой взгляд, наиболее логичным «$ id» в этом случае будет идентификатор shift вместо некоторого индекса. (Edit: также посмотрите [подготовленные операторы и переменные связывания] (http://us.php.net/manual/en/mysqli.quickstart.prepared-statements.php#example-1680).) – DCoder
@DCoder Я был просто прочитав этот [ответ] (http://stackoverflow.com/questions/1944019/how-do-i-get-all-checkbox-variables-even-if-not-checked-from-html-to-php) и он предложил то же самое. Я собираюсь попробовать это. –
@DCoder Я отредактировал вопрос, по какой-то причине он не работает:/ –