我已经四处寻找这个问题的答案了,我慢慢接受这样一个事实,即我可能会以错误的方式解决问题,但这里要求提供一些可能有用的精彩智慧之珠! / p>
我正在开发一个左侧有目录样式导航栏的网站。所以一开始用户只会看到两个目录(语法/词汇 - 这是一个英语学习网站),点击目录,它将“打开”以显示其内容(其他页面或目录)。
我的工作方式是每个目录都是一个表单提交按钮,在单击时重新加载页面,但是$ _POST中的值告诉站点打开或关闭文件夹(这是在一个数组中完成的) $ _SESSION)。它很棒!但问题是,如果用户点击浏览器中的后退按钮,他们会询问是否要重新提交数据,这不是我想要的。
我想知道是否有一种方法可以在php中检测到是否按下了后退按钮,因此不会重新加载页面并对侧栏进行更改,侧栏将保持不变,而不是用户被带到他们访问过的最后一页。
我知道真正解决这个问题的方法可能只是重新考虑边栏,任何有关更好方法的建议都会受到赞赏!
迈克尔
答案 0 :(得分:4)
您收到提示的原因是因为如果要发送的数据要修改某些内容,则应该使用POST,因此使用后退按钮提交POST请求可能会出现意外行为(如重复数据)。
使用GET替换POST应该禁用提示。
HTML 的
来自:
<form action="page.php" method="post">
</form>
要:
<form action="page.php" method="get">
</form>
PHP
将引用从$_POST['']
更改为$_GET['']
答案 1 :(得分:1)
<?php
session_start();
if( $_GET['t'] == $_SESSION['token'] || $_SESSION['directory'] == $_GET['q'] || !isset($_GET['q']) ) {
echo "<h1><span>you going</span> forward</h1>";
} else {
echo "<h1><span>you going</span> backward</h1>";
echo "<p>should be <strong>{$_SESSION['directory']}</strong> directory</p>";
}
$token = uniqid();
$_SESSION['token'] = $token;
$_SESSION['directory'] = $_GET['q'];
?>
<a href="index.php?q=grammar&t=<? echo $token; ?>">grammar</a>
<a href="index.php?q=vocabulary&t=<? echo $token; ?>">vocabulary</a>
答案 2 :(得分:0)
作为Web开发的一般规则,您只应在提交不希望重新提交的数据时执行帖子,或者您不希望在服务器上的日志中显示。一旦你发帖,你应该使用get参数或其他方法重定向。
如果你使用get参数而不是post,那么你可以让页面导航无状态,只需获取他们要求的页面。
有一些方法可以检测后退按钮是否被按下,但是它们难以保持一致,并且可能会让用户感到沮丧,因此建议您采用另一种方式。