【问题标题】:PHP form code sometimes being executed twice simultaneouslyPHP 表单代码有时会同时执行两次
【发布时间】:2016-11-16 18:03:41
【问题描述】:

保存表单时会执行类似的代码:

$wpdb->query("DELETE FROM Unit_list WHERE group = '$group_id'");
$order = 1;
$unique_units = array_unique($units);
foreach ($unique_units as $unit) {
    $wpdb->insert("Unit_list", array("unit" => $unit, "group" => $group_id, "sort_order" => $order));
    $order++;
}

一天会有几次重复。

如果表单被提交两次,并且每次都有足够的时间运行这部分代码,则不会出现重复,因为第二次将涉及删除整个第一组。

为了有重复,这段代码必须同时运行两次。

快速双击即可,但如果第三次单击速度较慢且不是同时单击,则该组将被删除且不涉及重复。

确定双击是原因后,解决方法是停止检测表单提交按钮的后续点击。

【问题讨论】:

  • 这不是一个理论站点。
  • 他们可能会点击提交按钮两次。
  • 查看日志看是否有多次调用该URL。
  • 更新用户时,表单提交会回到同一个URL(有时会导致有序项[anordered list of units]重复),但创建用户时URL参数不同。跨度>
  • @LukeWenke 也许您不会“认为”这是一次双击,但在阅读您的网络服务器日志之前您不会知道。在你做之前,这都是猜测。请关联,然后确认或反驳。

标签: javascript jquery duplicates


【解决方案1】:

在此处查看客户端 (jQuery) 解决方案:Prevent double submission of forms in jQuery

这里有一个 PHP: http://phpsense.com/2006/prevent-duplicate-form-submission/

【讨论】:

  • 谢谢...代码使用了复杂的 $('#editUserForm').submit(function(e){ 函数,它涉及 return false (用于验证问题)或 $form.submit(); .... 它以 e.preventDefault(); 开头,但我最近出于某种原因将其注释掉了...
  • 所以我只是添加了 $('#submit-form-b​​utton').prop('disabled', true);之前 $form.submit();
【解决方案2】:

问题似乎是人们点击了多次。如果我多次单击提交按钮,更新数据库的 php 代码会运行多次...

但是……

我无法重现有序数据库条目被交错的问题。我怀疑它需要鼠标点击在几毫秒内。也许他们的鼠标或浏览器存在问题,导致双击事件触发。它在几天内多次发生在特定用户身上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2017-05-20
    • 1970-01-01
    • 2012-09-02
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多