我有一些PHP代码的困境。我正在处理的网站有一个“返回上一页”选项,我希望它的行为与浏览器的后退按钮非常相似。就目前而言,我正在使用$ _SESSION变量来跟踪当前页面和之前页面的内容。我还对变量进行了“刷新校对”,这样我就不会对前一页和当前页都是相同的。
所以这是问题所在: 对于当前的实现,如果我转到一个页面,说“register.php”,然后转到“forgot.php”,前一页将是“register.php”,这很好。但是,如果我点击“返回上一页”,我最终将返回“register.php”,前一页为“forgot.php”,现在我只剩下2页循环返回。
我尝试实现SplQueue来帮助我跟踪变量,我尝试在链接中使用dequeue()函数将最后一页显示为链接。当实际调用dequeue并导致元素消失时,问题就出现了,因此如果我刷新,元素不再在队列中并且链接发生变化。我通过“刷新校对”修复了这个函数,它为我调用了dequeue,它按照我的意愿工作。问题现在是前向链接。如果我将自己引导到另一个页面,我不希望旧链接出现信息。
例: 我在register.php上,我的上一页是“forgot.php”。 “返回上一页”链接准确地显示“forgot.php”是它将指向的页面,但现在它不再在队列中,所以如果我转到另一个页面,说“profile.php”然后使用返回“register.php”的后退按钮,如果再次点击“返回上一页”,它将不再显示“forgot.php”作为您将要访问的页面。
所以,我想我的问题实际上是如何在没有实际调用该函数的情况下使链接调用PHP函数而单击链接。我已尝试将链接指向JavaScript函数,但JS函数倾向于告诉我我的队列是空的,这是完全错误的。
作为旁注,页面是HTML和PHP的混合。 HTML提供给我,我一直在添加PHP以向字段添加功能并从数据库中获取数据。如果必须的话,使用PHP回显HTML链接没有问题,如果可以用小<?php someCode(); ?>
的HTML完成,那也没问题。
我感谢您抽出时间帮助我。
修改
因此,为了尝试澄清一点,我有一个结构,目前正在跟踪用户访问时已访问过的页面。它创建了页面的迷你历史记录。我的问题是我有这样的代码:
<a href="somelink">Back To Previous Page</a>
我不知道“somelink”是什么,因为它会根据你的历史而改变。我知道我可以这样做:
<a href="<?php someFunction() ?>">Back To Previous Page</a>
如果我执行上述操作,则在显示页面时执行该功能,因此很难使用array_pop()
或dequeue()
但是再次执行PHP显示页面后立即显示。我正在寻找的是一种显示链接然后将其从历史记录中删除的方法,当且仅当单击“返回上一页”链接时。截至目前,我正在$_SESSION
存储一个数组,如下所示,因为它是一个数组,我可以将数组中的最后一个元素显示为链接,所以唯一真正的问题是找到一种方法单击链接时从数组中删除元素。
编辑2:
我一直在搜索互联网,并决定使用JavaScript和AJAX来调用PHP文件。这允许我向我们点击我拥有的链接,以便我可以从我的array_pop
变量中控制$_SESSION['links']
。
我认为我的AJAX实际上并没有遗憾地做任何事情,所以我正在使用的代码如下。
<script src="js/jquery-1.4.2.min.js" type="text/javascript">
function dequeue()
{
$.ajax({
type: "POST",
url: "common.php",
data: {action: "rem"},
success: function(output) {
alert(output);
}
});
}
</script>
和PHP是
switch($_POST['action'])
{
case "rem":
array_pop($_SESSION['links']);
break;
default:
if(isset($_SESSION['current']) && $_SESSION['current'] != $_SERVER['REQUEST_URI'])
{
array_push($_SESSION['links'], $_SESSION['current']);
}
$_SESSION['current'] = $_SERVER['REQUEST_URI'];
break;
}
据我所知,这将允许我在会话变量中添加历史记录的链接,除非我点击“返回上一页”链接,因为该链接将具有“rem”代码。我也对$_SESSION['current'] = $_SERVER['REQUEST_URI'];
以及应该放在哪里感到有些怀疑。
答案 0 :(得分:3)
您可以在会话中存储数组,并将数组视为堆栈(相应地使用array_push
和array_pop
)。当用户点击后退按钮时,将当前页面推送到堆栈。不然,弹出它。
答案 1 :(得分:0)
如果我不得不这样做,我会这样做:
$_SESSION["history"] = array();
在每个“可记忆”页面的标题内:
if(in_array($this_page, $_SESSION["history"])) {
unset($_SESSION["history"][array_search($this_page, $_SESSION["history"])]);
}
array_push($_SESSION["history"], $this_page);
这样做的目的是:“如果历史中存在该页面,请将其从任何地方删除,并将其作为历史记录的最后一页。如果不存在,只需将其作为历史记录的最后一页”。这样你就不会有任何循环。