2011-01-31 51 views
14

如何使用$ _SERVER ['QUERY_STRING']和分頁符?

當我的表是通過這個鏈接進行排序:

<a href="'.$_SERVER['PHP_SELF'].'?sort_name=name&sort=asc" title="'.$lang['sorteer_asc'].'"></a> 

我的網址變爲:relation.php sort_name = ADRES &排序= ASC

的我使用分頁鏈接:

echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page='.$i.'">'.$i.'</a> '; 

而URL變成:relation.php?sort_name = adres & sort = asc & page = 2

到目前爲止好,但在瀏覽其他網頁時,它可以是隻要: relation.php sort_name = ADRES &排序= ASC &頁= 2 &頁= 3 &頁= 14 &頁= 23 &頁= 27

由於$ _SERVER ['QUERY_STRING'],年齡不斷出現,我怎樣才能清理我的網址,只保留最後一頁和?sort_name = adres & sort = asc。

或者您是否建議訂購和分頁的其他解決方案?

+0

[在查詢字符串中更改單個變量值]的可能重複(http://stackoverflow.com/questions/4037909/change-single-variable-value-in-querystring) – 2011-01-31 21:48:13

回答

32

不是重用QUERY_STRING的,你應該重新http_build_query()組裝。

// Merge $_GET with new parameter 
$QS = http_build_query(array_merge($_GET, array("page"=>2))); 

// You should apply htmlspecialchars() on the path prior outputting: 
echo "<a href='" . htmlspecialchars("$_SERVER[PHP_SELF]?$QS") . "'> $i </a>"; 

因此,你擁有所有目前$_GET參數包括在內,但可以添加或更換新值的條目。並確保每個只出現一次。

0

創建鏈接生成器(簡單的PHP whitch使陣列( 「A」=> 「B」, 「C」=> 「d」)爲?A = B & C = d 每次重建它(例如。「sort_name」=> ...,「sort」=> ...,「page」=> ...)

如果你還想使用QUERY_STRING - 檢查它是否包含& page =。 ..和更換(均由正則表達式製造)

0

不要使用查詢字符串,就在你的腳本的開頭創建一個變量:

$pagerUrl = $_SERVER['PHP_SELF'].'?sort_name='.$_GET['sort_name']&sort=$_GET['sort']; 

並使用它在你的鏈接:

echo '<a href="'.$pagerUrl.'&page='.$i.'">'.$i.'</a> '; 
+0

PHP_SELF總是會有以前的查詢變量追加到最後,這是OP的問題的根源。 – 2011-01-31 21:50:22

+1

不,這是不正確的,查詢變量只包含在$ _SERVER ['QUERY_STRING']中,而不是$ _SERVER ['PHP_SELF'],所以QUERY_STRING是問題 – Marc 2011-01-31 21:57:23

相關問題