Mysql
 sql >> Database >  >> RDS >> Mysql

Le caselle di controllo vengono ritirate in modo casuale

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