2012-12-23 3 views
0

У меня есть таблица с именем поля 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\">, но теперь я получаю каждый второй флажок, показывая, как отмечено.

+1

Рассмотрите этот подход: ''. Если флажок установлен, он будет перезаписывать скрытое значение, если нет, скрытое значение будет отправлено. На мой взгляд, наиболее логичным «$ id» в этом случае будет идентификатор shift вместо некоторого индекса. (Edit: также посмотрите [подготовленные операторы и переменные связывания] (http://us.php.net/manual/en/mysqli.quickstart.prepared-statements.php#example-1680).) – DCoder

+0

@DCoder Я был просто прочитав этот [ответ] (http://stackoverflow.com/questions/1944019/how-do-i-get-all-checkbox-variables-even-if-not-checked-from-html-to-php) и он предложил то же самое. Я собираюсь попробовать это. –

+0

@DCoder Я отредактировал вопрос, по какой-то причине он не работает:/ –

ответ

1

Вы должны дать Флажки явный индекс в 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; } 

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

+0

Благодарим вас за ответ. Можете ли вы показать мне, как будет выглядеть запрос 'UPDATE'? –

+0

См. Обновленный ответ. – Barmar

+0

Это исправлено! Я отмечаю это как решение, спасибо за вашу помощь, я узнал что-то ценное сегодня! –

 Смежные вопросы

  • Нет связанных вопросов^_^