2013-04-16 25 views
11

嗨任何人都可以幫我這個 我有一個像如何獲得和更改URL變量PHP

parent/child/a=1&b=2$c=3 

那麼我會添加變量到URL

<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test1";?>">LINK 1</a> 
<a href="<?php echo $_SERVER["REQUEST_URI"]."&d=test2";?>">LINK 2</a> 

一個鏈接網址每次點擊我的鏈接變量d到URL不斷重現像這樣

parent/child/a=1&b=2&c=3&d=test2&d=test2&d=test2&d=test1&d=test1 

我知道t那麼$ _SERVER [「REQUEST_URI」]會繼續獲取當前的URL,這就是我得到該結果的原因。我已經嘗試了$ _SERVER [「」]的一些屬性。 我喜歡的是改變d變量值,任何想法如何去做。 任何迴應非常感謝。謝謝!

+1

使用的preg_replace [「REQUEST_URI」]如果d =存在 – Robert

+0

@Robert Podwika.I認爲preg_replace函數會做,但我不知道如何使用這些代碼,現在我將研究在PHP手冊。謝謝。如果代碼解決了我的問題,我會打+1。謝謝羅伯特! – CaffeineShots

+0

@kodewrecker:你看看我的答案嗎?它應該工作 –

回答

28
$query = $_GET; 
// replace parameter(s) 
$query['d'] = 'new_value'; 
// rebuild url 
$query_result = http_build_query($query); 
// new link 
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?<?php echo $query_result; ?>">Link</a> 
+0

這是一個更好的答案,我正在尋找這樣的東西。謝謝。 – Overcode

+0

迄今爲止我見過的最優雅的解決方案發布了幾個類似的問題 – Brad

0

這裏你沒有照顧雙引號。用下面的代碼代替,然後檢查。

<a href="<?php echo 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'&d=test1';?>">LINK 1</a> 

而且還檢查螢火蟲每次在href中的網址。

+0

我不認爲這會有什麼區別? –

+0

@ OSSCube.I試過了,在我的最後,雙引號和單引號都做得很好,但是我改變它只是爲了測試你的,仍然再現變量d先生,但是無論如何感謝你的回覆。 – CaffeineShots

+0

@ kodewrecker我已更新我的代碼。現在檢查。 –

1

要刪除重複添加查詢參數做以下

// parse the url 
$pathInfo = parse_url($_SERVER['REQUEST_URI']); 
$queryString = $pathInfo['query']; 
// convert the query parameters to an array 
$queryArray = parse_str($queryString); 
// add the new query parameter into the array 
$queryArray['d'] = 1; 
// build the new query string 
$newQueryStr = http_build_query($data); 

// construct new url 
?> 
<a href="<?php echo $pathInfo.'?'.$newQueryStr;?>">LINK 1</a> 
+0

謝謝你。 $ data的值是多少? – CaffeineShots

+0

@CaffeineShots它應該是parse_str($ queryString,$ queryArray);而不是$ queryArray = parse_str($ queryString);然後$ data是$ queryArray – DoubleK

4

與以下表達式嘗試,它應該工作

preg_replace("#&d=.*&#", '&d=newvalue&', $_SERVER['REQUEST_URI']) 
+0

是的,我正在測試它。第一個參數是什麼? 「#&d =。*&#」是數字符號(#),星號(*)是必須的?我可以問這是什麼嗎? – CaffeineShots

+0

這些是表達式語法。 '&d =。*&'這是我們想要的東西。它將取代內容&d = *&與你給第二參數。我已經更新了代碼,請用新代碼重新檢查一遍。 –

+0

謝謝!有用! +1 – CaffeineShots

2
modify_url_query($url, array('limit' => 50)); 

我的功能在URL修改查詢

在$ _ SERVER 0
+0

它工作但得到未定義的錯誤,如何解決這個問題? –

0
function replaceUrlParameters($url = '', $newParams = array()){ 
    if($url){ 
     $urlArray = parse_url($url); 
     $queryString = $urlArray['query']; 
     parse_str($queryString, $queryParams); 
     $queryParams = array_merge($queryParams, $newParams); 
     $urlArray['query'] = http_build_query($queryParams); 

     if(!empty($urlArray)){ 
      $url = $urlArray['scheme'].'://'.$urlArray['host'].$urlArray['path'].'?'.$urlArray['query']; 
     } 
    } 
    return $url; 
} 
// $newParams = array of new parameters or old parameters with new value 
$replacedUrl = replaceUrlParameters($url, $newParams); 
+0

請考慮解釋此代碼段的作用,以及如何使用它。這是如何解決原始問題中的問題的? –

+0

假設你有這樣的網址: - '<?php echo $ _SERVER [「REQUEST_URI」]。「&a = test1&b = test2」;?>' 您想將參數_b_的值替換爲_test3_,以及具有相同索引和新值的數組。 for ex- '<?$ url = $ _SERVER [「REQUEST_URI」]。「&a = test1&b = test2」;?>' '<?newParams = ['b'=>'test3']?>' 那麼你會得到 - '<? $ _SERVER [ 「REQUEST_URI」] 「&一個= TEST1&B = TEST3」。?>' –