我正试图存储重定向URL以备几页后使用,但我很难弄清楚如何将其从一个地方获取到另一个地方。
通常我只会通过URL传递一个变量,但由于重定向URL本身包含URL变量,所以这并不完全有效。
为了让你更好地了解我要做什么,下面是结构。
第1页:用户可以单击链接在页面2上添加内容
第2页:用户输入文本。在这个页面上提交表单会调用"formsubmit.php"来处理MySQL数据条目。在结束时,我需要再次将用户重定向到第1页。重定向URL需要与PAGE 1上的原始URL完全匹配
有人对此有什么建议吗?
您应该使用$_SESSION将变量存储在会话内存中。就如何处理这一问题的具体细节而言,您应该能够弄清楚(存储变量、稍后检查它是否存在、如果存在则重定向等),但$_SESSION将比试图在查询字符串中来回传递内容更高效/更少混乱。
要声明会话变量,您可以执行以下操作:
$_SESSION['redirUrl'] = "http://www.lolthisisaurl.com/lolagain";
然后引用它,你只需要做
$theUrl = $_SESSION['redirUrl'];
以下是一些让您开始学习的材料:http://php.net/manual/en/reserved.variables.session.php
我建议使用会话变量,或者将重定向url存储在隐藏的表单参数中。会话变量非常简单;只需初始化会话(在每页顶部初始化一次),然后将变量分配给$_SESSION
全局变量:
<?php
session_start();
...
$_SESSION['redirect_url'] = whatever.com;
...
隐藏的表单参数通过将数据作为表单数据从一页发送到另一页来工作。在后端,您可以添加代码,将URL存储在一个表单变量中:
<input type='hidden' name='redirect_url' value='<?php echo $redirect_url; ?>';
在每一页上,您都可以从$_POST
或$_GET
变量(以合适的为准)中取出URL,并将其插入下一页的隐藏表单中。
您可以使用urlencode
和urldecode
来传递一个字符串,该字符串包含的元素会破坏url查询中的url。
我可以看到两种可能的解决方案:
- 从
document.referrer
获取上一页([edit]在这个SO线程上找到更多信息:从历史对象获取最后一页URL-跨浏览器?) - 通过会话变量存储以前的url([edit]MoarCodePlz在回答中指出了这一点)
问候,
最大
您可以将此隐藏字段添加到表单中:
<input type="hidden" name="referer" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">
然后使用header()
重定向到此页面:
header('Location: '. $_POST['referer']);