我使用PHP和MySQL接受表单注册。大多数对此问题的回答都假设只有一个人同时使用该应用程序。但是,任何人都可以一次填写表格。如何将注册人数量限制为给定数量(例如1000)?请考虑以下情况:
由于用户B已经开始填写表格(但尚未完成),我想让他/她完成。 编写应用程序的最佳方法是什么,以最大限度地降低发生此情况的可能性?
谢谢。
答案 0 :(得分:0)
可以使用数据库触发器轻松完成,然后插入表单数据,计算数据库中的注册表数量,如果达到限制,则返回受控错误。
唯一的问题是用户必须填写所有表格并提交。
在您的页面上,您只需检查它是否达到限制以阻止表单。在限制之前访问表单的人将被触发器阻止(如果多个用户同时访问)。
数据库触发器将一次提供一个注册表。
答案 1 :(得分:0)
这是一个经典的counting semaphore用例:
在这种情况下,您不必使用IPC semaphore(但您可以)。只需实现自己的计数器。您的信号量可能是一个简单的数据库查询:
SELECT 1000 - count(*) FROM Registration WHERE state = "unfinished";
答案 2 :(得分:0)
只要注册人数少于最大数量,请提供表格。在window.setInterval
中对服务器上的简单服务进行ajax调用,该服务检查表中相对于该最大值的行数,并返回可以计算为true或false的值。将间隔设置为5或10秒。如果服务以false
响应,您可以通知用户注册已关闭。
我知道你说你想让用户B完成,即使他的注册失败,但这可能会导致一个烦躁的用户浪费更多的时间来填写表格,因为他可以早点被警告。