2011-12-28 116 views
0

我正在做一個網站。有一個分頁,你點擊鏈接,他們帶你到你需要的頁面,鏈接通過$_GET變量(a href="?pn=2"),這工作正常。

然而,當我加入的類別鏈接(也包含$_GET可變 (a href="?sort=english")在同一個頁面,哪種類型的頁面上的內容,並點擊它,系統只是簡單地重寫的URL,並刪除所有以前的。$_GET

例如,我第2頁(http://website.com/index.php?pn=2) ,然後我點擊這個鏈接排序,什麼我期望得到的是這個(http://website.com/index.php?pn=2&sort=english),但我所得到的是這樣的: (http://website.com/index.php?sort=english)。它簡單地覆蓋了之前的$_GET,而不是添加到它!

+1

對於未來的知識:它們被稱爲*查詢參數*,而不是'$ _GET'。這就是你如何訪問它們。 –

+0

先去學習一些基礎知識 –

+0

閱讀'http_build_query' – diEcho

回答

-1

您需要在創建新鏈接時維護查詢參數。頁面上的鏈接應該是這樣的:

<a href="?pn=<?= $_GET['pn'] ?>&sort=english">Sort by English</a> 

HTTP協議是無狀態的 - 它不記得過去。你必須提醒它以前的HTTP參數是通過PHP還是其他方法(cookie等)。在你的情況下,你需要提醒它當前的頁碼是什麼,就像上面的例子。

+1

這是無效的(HTML'&'具有特殊含義),並使網站暴露於[XSS安全漏洞](http://en.wikipedia.org/wiki/Cross-site_scripting)。 – Quentin

+0

這與眼前的問題無關。我試圖解釋爲什麼他的查詢字符串不正確,並提供了一個示例來顯示新查詢字符串的外觀。 HTML有效性和XSS安全漏洞不是問題的主題。 – Jemaclus

+0

只要您提供了打開漏洞的示例代碼,XSS安全漏洞就變得相關。代碼的無效性同上。 – Quentin

4

僅由查詢字符串組成的相對URI將替換整個現有的查詢字符串。沒有辦法編寫將添加到現有查詢的URL。你必須編寫你想要的完整查詢字符串。

您可以通過明確將其維持現有的字符串:

href="?foo=<?php echo htmlspecialchars($_GET['foo']); ?>&amp;bar=123" 
+0

非常感謝!)) –

0

您可以創建一個將通過您的$_GET陣列迭代,並創建一個查詢字符串的函數。然後,您只需更改您的$_GET數組並生成此查詢字符串。

僞代碼(斜線我真的不知道PHP,但這裏是你應該能夠遵循一個很好的例子):

function create_query_string($array) { 
    $kvps = array(); 
    for ($key in $array) { 
     array_push($kvps, "$key=$array[$key]"); 
    } 

    return "?" . implode("&", $kvps); 
} 

用法:

$_GET["sort"] = "english"; 
$query_string = create_query_string($_GET); 
1

嘗試使用這樣的:

$_SERVER['REQUEST_URI']; 

this link你可以看到例子。並在this link我上傳了測試文檔,您可以自己嘗試,它只是從上面打印出這一行。

編輯:雖然這可以幫助您獲取URL中的當前參數,但我認爲這不是您的解決方案。就像Quentin說的那樣,你將不得不手動編寫完整的鏈接並維護每個參數。