2011-01-31 16 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 & प्रकार = एएससी

The I एक पृष्ठांकन लिंक का उपयोग करें:

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

और यूआरएल बन जाता है: relation.php? Sort_name = adres & sort = asc & पृष्ठ = 2

अब तक तो अच्छा, लेकिन जब अन्य पृष्ठों पर ब्राउज़ कर यह रूप में लंबे समय के रूप में किया जा सकता है: relation.php sort_name = adres & प्रकार = एएससी & पेज = 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) –

उत्तर

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

उस लिंक के लिए धन्यवाद। आसान लग रहा है। – Marwelln

+0

+1 क्योंकि मुझे पहले http_build_query नहीं पता था :) – Marc

+0

इस समाधान के साथ मुझे url में वर्तमान और अंतिम पृष्ठ मिला? पृष्ठ = 2 और पृष्ठ = 9 – Muiter

0

एक लिंक बिल्डर (सरल php whitch सरणी बनाने के ("एक" => "ख", "ग" => "d") बनाएं में? A = b & ग = घ और यह हर बार पुनर्निर्माण (जैसे वहाँ "sort_name" => ..., "sort" => ..., "पृष्ठ" => ...)

यदि आप अभी भी QUERY_STRING का उपयोग करना चाहते हैं - जांचें कि इसमें & पृष्ठ = है। .. और यह (दोनों regexp द्वारा किए गए) की जगह

0

QueryString का उपयोग न करें, बस अपनी स्क्रिप्ट की शुरुआत में एक चर बनाने:

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

और अपने लिंक में इसका इस्तेमाल करते हैं:

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

PHP_SELF हमेशा पिछले क्वेरी चर होने जा रहा है अंत में संलग्न, यह ओपी की समस्या की जड़ है। –

+1

नहीं, यह सच नहीं है, क्वेरी चर केवल $ _SERVER ['QUERY_STRING'] में शामिल हैं, $ _SERVER ['PHP_SELF'] में नहीं, इसलिए QUERY_STRING समस्या – Marc

+0

वाह है, आपको पता है कि मैंने अभी एक phpinfo() मेरे स्थानीय सर्वर पर और किसी भी तरह से PHP_SELF के साथ REQUEST_URI उलझन में है। टच, मैं सही खड़ा हूँ - मेरी माफी। –

संबंधित मुद्दे