【问题标题】:PHP MYSQL checkbox checked选中 PHP MYSQL 复选框
【发布时间】:2012-12-18 11:16:11
【问题描述】:

通过这行代码,我将每个选中的复选框的值添加到数据库中:

    // 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() );
    }

我这样做是为了回显已选中的复选框是否已在数据库中。

现在的问题是,当用户取消选中复选框并发送表单时,它没有传递任何值,对吧?所以我不能从数据库中删除它...意味着复选框仍然处于选中状态。

对此我能做些什么?

【问题讨论】:

  • 您应该知道您在表单中输入了哪些复选框。每个未选中的复选框都不在返回的数据中。区分您在表单中输入的复选框和返回并取消设置数据库中差异的复选框。
  • 请使用PDO 而不是标准的mysql_方法
  • 真的。所以我尝试了 foreach (!isset($_POST['id'] as $x)) 但这会给我一个错误......这些数组不太好
  • foreach (!isset($_POST['id'] as $x) 将不起作用,因为!isset 返回一个布尔值。而且你不能 foreach 一个布尔值

标签: php mysql checkbox


【解决方案1】:

如果您知道将返回哪些复选框,您可以过滤掉您知道的那些复选框,然后只保留未选中的复选框。

您还可以在发送请求之前查看页面的某些处理,例如使用 JavaScript。

或者您可以在表单中传递另一个隐藏变量,其中包含您应该在 PHP 脚本中收到的所有复选框。例如:

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

如果您随后在 PHP 脚本中收到此信息,您可以看到(复选框的)哪些 id 是预期的。


编辑

如果你有:

<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
    }
}

注意:我没有测试过代码,但你只是想了解它是如何工作的

【讨论】:

  • 嗯,我已经使用了:&lt;input type='checkbox' name='id[". mysql_real_escape_string($typeid) ."]' value='". mysql_real_escape_string($typeid) ."'" 现在我尝试了你所说的:&lt;input type='hidden' value='emp[".$typeid."]';,这适用于以下代码:// REMOVE ALL TYPES FROM PRODUCTIONLOG_TYPE TABLE $x=1; $values=array(!isset($_POST['emp'])); foreach ($values as $x) { // delete query } 但只有第一个复选框会从数据库中删除,而不是其他
  • 我已经更新了我的答案,添加了一个例子。希望这会让一切变得清晰
  • 谢谢!你很棒!完美的例子。谢谢,搞定了:D:D
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2017-05-15
  • 2011-10-21
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多