Su lógica tiene los siguientes defectos:su $_POST
array tiene la clave untrain
y su valor es una matriz interna de claves room_id
(porque están en el nombre de la casilla de verificación) y los valores user_id
(valores de la casilla de verificación). En tu bucle foreach $room_id
ha asignado los valores de las casillas de verificación, que de hecho son user_ids
. Además, debe iterar sobre $_POST['untrain']
, no sé de dónde sacas esa llave $room->room_id
de.
Cambiaría eso a:
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);
}
}
O, si tiene una matriz de todos los room_id, puede iterarlos para verificar si están marcados:
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);
}
}