gpt4 book ai didi

php - 单击 "back"按钮后防止重新提交表单

转载 作者:可可西里 更新时间:2023-11-01 07:33:31 24 4
gpt4 key购买 nike

我有 2 页:

page1.php :
- 有一个带有文本框和“提交”按钮的表单。例如:<form name="frm_register" action="page1.php" method="post">

- 用于将文本框的值存储到数据库的 php 和 mysql 代码。 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 步没有运行 header('Location: page2.php'); ,没有跳转到page2.php。所以它导致第 5 步显示警告消息。如何解决这个问题?


更新 2: 我已经找到解决 20% 问题的解决方案,它运行良好。我用 session['error123']决定是否要显示错误信息“同名”。我杀 session['error123']如果成功提交数据到数据库或者如果成功跳转到page2.php。我也用 header('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 上的提交操作 page1.phppage1.php提交数据给数据库调用

header('Location: http://example.com/page2.php');

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

关于php - 单击 "back"按钮后防止重新提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com