Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将删除操作作为POST请求发送_Php_Javascript_Html - Fatal编程技术网

Php 将删除操作作为POST请求发送

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

我有一个datagrid,其中包含要删除的批量操作和单个删除操作

以下是我的datagrid的快照:

我的datagrid如下所示:

 <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
}