PHP:阻止表单重新submisson(php: Preventing Form re-submis

2019-10-16 17:17发布

我有一个PHP的使用申请程序。 当用户获取到注册过程的第二个最后一页,它显示的所有注册详细信息的摘要,并提交按钮(确认并支付基本按钮)。 现在,当用户点击这个按钮,所有这些细节被发布到SQL数据库,并在数据库中创建了一个带有用户名和密码的用户。 现在的问题是,如果你点击提交按钮不止一次,它重新提交的数据,并在数据库中,其中每个重复条目具有相同的详细信息(姓名,电子邮件等)创建重复的条目,但不同的用户名和密码。 如何避免这种情况? 我知道你能后立即提交和回发到自己,但我怎么做,到底是什么? 我试图实现这个代码,但它不工作: http://www.bjw.co.nz/developer/general/75-how-to-prevent-form-resubmission

谢谢

Answer 1:

我想在这种情况下奉劝一些JavaScript。 添加以下的提交按钮:

onclick="this.disabled=true;"

一旦点击,使其无法再次点击这将禁用按钮。



Answer 2:

你应该保存一个值,如果表单已经提交标识PHP会话,使用$_SESSION 。 PHP会话被锁定,而每个请求进行,所以当第一次提出将其锁定,第二个将不得不等待,直到第一个提交完成,并已设置的值。 第二个请求之后会读它,并呼吁打破值设定为已提交。

这里有一个如何可以这样做的例子。 它可能会包括错误,如果一个用户同时做几个注册(为什么要他?)。

在包含表单的提交按钮的页面,您应该设置一个标记:

session_start();
$_SESSION["RegistrationSubmitted"] = false;

这就是说,用户目前正在做登记尚未提交。

对正在提交的页面(转贴),你可以检查该值:

session_start();
if (isset($_SESSION["RegistrationSubmitted"]) {
    if ($_SESSION["RegistrationSubmitted"] == true) {
         die("Registration has already been submitted!");
    } else {
         // Process registration here
         $_SESSION["RegistrationSubmitted"] == true;
    }
} else {
    die("Last registration page hasn't been reached! (A bot?)");
}


Answer 3:

除了与PHP代码或DOM搞乱,为什么不修改数据库表来使用唯一键。 不管用户多少次点击提交按钮通过这种方式,数据库根本不会在意。

这可以帮助你: “INSERT忽略”与“INSERT ... ON DUPLICATE KEY UPDATE”



Answer 4:

你可以创建类似形式的关键:

<input type="hidden" name="form-key" value="<?php echo $last_order_datetime; ?>" />

然后,当一个新的提交订单,检查的$ _POST [“形键”]的值正好等于存储在最近的订单。

如果是,则处理表单。 否则,它是一个重新提交或一些其他的尝试。



文章来源: php: Preventing Form re-submisson
标签: php forms