2013-11-21 215 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。