Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les cases à cocher vérifient au hasard

Votre logique a les failles suivantes :votre $_POST tableau a la clé untrain et sa valeur est un tableau interne de clés room_id (car ils sont dans le nom de la case à cocher) et les valeurs user_id (valeurs des cases à cocher). Dans votre boucle foreach $room_id a assigné les valeurs des cases à cocher, qui sont bien des user_ids . De plus, vous devez parcourir $_POST['untrain'] , je ne sais pas où vous prenez cette clé $room->room_id de.

Je changerais cela en :

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

Ou, si vous avez un tableau de tous les room_ids, vous pouvez les parcourir pour vérifier si ceux-ci sont cochés :

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