2008-12-11 65 views
4

比方說,我有這樣的持久HTTP GET變量是在PHP

if(isset($_GET['foo'])) 
    //do something 

if(isset($_GET['bar'])) 
    //do something else 

一些代碼,如果用戶是在example.com/?foo=abc和點擊一個鏈接來設置欄= XYZ,我想輕鬆將它們帶到example.com/?foo=abc & bar = xyz,而不是example.com/?bar=xyz。

我可以想到一些非常混亂的方法來做到這一點,但我敢肯定有一些更清潔的東西,我不知道和通過谷歌追蹤。

回答

2

這裏有一種方法....

//get passed params 
//(you might do some sanitizing at this point) 
$params=$_GET; 

//morph the params with new values 
$params['bar']='xyz'; 

//build new query string 
$query=''; 
$sep='?'; 
foreach($params as $name=>$value) 
{ 
    $query.=$sep.$name.'='.urlencode($value); 
    $sep='&'; 
} 
+0

非常好。儘管您可以使用http_build_query來構建查詢。喝彩。 – 2008-12-11 23:26:12

0

只要將更改欄的鏈接設置爲xyz,並且如果foo已設置,則也具有foo = abc。

$link = ($_GET['foo'] == 'abc') ? 'foo=abc&bar=xyz' : 'bar=xyz'; 
?> 
<a href="whatever.php?<?= $link ?>">Click Me</a> 
0

你將不得不使用正確的URL查詢字符串渲染鏈接,使之發生。這是一個設計決定,您需要根據您的系統安裝方式進行設計。

我有一些網站有這個問題,我做的是設置一個querystring全局變量,將當前頁面數據設置爲頁面請求的頂部。

然後當我在渲染頁面,如果我需要利用當前的查詢字符串的我做這樣的事情:

echo '<a href="myurl.php' . querystring . '&bar=foo'; 

這不是最乾淨的,但是這一切都取決於你的系統是如何工作的。

1

如果要更新,你需要OT確保你不這樣做

$qs="a=1&b=2"; 
$href="$qs&b=4"; 
$href contains "a=1&b=2&b=4" 

你真的想要做的查詢字符串如果需要,則覆蓋當前密鑰。 您可以使用這樣的功能。 (免責聲明:關我的頭頂,也許稍微竊聽)

function getUpdateQS($key,$value) 
    { 
     foreach ($_GET as $k => $v) 
     { 
      if ($k != $key) 
      { 
       $qs .= "$k=".urlencode($v)."&" 
      } 
      else 
      { 
       $qs .= "$key=".urlencode($value)."&"; 
      } 
     } 
     return $qs 
    } 

    <a href="reports.php?<?getupdateqs('name','byron');?">View report</a> 
0

保存一些代碼,並使用內置的http_build_query。我用這個包裝在我的項目之一:

function to_query_string($array) { 
    if(is_scalar($array)) $query = trim($array, '? \t\n\r\0\x0B'); // I could split on "&" and "=" do some urlencode-ing here 
    else $query = http_build_query($array); 
    return '?'.$query; 
} 

而且,雖然它不經常使用,可以在賦值的左側有$ _GET:

$_GET['overriden_or_new'] = 'new_value'; 
echo '<a href="'.to_query_string($_GET).'">Yeah!</a>'; 

其他那麼只要做一下Paul Dixon所說的話。