2014-09-27 69 views
0

我有我自己的MVC应用程序,我有3个主要区域:模型,视图,控制器。如何使用PHP检查多个表单提交?

在视图中,我创建了一个表单,将一些数据插入到数据库中。该操作设置为同一页面,类型为:POST。

在模型中,如果表单已提交或不提交,我会进行一些基本检查。之后有一秒睡眠。

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

但是,只要访问者在提交按钮上多次点击,就会出现问题。因为等待1秒(这是故意的 - 所以它像系统正在处理数据一样),他们可以多次点击按钮。

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

有没有解决此问题的方法?我的意图是创建一个会话,并检查这是否是第一次提交,否则什么都不做。但是这不起作用,因为会话总是在页面加载时获得基本的值。

任何人都可以帮助我解决这个问题吗?

+0

如果您在插入之前检查记录是否插入,该怎么办?或者更好 - 创建一个独特的约束来防止重复? – zerkms 2014-09-27 22:47:25

+0

我试图运行一个检查fr唯一性的查询,但它似乎毫无价值。好像页面在检查之前插入了所有内容,即使它存在。不过,如果没有这样的记录,我只能将其放入插入条件中。我想,不知何故,它检查一次,如果它存在,然后插入多次 - 不知何故插入堆积起来。 – 2014-09-27 22:51:01

+0

最简单的方法是使用一些简单的javascript在前端处理它。 – Eugene 2014-09-27 22:54:35

回答

0

两个选项:

  1. 放在前端一些JavaScript在被点击禁用按钮,然后提交表单 - 这可能是最简单的方法,但你可能会想尝试离开前端尽可能简洁。

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