Php 将删除操作作为POST请求发送
我有一个datagrid,其中包含要删除的批量操作和单个删除操作 以下是我的datagrid的快照: 我的datagrid如下所示:Php 将删除操作作为POST请求发送,php,javascript,html,Php,Javascript,Html,我有一个datagrid,其中包含要删除的批量操作和单个删除操作 以下是我的datagrid的快照: 我的datagrid如下所示: <form method="post" action=""> <table> <tr> <td><input type="checkbox" value="1" name="checkIds[]"/></td> <td>us
<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>
用户
当使用批量操作删除时,我可以提交数据作为post。目前,对于使用“删除”按钮操作的单次删除,正如您在“操作”列中所看到的,我只是放置超链接或将其作为GET请求发送。据我所知,删除操作应该使用POST或delete来避免网络爬虫意外删除我的数据。我想到了一个解决方案,将其作为操作后发送,如下所示:
<form method="post" action="user/delete/1" id="form_id_1"></form><a href="#" onclick="//submit form"><img src="delete.png"/></a>
问题是这个表单标记将位于我的父表单标记内,并且它违反了html标准,因为表单标记不能位于另一个表单标记内
如何在此处发送单个删除操作的post请求?有什么逻辑吗?请不要添加其他表单。只需添加另一个提交按钮。使用相同的表单处理程序,并让它检查是否有任何“删除我”提交按钮位于
$\u POST
中(仅当单击它们时才会发生)
不过,您必须使用POST进行所有操作。我提供了一个解决方案,如下所示。如果我做错了,请纠正我
<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
//数据网格
//区分单个删除和批量删除的步骤
//js
//锚定操作删除的onclick处理程序:
$(“#id”).attr(“值”),$(this.attr(“数据”);
$(“单一删除标志”).attr(“值”、“1”);
$(“表格”)。提交();
//delete.php
检查请求是否已发送
检查single_delete是否为1,然后选择single delete
否则,请选中批量删除
试试:
这应该是完美的^^ 您想要纯php/html解决方案还是js解决方案(例如
jQuery.post()
)?使用jQuery
可以很容易地解决这个问题,您是否在项目中使用jQuery
。@sonam用值设置一个隐藏的输入区域,然后发布数据是的,我正在使用jQuery,jQuery.post()是否发送ajax请求,但是我不想在不使用ajax发布数据的情况下将ajax请求发送到delete,您将无法使用get
来维护有效的HTML并保持批量删除选项可用。您必须将onclick
处理程序与a
放在一起。但是,如果您确实希望将所有内容都保存在一个表单中,并更改一个隐藏值,那么您还需要指定单个项目的id,这在您的答案中似乎没有完成。您需要更改$(“#single#u delete_flag”).attr(“value”,“1”)然后将“1”
作为实际ID值。如果不传递ID,您将永远不知道“用户”想要删除哪个条目。我发布了一个纯HTML/CSS的答案,可能会有所帮助^^伟大而简单的解决方案。
<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>
if(isset($_POST['sdelete'])) {
$id = $_POST['sdelete'];
//use $id to delete a single entry from DB, and then produce new output
}