2012-12-18 113 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 –