我有2页:
page1.PHP:
– 有一个带有文本框和“提交”按钮的表单.例如:< form name =“frm_register”action =“page1.PHP”method =“post”>
– 用于将textBox的值存储到数据库的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没有运行标题(‘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>‘;
所以在伪代码中,
单击page.PHP action page1.PHP上的提交
page1.PHP将数据提交给数据库调用
header('Location: http://example.com/page2.PHP');
这应该可以防止您点击回来的问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。