我的表中有重复(而不是“重复”)条目的问题。
首先,让我解释一下这个场景。我的网络上有一台基于Windows的机器,作为运行PHP和MYSQL的apache服务器。
使用各种浏览器(但通常是Chrome)我的30多个用户中的任何一个都可以登录并访问我的PHP程序(例程)。
现在举个例子。我有一个表,其中“certno”作为一个独特的列,以及其他列,如'manuf','model','serial','desc'等 用户将“其他”列的数据输入到Web表单中。提交时,我的程序在表中插入一个新行,其中'certno'是前一行的增量。
问题是偶尔会发现重复的条目;不同的'certno'值显然但数据重复。时间戳显示这些企业只有几秒钟;用户没有足够的时间再次输入数据。
调查表明,可能的原因是网络延迟阻止客户端浏览器知道条目成功并再次提交数据。
这是可能的原因还是有人可以推荐别的东西? 任何防止这种情况发生的建议也将受到赞赏。 请注意,我还没有使用START TRANSACTION和COMMIT。如果这是一个网络延迟问题,这会有什么不同吗?
答案 0 :(得分:0)
你可以在表单生成上生成一个唯一的id,例如(内联php为简洁):
<input type="hidden" name="token" value="<?php echo uniqid();?>">
并且该字段在mysql中是唯一的。
答案 1 :(得分:0)
如果您至少有一个逻辑上唯一的列,则为其添加一个唯一约束。例如:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
答案 2 :(得分:0)
使用PRG pattern:
而不是直接返回网页,POST操作返回重定向命令。 HTTP 1.1规范引入了HTTP 303(“请参阅其他”)响应代码,以确保在这种情况下,Web用户的浏览器可以安全地刷新服务器响应,而不会导致重新提交初始HTTP POST请求。