sql >> Base de Datos >  >> RDS >> Mysql

Las casillas de verificación se comprueban al azar

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);
    }
}