2012-12-18 114 views
1

有了這行代碼,我添加的每個選擇複選框的值插入數據庫:PHP MYSQL選中複選框

// ADD ALL TYPES TO PRODUCTIONLOG_TYPE TABLE 
    $x=1; 
    $values=array(); 
    foreach($_POST['id'] as $x) 
    { 
     $AddToListQuery = " 
         INSERT INTO 
         productionlog_type 
         (productionlogid, typeid) 
         VALUES 
         ('" . mysql_real_escape_string($_GET['productionlog']) . "', '". mysql_real_escape_string($x) ."') 
         "; 
     mysql_query($AddToListQuery)or die("query fout " . mysql_error()); 
    } 

我做到這一點,所以我可以回聲出複選框,如果這是在數據庫alreayd檢查。

現在的問題是,當用戶取消選中複選框併發送表單時,它沒有傳遞任何值,對吧?所以我不能從數據庫中刪除它......意味着複選框仍然被選中。

我該怎麼辦?

+2

您應該知道您在表單中放置了哪個複選框。未檢查的每個複選框都不在返回的數據中。區分放入表單的複選框和返回並取消數據庫區別的複選框。 – deceze

+0

請使用'PDO'代替標準mysql_方法 – RTB

+0

爲true。所以我嘗試了foreach(!isset($ _ POST ['id'] as $ x)),但是這會返回一個錯誤...對這些數組不是很好 –

回答

2

如果您知道哪個複選框將被返回,您可以過濾出您所知道的某些複選框,然後只保留未選中的複選框。

在發送請求之前,您還可以看看您的頁面處理過程,例如使用JavaScript。

或者您可以在您的表單中傳遞另一個隱藏變量,其中包含您應該在PHP腳本中收到的所有複選框。例如:

<input type="hidden" value="id_1,id_2,id_3" /> 

如果您隨後在PHP腳本中收到此消息,您可以看到哪個(複選框的)複選框是預期的。


編輯

如果您有:

<form method="POST"> 
    <input type="hidden" name="checks" value="id1,id2" /> 
    <input type="checkbox" name="id1" checked="checked" /> 
    <input type="checkbox" name="id2" /> 
</form> 

然後在PHP:

$arr = split(",", $_POST["checks"]); 
foreach ($arr as $x){ 
    if(isset($_POST[$x])){ 
     // Add or update 
    }else{ 
     // Remove 
    } 
} 

注:我沒有測試的代碼,但你只是想知道它是如何工作的

+0

嗯好我已經使用: '

+1

我已經更新了我的答案,增加了一個例子。希望這會讓一切變得清晰 – ndsmyter

+0

謝謝!你很棒!完美的例子。謝謝,讓它工作:D:D –