php – 单击“返回”按钮后阻止重新提交表单

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 单击“返回”按钮后阻止重新提交表单脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2页:
page1.PHP
– 有一个带有文本框和“提交”按钮的表单.例如:< form name =“frm_register”action =“page1.PHP”method =“post”>
– 用于将textBox的值存储到数据库PHPmysql@L_512_8@.将值提交到数据库后,Javascript会将页面重定向PHP2.PHP.例如:

$query = "INSERT INTO traceuser (username) VALUES ('{$username}')";
$result = MysqL_query($query,$connection);
echo '<script language="javascript">window.location="page2.PHP";</script>';

使page2.PHP
MysqL数据库中检索数据并显示在此页面上.

问题:当我按“返回”按钮时,浏览器会弹出一条警告消息,表示该表格将重新提交.单击“返回”按钮时如何止重新提交表单?是否需要清除page1.PHP的缓存?如何用PHP或javascript或ajax做到一点

更新1:感谢您将javascript window.location =“page2.PHP”替换为PHP header(‘Location:home2.PHP’);的答案.它解决了80%的问题.剩下的20%问题如下所示:

if (strtotime($_SESSION['servertime']) < time()-3){ //10800 = 3 hours 3600 = 1 hour
                if (($username != "") AND ($username != $_SESSION[username])){
                    $_SESSION['servertime'] = $servertime; 
                    $_SESSION['username'] = $username;
                    $query = "INSERT INTO traceuser (username) VALUES ('{$username}')";
                    $result = MysqL_query($query20,$connection);
                    header('Location: page2.PHP');
                    exIT;
                } else {
                    echo "same name"; //PRoblem here
                }
            }else{
                echo "submit multiple data too fast"; //problem here too.
            }
   }

执行以下步骤时会发生此问题:
1)用户成功提交数据,跳转到page2.PHP查看记录.
2)用户点击“返回”按钮,跳回page1.PHP.
3)用户提交数据失败,留在Page1.PHP. (因为太快或同名)
4)用户提交数据成功,跳转到page2.PHP查看记录.
5)用户点击“返回”按钮,但浏览器显示警告信息“表格将被重新提交”.

问题是由于步骤3.步骤3没有运行标题(‘Location:page2.PHP’);,没有跳转到page2.PHP.因此它会导致步骤5显示警告消息.如何解决这个问题?

更新2:我已经找到了解决20%问题的解决方案,它运行得很好.我使用session [‘error123’]来决定是否要显示错误消息“同名”.如果成功将数据提交到数据库或成功跳转到page2.PHP,我会终止会话[‘error123’].我也使用标题(‘Location:page1.PHP’);重定向到自己的页面(同一页面),使页面忘记以前的表单提交.代码示例:

if ($_SESSION['error123'] == "toofast"){
    echo $_SESSION['error123'] ;
}elseif ($_SESSION['error123'] == "samename"){
    echo $_SESSION['error123'] ;
}

if (strtotime($_SESSION['servertime']) < time()-3){ //10800 = 3 hours 3600 = 1 hour
                if (($username != "") AND ($username != $_SESSION['username'])){
                    $_SESSION['username'] = $username;
                    $query = "INSERT INTO traceuser (username) VALUES ('{$username}')";
                    $result = MysqL_query($query20,$connection);
                    $_SESSION['error123'] = "aa";
                    header('Location: http://localhost/plekz/page2.PHP');
                    exit;
                } else {
                    $_SESSION['error123'] = "samename";
                    header('Location: http://localhost/plekz/page1.PHP');
                    exit;
                }
            }else{
                $_SESSION['error123'] = "toofast";
                header('Location: http://localhost/plekz/page1.PHP');
                    exit;
            }
        }
    }

注意:您需要通过<?PHP ob_start();?>缓冲输出?因为$_SESSION不能放在header()之前. Buffer将停止所有输出,包括session,让header()先发送输出.

解决方法

而不是

echo’< script language =“javascript”> window.location =“page2.PHP”;< / script>‘;

应该使用header()函数在提交后重定向您的用户.

所以在伪代码中,

单击page.PHP action page1.PHP上的提交
page1.PHP将数据提交给数据库调用

header('Location: http://example.COM/page2.PHP');

这应该可以防止您点击回来的问题

脚本宝典总结

以上是脚本宝典为你收集整理的php – 单击“返回”按钮后阻止重新提交表单全部内容,希望文章能够帮你解决php – 单击“返回”按钮后阻止重新提交表单所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。