ロジックには次の欠陥があります:$_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);
}
}
または、すべてのroom_idの配列がある場合は、それらを繰り返し処理して、どれがチェックされているかを確認できます。
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);
}
}