复选框随机检出

时间:2015-04-07 08:16:00

标签: php mysql sql checkbox mysqli

我有一个问题。

我有一个包含数百个随数据库生成的复选框的页面。因此,当数据库返回1时,检查它否则为0并且不检查。当我尝试检查复选框并尝试将其更新到数据库时,一些复选框随机检出..

代码:

这是查询

if(isset($_POST['submit'])){
                foreach ($_POST['untrain[{$room->room_id}]'] as $room_id) {
                    // This query needs protection from SQL Injection!
                    $user_id;
                    $room_id;
                $untrainQuery = "UPDATE room_users SET trained = '1'  WHERE room_id = $room_id";
                $db->update($untrainQuery);

                }

                }

这些是复选框:

<?php
if ($room->trained == 1) {
?> <input type='checkbox' value="<?php
    echo $room->user_id;
?>" name="trained[<?php
    echo $room->room_id;
?>]" checked> <?php
    echo "Y";
} else if ($room->trained == 0) {
?> <input type='checkbox' value="<?php
    echo $room->user_id;
?>" name="untrain[<?php
    echo $room->room_id;
?>]"> <?php
    echo "N";
}
?> </td>
                    <Td><?php
if ($room->active == 1) {
?> <input type='checkbox' name="<?php
    echo $room->room_id;
?>" checked> <?php
    echo "Active";
} else {
?> <input type='checkbox' name="<?php
    echo $room->room_id;
?>"  <?php
    echo "Inactive";
}
?>

所以当数据库返回1时,复选框被检查,否则它是0,所以取消选中..所以我的问题是为什么它是随机检出复选框?

我想检查复选框以使用1更新数据库,但有时会随机选中复选框?!

1 个答案:

答案 0 :(得分:0)

您的逻辑存在以下缺陷:您的$_POST数组具有键untrain,其值为内部键组room_id(因为它们位于复选框名称中)和值user_id(复选框的值)。在你的foreach循环$room_id已经确定了复选框的值,这些复选框确实是user_ids。除此之外你应该迭代$_POST['untrain'],我不知道你从哪里拿到那把钥匙$room->room_id

我会改为:

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

或者,如果你有一个包含所有room_id的数组,你可以迭代它们来检查是否检查了哪些:

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