2013-04-16 2 views
11

こんにちはを取得し、変更する誰もがこの で私を助けることができる私は、私はそのURLにどのようにURL変数PHP

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

を変数を追加するリンクを持っている

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

のようなURLを持っています私のリンクをクリックするたびに、URLに変数dがこのように再現されます

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

私は知っています$ _SERVER ["REQUEST_URI"]は現在のURLを取得し続けているので、その結果が得られます。私は$ _SERVER [""]のいくつかのプロパティを試しました。 私が気に入っているのは、d変数の値を変更することです。 すべての回答は高く評価されています。ありがとうございます!

+1

使用にpreg_replace [「REQUEST_URI」] dが= – Robert

+0

@Robert Podwika.Iが存在する場合にpreg_replaceがどうなると思いますが、今、私はそれで勉強になるために、私は、そのコードを使用する方法がわかりませんPHPのマニュアル。ありがとう。コードが私の問題を解決するなら、私は+1を押すでしょう。ロバートがありがとう! – CaffeineShots

+0

@kodewrecker:あなたは私の答えをチェックしましたか?代わりに '$ c = 3'を'&c = 3'にする必要がありますか? –

答えて

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にあるURLがあるかをFirebugでチェックしてください。

+0

私はそれが何か違いがあるとは思わない? –

+0

@ OSSCube.Iこれを試してみましたが、二重引用符とシングルの両方がうまくいっていますが、私はあなたのテストのためにそれを変更しています。 – 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

これに感謝します。 $データ値は何ですか? – CaffeineShots

+0

@CaffeineShotsこれはparse_str($ queryString、$ queryArray)である必要があります。 $ queryArray = parse_str($ queryString)の代わりに。 $ dataは$ queryArray – DoubleK

4

の下に、それは、URLのクエリを変更するための

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

です。私は今すぐテストしています。最初のパラメータは何ですか? "#&d =。*&#"は番号記号(#)で、アスタリスク(*)は必要ですか?それは何のために尋ねることができますか? – CaffeineShots

+0

これは式の構文です。 '&d =。*&'これは私たちが望むものです。これは、&d = *&と2番目のパラメータとして与える内容で置き換えられます。私はコードを更新して、新しいコードで再度チェックしてください。 –

+0

ありがとう!できます! +1 – CaffeineShots

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

My機能を動作するはず行います

$ _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

あなたが次のようなURLを持っているとします: - '<?php echo $ _SERVER [" REQUEST_URI "]。"&a = test1&b = test2 ";?> ' パラメータ_b_の値を_test3_に置き換えて、新しい値を持つ同じインデックスを持つ配列。 && = test1&b = test2 ";?> ' ' <?newParams = ['b' => 'test3']?> ' の場合は、 の場合は の場合は<!?$ url = $ _SERVER [" REQUEST_URI " それからあなたは - '<? $ _SERVER ["REQUEST_URI"]。 "&a = test1&b = test3";?> ' –

関連する問題