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

时间:2013-02-16 09:12:14

标签: php javascript html

我有一个数据网格,其中包含要删除的批量操作以及单个删除。

以下是我的数据网格的快照:

enter image description here

我的数据网格如下:

 <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标准,因为表单标记不能在另一个表单标记内

如何在此处发送单删除操作的发布请求?请问有什么逻辑吗?

3 个答案:

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

这应该完美无瑕。 ^^