Uw logica heeft de volgende gebreken:uw $_POST
array heeft de sleutel untrain
en de waarde ervan is een interne reeks sleutels room_id
(omdat ze in de naam van het selectievakje staan) en waarden user_id
(waarden van selectievakjes). In je foreach-lus $room_id
heeft de waarden van selectievakjes toegewezen, die inderdaad user_ids
. zijn . Bovendien moet je $_POST['untrain']
. herhalen , ik weet niet waar je die sleutel mee naartoe neemt $room->room_id
van.
Ik zou dat veranderen in:
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);
}
}
Of, als u een array van alle room_ids heeft, kunt u deze herhalen om te controleren of deze zijn aangevinkt:
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);
}
}