Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

As caixas de seleção estão verificando aleatoriamente


Sua lógica tem as seguintes falhas:seu $_POST array tem a chave untrain e seu valor é um array interno de chaves room_id (porque eles estão no nome da caixa de seleção) e valores user_id (valores da caixa de seleção). Em seu loop foreach $room_id atribuiu os valores das caixas de seleção, que são de fato user_ids . Além disso, você deve iterar sobre $_POST['untrain'] , não sei onde você pega essa chave $room->room_id a partir de.

Eu mudaria isso para:
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, se você tiver um array de todos os room_ids, você pode iterar sobre eles para verificar se estão 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);
    }
}