【问题标题】:How to check multiple form submission with PHP?如何使用 PHP 检查多个表单提交?
【发布时间】:2014-09-28 07:45:09
【问题描述】:

我有自己的 MVC 应用程序,其中有 3 个主要区域:模型、视图、控制器。

在视图中,我创建了一个表单,用于向数据库插入一些数据。动作设置为同一页面,类型为:POST。

在模型中,我有一些基本的检查表单是否已提交。之后有 1 秒的睡眠。

在控制器中,我以一种非常简单的方式连接视图和模型,因此它们可以相互通信。

但是,每当访问者多次单击提交按钮时,就会出现问题。因为有 1 秒的等待时间(这是故意的 - 所以看起来系统正在处理数据),他们可以多次点击按钮。

这有一个问题,因为这样,数据会根据点击量插入到数据库中。如果我输出一个简单的单词,比如“Foo”,它只会显示 1 次(我猜这是因为页面每次都重新加载),但是数据会多次插入到数据库中。

有没有办法解决这个问题?我的意图是创建一个会话并检查这是否是第一次提交,否则对数据库不做任何事情。但是这不起作用,因为会话总是在页面加载时获得基本值。

谁能帮我解决这个问题?

【问题讨论】:

  • 如果在插入之前检查记录是否被插入怎么办?或者更好 - 创建一个独特的约束来防止重复?
  • 我试图运行一个检查 fr 唯一性的查询,但它似乎毫无价值。页面似乎在检查之前插入了所有内容,即使它存在。但是,我将其置于插入的条件下,只有在没有记录的情况下。我猜,如果它存在,它会以某种方式检查 1 次,然后插入多次 - 插入会以某种方式堆叠起来。
  • 最简单的方法是用一些简单的javascript在前端处理它。
  • @Eugene 问题是,如果用户提交页面,他们可能会提供空字段、无效字段等,所以我不能在他们发送提交请求时简单地禁用按钮,因为他们只有当他们完全重新加载页面时才能重新提交他们的信息。
  • “看起来页面会在检查之前插入所有内容,即使它存在”——脚本会执行您编写的任何操作。如果它在检查之前插入,那么就是你这样做了。

标签: php forms


【解决方案1】:

两种选择:

  1. 在前端放置一些 javascript 以在单击按钮时禁用该按钮,然后提交表单 - 这可能是最简单的方法,但您可能希望尽量让前端保持整洁。

  2. 在加载页面之前设置会话变量,然后在执行插入操作后立即删除此会话变量。在进行插入之前,您应该检查会话变量 - 如果已设置,则允许插入,如果没有,则不允许。您可能还希望将代码添加到主控制器(如果您的所有控制器都来自一个主控制器),以检查已调用的控制器,然后如果设置的会话变量应该用于不同的控制器,那么它应该是已删除(因此,如果用户在未提交表单的情况下转到其他页面,则它不再存在)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2013-02-28
    • 2016-02-04
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多