复选框删除 - 如果For循环中的语句删除了错误的条目

时间:2012-04-05 21:27:29

标签: php sql arrays if-statement for-loop

我有一个页面显示我的数据库信息。通过每个循环,打印一个复选框,用于在检查和提交时删除相关条目。复选框名称为'delete []',并且隐藏值包含行id,名为'id []'。

这是我表格的相关部分:

<tr><td valign='top'>
<label class='amarillo med' style='color:#C00;'>Delete Section </label>
<input type='checkbox' name='delete[]' />
<input type='hidden' name='id[]' value='" . $row['about_id'] . "' />
</td></tr>

这是我的php和查询

$deleteCount = count($_POST['delete']);
for ($x = 0; $x < $deleteCount; $x++) {
if(isset($_POST['delete'][$x])) {
   $sql = 'DELETE FROM about WHERE about_id = \''.$_POST['id'][$x].'\'';
 $result = mysql_query($sql);
}
}

这就是发生的事情。

如果返回三行并且我只想删除第三行,请检查第三个框并单击“提交”。这将删除返回的第一行。同样,如果返回三行并且我想删除第一行和第三行,我提交并删除前两行。

对于每个选中的复选框,它看起来是什么样的,从第一个开始删除许多行。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

最好也更容易的方法是使用

<input type="checkbox" name="delete[]" value="<?=$row['about_id']?>"/>

然后

foreach($_REQUEST['delete'] as $delID)
{
   ...
}

答案 1 :(得分:1)

使用以下代码

<tr><td valign='top'>
<label class='amarillo med' style='color:#C00;'>Delete Section </label>
<input type='checkbox' name='delete[$row['id']]' />
<input type='hidden' name='id[$row['id']]' value='" . $row['about_id'] . "' />
</td></tr>

其中$ row [&#39; id&#39;]是行的ID