如何防止重复输入mySQL?

时间:2010-03-30 19:21:10

标签: php mysql

在我的网站上,我有一个用户填写成为会员的表单。他们填写姓名,bday,电子邮件等。然后当他们点击提交时,数据进入mySQL。但有时当用户多次单击提交或刷新页面时,数据会不止一次输入到数据库。我怎样才能防止这种意外提交?有没有我可以用来让一组数据进入数据库的代码?

这也是我评论部分的一个问题。我允许用户对人们的个人资料发表评论。但是当他们滥用刷新按钮或提交按钮时,我会得到10条相同的评论。我试图阻止用户不小心提交两次评论。

感谢。

6 个答案:

答案 0 :(得分:6)

创建一个UNIQUE约束:

CREATE UNIQUE INDEX name_of_youw_index ON tablename(columnname);

INSERT现在会因双重数据而失败。

答案 1 :(得分:5)

在第一种情况下,您可能只想在电子邮件地址上添加唯一索引,并使用该索引为该用户创建配置文件。

在第二种情况下,据我所知,您试图阻止用户意外提交数据两次,而不是完全阻止数据提交两次。您可能不希望阻止人们在同一页面上两次写相同的评论。如果有人写道“今天就像昨天!”,你不想阻止他们第二天回来并写下“今天就像昨天!”再次。这将是不自然的,并且检查可能是昂贵的,因为它需要索引大量数据。我想你想阻止某人两次提交相同的表格,无论数据是否相同。

因此,第二个示例的解决方案是在表单中包含一个唯一标识它的隐藏字段。提交表单时,请在隐藏字段中标记使用的值。如果有人稍后在隐藏字段中提交具有相同值的表单,请将其拒绝。

答案 2 :(得分:3)

服务器端:实施限制。每10秒左右只允许1次提交。

  

更新:当您接受表单提交时,请记录您的时间戳   在$ _SESSION中提交了提交。   当你接受另一个(或者更确切地说,   每一个)表格提交,检查是否   存储在$ _SESSION中的值较旧   超过10秒。如果是,继续。   如果不是,请不要再做任何工作了。

     

你可以用一些来做   数据库的东西我想,但是   $ _SESSION要简单得多。

客户端:在提交表单时通过Javascript禁用提交按钮。

答案 3 :(得分:1)

通过向数据库添加唯一索引,使数据库中的电子邮件字段“唯一”。

如果您的数据库获得另一个条目,其中包含已经使用过的电子邮件,则mysql会抛出错误 - 错误编号为1062.

如果您愿意,那么您可以处理与其他错误不同的错误。

mysql_errno()

http://www.php.net/manual/en/function.mysql-errno.php

答案 4 :(得分:0)

如果数据库重复,请在字段上添加唯一约束。

对于数据库重复项和重复注释,请在按下提交按钮2-3秒后禁用多次提交。

答案 5 :(得分:-1)

不要构建自己的帐户创建/身份验证机制。这已经完成了10000次。使用另一个已经过测试但没有错误的预先存在的。这样做的唯一原因是为了体验/理解登录系统的生产实现如何发展。真的,那就是你想成为一名专家,或者你更愿意关注你正在研究的问题领域?