La tua logica ha i seguenti difetti:il tuo $_POST
l'array ha la chiave untrain
e il suo valore è un array interno di chiavi room_id
(perché sono nel nome della casella di controllo) e valori user_id
(valori della casella di controllo). Nel tuo ciclo foreach $room_id
ha assegnato i valori delle caselle di controllo, che in effetti sono user_ids
. Inoltre dovresti scorrere su $_POST['untrain']
, non so dove prendi quella chiave $room->room_id
da.
Lo cambierei 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);
}
}
Oppure, se hai un array di tutti i room_id, puoi scorrere su di essi per verificare se sono selezionati:
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);
}
}