Php 复选框是随机签出的

Php 复选框是随机签出的,php,mysql,sql,checkbox,mysqli,Php,Mysql,Sql,Checkbox,Mysqli,我有个问题 我有一个包含数百个复选框的页面,这些复选框是由数据库生成的。因此,当数据库返回1时,它将被选中,否则它将为0且未被选中。当我尝试选中复选框并尝试将其更新到数据库中时,一些复选框正在随机签出 代码: 这就是问题所在 if(isset($_POST['submit'])){ foreach ($_POST['untrain[{$room->room_id}]'] as $room_id) { // This q

我有个问题

我有一个包含数百个复选框的页面,这些复选框是由数据库生成的。因此,当数据库返回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更新数据库,但有时它会随机勾选复选框

您的逻辑有以下缺陷:$\u POST数组的密钥未经训练,其值是一个内部密钥数组room\u id,因为它们位于复选框name and values user\u id复选框的值中。在foreach循环中,$room_id分配了复选框的值,这些复选框实际上是用户id。除此之外,你应该在$u POST['untrain']上迭代,我不知道你从哪里得到$room->room\u 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);
    }
}
或者,如果您有一个包含所有房间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);
    }
}

您能解释一下Stackoverflowers吗?首先请更改您的查询更新room_users SET trained='1',其中room_id='.$room_id'@Vicky仍然给出相同的结果,它仍然随机地检查复选框。我刚刚告诉过你一个错误,没有提供问题的解决方案。谢谢,它修复了我代码的一部分,但是如果我取消选中复选框,我怎么提交呢?如果你取消选中它,它将不会出现在post字符串中。只有复选框名称中的键才能进入post数组。我只是在复选框前面添加了一个隐藏的输入类型,但是,当我单击它取消选中所有选中的内容时,只需在提交表单后通过print\r或var\u dump检查$\u POST数组中的内容,您就会看到发生了什么。它使用数据库中的值从我的真实复选框中转储所有内容。