阻止用户两次从表单向mysql提交数据

时间:2012-02-05 05:20:48

标签: php mysql

我有一个表单,用户将我网页上各种文本字段的数据提交到mysql数据库。是否有任何代码我可以使用它不会让他们再次提交/更新数据?例如,它会将它们重定向到一个页面,表示抱歉,我们已经收到了您的数据。

如果有帮助,我为每个用户提供一个唯一的号码。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

使用令牌,它将避免双重提交和CSRF。

只需将令牌添加到数组中,最有可能使用$ _session,并在使用时弹出它们。

此外,在提交后使用JS禁用提交按钮。

您还可以在会话用户中设置一个var,表示他已经执行了某个操作,示例已上传了他的图片。如果您的上传脚本中存在错误,请取消设置。

答案 1 :(得分:0)

收到帖子后,请在数据库中查询唯一的用户号码。如果您返回非空结果,则显示错误。否则,将数据保存到数据库中。

您需要确定的最重要的事情是您的唯一标识符。听起来好像你已经拥有一个(你提到了唯一的用户号?)你的唯一标识符可能是电子邮件地址,甚至是整套提交的数据。

还有其他方法可以模拟这种情况,例如在用户的计算机上设置cookie或禁用提交按钮,但这些方法都不在您的控制之下。如果他们尝试,用户可以很容易地通过他们。因此,确定唯一标识符和验证服务器端可能是最好的方法。

答案 2 :(得分:0)

答案很大程度上取决于用户可能两次发送数据的原因

  • 如果发生意外,有一种技巧,其他所有技术都无法帮助你。
  • 如果故意重复,该技术完全不同并且再次没有通用解决方案 - 一切都取决于特定情况。

如果您想解释某个案例,您将获得适当的解决方案。

对于在发布结果的页面上按“重新加载”的最愚蠢的情况,您必须使用Location: HTTP标头重定向浏览器,例如

header("Location: ".$_SERVER['REQUEST_URI']);
exit;