0

我环顾四周寻找这个问题的答案,我慢慢接受了一个事实,即我可能以错误的方式处理事情,但这里请求一些奇妙的智慧珍珠可能会有所帮助!

我正在开发一个左侧有目录样式导航栏的网站。所以起初用户只会看到两个目录(语法/词汇 - 这是一个英语学习网站),通过点击目录,它将“打开”以显示其内容(其他页面或目录)。

我的工作方式是每个目录都是一个表单提交按钮,单击时会重新加载页面,但在 $_POST 中有一个值,告诉站点打开或关闭文件夹(这是在 $_SESSION 的数组中完成的) . 效果很好!但问题是,如果用户在浏览器中单击后退按钮,他们会收到询问是否要重新提交数据的提示,这不是我想要的。

我想知道是否有一种方法可以在 php 中检测是否按下了后退按钮,这样就不会重新加载页面并更改侧边栏,而是侧边栏将保持不变,而用户会被带到他们访问的最后一页。

我知道解决这个问题的真正方法可能只是重新考虑侧边栏,任何关于更好方法的建议也将不胜感激!

迈克尔

4

3 回答 3

4

您收到提示的原因是因为如果发送的数据要修改某些内容,则应该使用 POST,因此使用后退按钮提交 POST 请求可能会出现意外行为(如重复数据)。

用 GET 替换 POST 应该禁用提示。

HTML
来自:

<form action="page.php" method="post">
</form>

至:

<form action="page.php" method="get">
</form>

PHP
将 引用从 更改$_POST['']$_GET['']

于 2011-02-19T17:26:26.157 回答
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>

于 2011-02-19T17:28:31.957 回答
0

作为 Web 开发的一般规则,您应该只在提交不想重新提交的数据或不想出现在服务器上的日志中的数据时发布帖子。一旦你发布了一个帖子,你应该使用 get 参数或其他方法进行重定向。

如果您使用获取参数而不是发布,那么您可以使页面导航无状态并获取他们要求的页面。

有一些方法可以检测是否按下了后退按钮,但它们很难始终如一地工作,并且可能会让用户感到沮丧,因此建议您采用另一种方式。

于 2011-02-19T17:24:16.650 回答