防止无JS的重复表单提交

Preventing Duplicate Form Submissions Without JS

本文关键字:表单提交 JS      更新时间:2023-09-26

我正在做一个项目,我正在使用mvc模式构建它。在成功提交表单时,我重定向用户并显示一条闪光消息(使用会话的成功消息),我对用户使用后退按钮或刷新没有问题。但是,如果用户在提交表单时遇到错误,则不会重定向表单,因此可以显示错误,同时保留旧表单数据以填充字段,这样用户就不必重新输入信息。

我遇到的问题是,用户什么时候会因为任何原因向按钮发送垃圾邮件。如果我双击或垃圾邮件按钮,会产生一个错误(无效的表单令牌错误),但数据库交互仍然会发生并插入表单数据。我正在努力寻找最好的js替代方案来保持跨浏览器兼容性。js是要走的路吗?他们是php的替代品吗?

当您使用会话变量时,为什么不在数据库更新后立即设置一个变量呢。然后在每次DB更新之前检查该值。如果为false,则更新DB。

function updateDB(){
    if($_SESSION['already_submitted'] == true) return false;
    // DB update code
    // on success
    $_SESSION['already_submitted'] = true
    // rest of code
}