我有一个数据网格,其中包含要删除的批量操作以及单个删除。
以下是我的数据网格的快照:
我的数据网格如下:
<form method="post" action="">
<table>
<tr>
<td><input type="checkbox" value="1" name="checkIds[]"/></td>
<td>user</td><td><a href="user/delete/1"><img src="delete.png"/></a></td>
</tr>
</table>
</form>
我可以在使用批量操作删除时将数据作为帖子提交。目前,对于使用删除按钮操作进行单删除,您可以在“操作”列中看到,我只是将超链接或发送为GET请求。据我所知,删除操作应该使用POST或DELETE来避免网页抓取工具意外删除我的数据。我想到了一个解决方案,将其作为POST动作发送如下:
<form method="post" action="user/delete/1" id="form_id_1"></form><a href="#" onclick="//submit form"><img src="delete.png"/></a>
问题是这个表单标记将在我的父表单标记内,并且它违反了html标准,因为表单标记不能在另一个表单标记内
如何在此处发送单删除操作的发布请求?请问有什么逻辑吗?
答案 0 :(得分:0)
不要添加其他表单。只需添加另一个提交按钮。使用相同的表单处理程序,并检查是否有任何“删除我”提交按钮位于$_POST
(只有在点击它们时才会发生)。
您必须使用POST进行所有操作。
答案 1 :(得分:0)
我提出了如下解决方案。如果我做错了,请纠正我
<form method="post">
<table>
// datagrid
<a href="delete" data="4"><img src="delete.png"/></a>
</table>
<input type="hidden" value="" name="id"/>
// to distinguish between single delete and bulk delete
<input type="hidden" name="single_delete" value="" id="single_delete_flag"/>
</form>
//js
//onclick handler for anchor action delete:
$("#id").attr("value",$(this).attr("data"));
$("#single_delete_flag").attr("value","1");
$("form").submit();
//delete.php
check if request if post
check if single_delete is 1, then single delete
else if check bulk delete
答案 2 :(得分:0)
尝试:
<form method="post" action="">
<table>
<tr>
<td><input type="checkbox" value="1" name="checkIds[]"/></td>
<td>user</td><td><input type="submit" class="sdelete" name="sdelete" value="<?= $ID; ?>" /></td>
</tr>
</table>
</form>
从那里,您将使用css来修改.sdelete
的外观,而在PHP中,您可以通过以下方式获得单个删除:
if(isset($_POST['sdelete'])) {
$id = $_POST['sdelete'];
//use $id to delete a single entry from DB, and then produce new output
}
这应该完美无瑕。 ^^