我有两个页面:
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
- 从数据库检索数据并在此页面上显示。
问题:当我按“返回”按钮时,浏览器会弹出一个警告消息,说表单将被重新提交。如何防止点击“返回”按钮时重新提交表单?我需要清除page1.php的缓存吗?如何使用php、javascript或ajax来实现?
更新1:感谢回答,用php
header('Location: home2.php');
替换 javascript window.location="page2.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步未运行
header('Location: page2.php');
,未跳转到page2.php。这导致第5步显示警告消息。如何解决这个问题?
更新2: 我已经找到了解决20%问题的方法,它完美地解决了问题。我使用
session['error123']
来决定是否想要显示错误消息“名称相同”。如果成功将数据提交到数据库或成功跳转到page2.php,则会清除session['error123']
。我还使用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();?>
缓冲输出,因为在header()之前无法使用$_SESSION。缓冲将停止所有输出,包括会话,请让header()先发送输出。