如何一次删除多条记录?
问题描述:
在Php中,我们都知道,像Asp.Net的GridView等本身没有内置控件。我使用Html的<table>
来构建网格并将行的id保存在一个隐藏字段中。我还在每行的开头放置了一个复选框,并在网格的底部放置了一个删除按钮。我面临的问题是,我如何获取所有已选中的ID,以便我可以在Delete
的IN
条款中通过这些ID?如何一次删除多条记录?
答
首先你的名字你所有的复选框通过这样一个数组被创建在他们的名字后面添加[]
,以后这就是你如何能得到那些检查,并采取相应的行动:
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);
现在,您可以在查询的IN
子句中使用$values
。
答
看看目前正在提交的内容:
var_dump($_POST);
你会看到所有的字段值。如果你选择了正确的复选框,你将有一个要删除的rowID数组,你可以在构建查询时简单地implode(',',$ _ POST ['checkBoxes'])或类似的东西。
安全将成为一个问题在这里...我敢肯定别人会深入发表这个,但你一定要验证用户可以删除这些记录。
答
为每个复选框命名一个半唯一名称,如tablerow[numeric_id]
。当您提交表格时,您可以简单地捕获已检查的所有已发布tablerow
值。
您将$ _POST ['checks']复制到$ checked_array?国际海事组织他不能直接在他的查询中使用数组:o – fabrik 2010-07-20 12:52:14
是的,这是行不通的。另外,它很容易受到SQL注入的影响。 – ceejayoz 2010-07-20 12:54:49
$ IN = implode(',',$ checked_array); – fabrik 2010-07-20 12:55:16