2015-04-07 16 views
0

我有问题。复选框正在随机签出

我有一个页面,有数百个与数据库一起生成的复选框。所以当数据库返回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,但有时它随机检出复选框?!

+0

能否请你解释一下'Stackoverflowers'? –

+0

Ooops我猜:-) –

+1

首先PLZ改变你的查询'“UPDATE room_users SET trained ='1'WHERE room_id ='”。$ room_id。“'”;' –

回答

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_ids的数组,你可以在它们之间迭代,以检查是否被选中:

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

谢谢,它修复了我的部分代码,但是如果我取消选中一个复选框,我该如何提交? –

+0

如果取消选中它,它将不会出现在后字符串中。只有选中的复选框的名称才能进入后期数组。 –

+0

我只是添加一个隐藏在复选框前面的输入类型,但是当我单击它时,它将取消选中检查的所有内容 –