Din logik har följande brister:din $_POST
array har nyckeln untrain
och dess värde är en intern uppsättning nycklar room_id
(eftersom de finns i kryssrutans namn) och värdena user_id
(kryssrutans värden). I din foreach loop $room_id
har angett värdena för kryssrutor, som verkligen är user_ids
. Dessutom bör du iterera över $_POST['untrain']
, jag vet inte var du tar den nyckeln $room->room_id
från.
Jag skulle ändra det till:
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);
}
}
Eller, om du har en uppsättning av alla rums-id:er, kan du iterera över dem för att kontrollera om vilka är markerade:
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);
}
}