如何一次删除多条记录?

时间:2010-07-20 12:42:57

标签: php

在Php中我们都知道,Asp.Net的GridView等没有内置的控件。我使用Html的<table>来构建网格并将行的id保存在一个隐藏的字段中。我还在每行的开头放置了一个复选框,在网格底部放置了一个删除按钮。我面临的问题是,如何获取所有被检查的ID,以便我可以在IN的{​​{1}}子句中传递这些ID?

3 个答案:

答案 0 :(得分:1)

看看目前正在提交的内容:

var_dump($_POST);

您将看到所有字段值。如果你选中右边的复选框,你就会有一个要删除的rowID数组,你可以在构建查询时简单地内爆(',',$ _ POST ['checkBoxes'])或类似内容。

安全性在这里会引起关注......我确信其他人会对此进行深入介绍,但您肯定想验证用户是否可以删除这些记录。

答案 1 :(得分:1)

使用半唯一名称tablerow[numeric_id]为每个复选框命名。提交表单时,您只需捕获已检查的所有已发布的tablerow值。

答案 2 :(得分:0)

首先,您可以通过在其名称中添加[]后缀来命名所有复选框,以便创建一个数组,稍后您将获得如何检查并执行相应操作的方法:

for($i = 0; $i < count($_POST['checks']); $i++)
{
  if (isset($_POST['checks'][$i]))
  {
     // this was checked !!
  }
}

其中checks是所有这些复选框的名称,例如:

<input type="checkbox" name="checks[]" value="1" />
<input type="checkbox" name="checks[]" value="2" />
<input type="checkbox" name="checks[]" value="3" />

这就是您在查询中获取IN子句的方法:

$checked_array = array();

for($i = 0; $i < count($_POST['checks']); $i++)
{
  if (isset($_POST['checks'][$i]))
  {
     $checked_array[] = mysql_real_escape_string($_POST['checks'][$i]);
  }
}

// build comma separated string out of the array
$values = implode(',', $checked_array);

现在,您可以在查询的$values子句中使用IN