Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kontrollkästchen werden nach dem Zufallsprinzip ausgecheckt

Ihre Logik hat die folgenden Fehler:Ihr $_POST Array hat den Schlüssel untrain und sein Wert ist ein internes Array von Schlüsseln room_id (weil sie im Kontrollkästchennamen enthalten sind) und Werte user_id (Werte des Kontrollkästchens). In Ihrer foreach-Schleife $room_id hat die Werte von Checkboxen zugewiesen, die tatsächlich user_ids sind . Außerdem sollten Sie über $_POST['untrain'] iterieren , ich weiß nicht, woher Sie diesen Schlüssel $room->room_id nehmen von.

Ich würde das ändern 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);
    }
}

Oder, wenn Sie ein Array aller room_ids haben, können Sie darüber iterieren, um zu prüfen, ob welche aktiviert sind:

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