У меня вопрос.
У меня есть страница с сотнями флажков, которые создаются с помощью базы данных. Поэтому, когда база данных возвращает 1, она проверяется иначе, она равна 0 и не проверяется. Когда я пытаюсь проверить флажок и попытаться обновить его в базе данных, некоторые флажки случайным образом проверяются.
Код:
Это запрос
if(isset($_POST['submit'])){ foreach ($_POST['untrain[{$room->room_id}]'] as $room_id) { // This query needs protection from SQL Injection! $user_id; $room_id; $untrainQuery = "UPDATE room_users SET trained = '1' WHERE room_id = $room_id"; $db->update($untrainQuery); } }
Это флажки:
<?php if ($room->trained == 1) { ?> <input type='checkbox' value="<?php echo $room->user_id; ?>" name="trained[<?php echo $room->room_id; ?>]" checked> <?php echo "Y"; } else if ($room->trained == 0) { ?> <input type='checkbox' value="<?php echo $room->user_id; ?>" name="untrain[<?php echo $room->room_id; ?>]"> <?php echo "N"; } ?> </td> <Td><?php if ($room->active == 1) { ?> <input type='checkbox' name="<?php echo $room->room_id; ?>" checked> <?php echo "Active"; } else { ?> <input type='checkbox' name="<?php echo $room->room_id; ?>" <?php echo "Inactive"; } ?>
Поэтому, когда база данных возвращает 1, флажок установлен, иначе 0 так не отмечен. Поэтому мой вопрос в том, почему он случайно проверяет флажки?
Я хочу установить флажки для обновления базы данных с помощью 1, но иногда это случайным образом проверяет флажки ?!
В вашей логике есть следующие недостатки: ваш массив $_POST
имеет ключ untrain
и его значение является внутренним массивом ключей room_id
(поскольку они находятся в имени флажка) и значения user_id
(значения флажка). В вашем цикле foreach $room_id
проверяет значения флажков, которые действительно являются user_ids
. Кроме того, вы должны перебирать $_POST['untrain']
, я не знаю, где вы берете этот ключ $room->room_id
.
Я бы изменил это на:
if(isset($_POST['submit'])){ foreach ($_POST['untrain'] as $room_id => $user_id) { //sanitize $room_id $untrainQuery = "UPDATE room_users SET trained = '1' WHERE room_id = $room_id"; $db->update($untrainQuery); } }
Или, если у вас есть массив всех комнат, вы можете перебирать их, чтобы проверить, проверены ли они:
if(isset($_POST['submit'])){ foreach ($room_ids as $room_id) { //sanitize $room_id if(isset($_POST["untrain[{$room_id}]"]){//that is, if it was checked $trained = 1; }else{ $trained = 0; } $untrainQuery = "UPDATE room_users SET trained = $trained WHERE room_id = $room_id"; $db->update($untrainQuery); } }