【问题标题】:Sending delete action as POST request将删除操作作为 POST 请求发送
【发布时间】:2013-02-16 18:18:54
【问题描述】:

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

这是我的数据网格的快照:

我的数据网格如下:

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

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

【问题讨论】:

  • 您要纯php/html方案还是js方案(如jQuery.post())?
  • 使用jQuery很容易解决,你在项目中使用jQuery吗?
  • @sonam 设置一个隐藏的输入区域,然后发布数据
  • 是的,我正在使用 jquery,jquery.post() 是否发送 ajax 请求,但我不想发送 ajax 请求删除
  • 如果不使用 AJAX 发布该数据,您将无法使用 get 来保持有效的 HTML 并保持批量删除选项可用。

标签: php javascript html


【解决方案1】:

试试:

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

这应该完美无缺。 ^^

【讨论】:

  • 伟大而简单的解决方案。
【解决方案2】:

不要添加其他表单。只需添加另一个提交按钮。使用相同的表单处理程序,并让它检查是否有任何“删除我”提交按钮在 $_POST 中(只有当它们被点击时才会发生)。

不过,您必须使用 POST 来执行所有操作。

【讨论】:

    【解决方案3】:

    我想出了如下解决方案。如果我做错了请纠正我

      <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
    

    【讨论】:

    • 您必须将onclick 处理程序与a 放在一起。但是您确实希望将所有内容保持在一种形式中并更改隐藏值以这样做,您还想分配单个项目的 id,这似乎没有在您的答案中完成。
    • 您可能希望更改$("#single_delete_flag").attr("value","1");,然后将"1" 设为实际的ID 值。如果不传递 ID,您将永远不知道“用户”想要删除哪个条目。我发布了一个可能有帮助的纯 HTML/CSS 答案。 ^^
    猜你喜欢
    • 2011-10-29
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2015-07-17
    • 2020-01-04
    • 2016-09-03
    • 2015-09-07
    相关资源
    最近更新 更多