2013-11-21 150 views
1

我本质上是试图建立一个登录系统,将用户返回到他们所在的页面。我知道这个问题已经有人问了,我已经看过其他答案,但我找不到解决我的特定问题的方法。

我的网站有一个参考ID号码表(例如:10001,10003,10004,... 53401等)。这些数字也是链接。所有链接指向一个页面(“mypage.php”),并参考ID号(10004)成为一个查询字符串到URL:

<td><?php echo '<a href="mypage.php?query_ecr=', urlencode($num), '">'; ?><?php echo $num; ?></a></td> 

在我“的header.php”,这是每一个页面上该网站的,有可能会打开下面的用户登录窗体菜单上的按钮。

<form action='login/process.php' method='post'> 
    <label for='name'>Username:</label> 
    <input type='text' id='userid' name='user_name'/> 
    <label for='password'>Password:</label> 
    <input type='password' name='password' id='userpassword'/> 

    <input type='submit' value='Log In' /> 

    <input type='hidden' name='login' value='1'> 
    <input type='hidden' value='".$_SERVER['PHP_SELF']."' name='redirurl'/> 
</form> 

通知“隐藏输入”的名称=“redirurl”。我想捕获用户所在的当前页面。我已经有一个登录脚本来检查用户名和密码,并将它们重定向到他们需要的页面。

//login/process.php 

...blah blah blah other stuff... 

global $database,$session; 
     $this->user_status=$database->CheckUserPass($_POST['user_name'],$_POST['password']); 
     $url = $_POST['redirurl']; 
     if($this->user_status==1) 
      { 
       $session->StartSession($_POST['user_name'],$_POST['password']); 
       header("Location: ".$url); 
     } else { 
       ...blah blah blah..... 
       } 

我的问题是,如果一个链路上的GUEST点击(例如:10004),他们被带到网址:

http://www.XXXXXX.XXXX/mypage.php?query_ecr='10004' 

不过,该页面上的“redirurl”的值是:

http://www.XXXXXX.XXXX/mypage.php 

它忽略查询字符串。因此,当用户从该页面登录,并且我的登录脚本将他们重定向到该页面时,该页面出现大量错误,因为它需要查询字符串。

如何在$ _SERVER ['PHP_SELF']中包含查询字符串?

回答

7

你可以使用:

$_SERVER['REQUEST_URI'] 

获得该域名的文件夹后的一切,查询字符串等 然后,您可以要么使用其他$ _SERVER变量添加域,或者它应该是罚款如果您不更改主机,则不需要域名即可使用。

+0

谢谢大家。你们都有有效的解决方案,但这是最好的,因为不是我的所有页面都有查询字符串 – bagofmilk

1

查询字符串可在$_SERVER['QUERY_STRING']。只需连接它们(不要忘记问号),你会没事的。 :)

6

什么:

echo $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; 

注意,你可能会想那个消毒输出像这样:

$url = $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING']; 
echo htmlspecialchars($url, ENT_QUOTES, 'utf-8'); 

防范XSS。