Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动重定向到上一浏览页面_Php - Fatal编程技术网

Php 自动重定向到上一浏览页面

Php 自动重定向到上一浏览页面,php,Php,我读过一些stackoverflow超链接,关于用户登录或在论坛中创建新帖子后如何重定向到以前浏览的页面。我发现提到的大多数关于使用AJAX或javascript之类的回答,因为大多数回答者认为这应该只发生在客户端。此外,他们的大多数代码都提供了有用的建议,建议如何在登录后重定向到特定的页面,如index.php 对我来说,我现在真正想做的是,在使用PHP点击表单的submit按钮后,如何重定向到先前浏览/访问的页面(现在请忘记AJAX或JAVASCRIPT)。I不将用户重定向到任何指定的页面,

我读过一些stackoverflow超链接,关于用户登录或在论坛中创建新帖子后如何重定向到以前浏览的页面。我发现提到的大多数关于使用
AJAX
javascript
之类的回答,因为大多数回答者认为这应该只发生在客户端。此外,他们的大多数代码都提供了有用的建议,建议如何在登录后重定向到特定的页面,如index.php

对我来说,我现在真正想做的是,在使用PHP点击表单的submit按钮后,如何重定向到先前浏览/访问的页面(现在请忘记AJAX或JAVASCRIPT)。I将用户重定向到任何指定的页面,而是将用户重定向到该页面之前的页面。例如,一个用户访问
index.php
,然后单击其上的超链接进入
posts.php
页面查看新帖子,然后他对论坛感兴趣,然后从
http://domain.com/posts.php?qid=7
,例如,登录以便他可以在需要或做其他事情时回复帖子。在这种情况下,在他登录后,论坛将
*重定向*他到上一个posts.php页面
,即
http://domain.com/posts.php?qid=7
。这就是我现在想要编写的代码

这就是我刚刚创建的函数:

    function str_url($a, $b) { 
     return substr($a, 0, strpos($a, $b));
    }

    function self_url() {
    if(!isset($_SERVER['REQUEST_URI'])) {
        $self = $_SERVER['PHP_SELF'];
    }else{
    $self = $_SERVER['REQUEST_URI'];
    }
    $secure = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s":"";
    $protocol_secure = str_url(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$secure;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    $_SESSION['previous'] = $protocol_secure."://".$_SERVER['SERVER_NAME'].$port.$self;

    header("Location: " . $_SESSION['previous']);
    }
我所要做的就是将函数放在文档的头部和
self_url()我想要的
表单检查和提交
条件之后PHP代码中的任意位置

问题是函数
self_url()
只需检查
domain.com/posts.php
即可将登录用户重定向到(它会截断URL的其余部分),但不会像
http://domain.com/posts.php?qid=7
(其中
id=7
是某个帖子的
name=value
对)他在签到前刚去拜访过

你能帮我找出原因吗?或者,如果您有任何方便的PHP函数来替换我的,我将不胜感激。

您可以通过
$\u服务器['HTTP\u REFERER']
看到前面的URL,因此您可以将其作为重定向目标。但这并不十分可靠,因为:

“HTTP_REFERER”

将用户代理引用到当前页面的页面(如果有)的地址。这是由用户代理设置的并非所有用户代理 将设置此选项,有些选项提供了将HTTP\U REFERER修改为 特写。简言之,它确实不可信。

更好的方法是让前面的脚本插入自己的GET参数,以便重定向脚本知道用户之前在哪里


好吧,你可以将每个访问过的页面存储在cookie或会话中,然后从那里读取,但在我看来这没有多大意义

//编辑一些代码:

if(!isset($_SERVER['REQUEST_URI'])) {
    $self = $_SERVER['PHP_SELF'];
}else{
    $self = $_SERVER['REQUEST_URI'];
}

只需将
?redir=$self
附加到表单的操作中。

这就是为什么我不想使用
“HTTP\u REFERER”
并在PHP中创建我自己的函数的原因。好吧,你可以将访问过的每个页面存储为cookie或会话,然后从那里读取,但我认为这没有多大意义。否则,脚本不可能知道用户以前去过哪里。