2015-04-07 38 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

我只是添加一個隱藏在複選框前面的輸入類型,但是當我單擊它時,它將取消選中檢查的所有內容 –