web-dev-qa-db-ja.com

PHPの現在のURLの最後にGET変数を追加するにはどうすればよいですか?

いくつかの異なるGET変数をURLに追加しようとしています。

現在のページのURLへのヘッダーリダイレクトを簡単に行い、$ _ GET ['test']をURLに追加するだけです。

私の問題は、URLにすでにあるGET変数があることです。私がしたいのは:

  • RLにGET変数があるかどうかを確認

    • ない場合は、URLの末尾に新しいGET ['test']変数を使用して現在のURLにリダイレクトします。

    • URLにGET ['test']変数は存在するが存在しない場合は、それらの他のGET値をURLに保持し、GET ['test']変数を完全なURL文字列の最後に追加します

    • 存在する場合、かつURLにGET ['test']変数がある場合、それらの他のGET値をURLに保持し、GET ['test']変数値を新しい値と交換します。

これらの条件をすべて確認するにはどうすればよいですか?

24
zeckdude

簡単な方法は次のとおりです。

$params           = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );

これは、testが最後にあることを保証するものではありません。奇妙な理由でそれが必要な場合は、次のようにすることができます:

$params = $_GET;
unset( $params['test'] );
$params['test']   = 'testvalue';
$new_query_string = http_build_query( $params );

ただし、PHPクエリ文字列パラメータの解析には、他のアプリケーションとの相互運用性の問題がある場合があります。特にPHPは、パラメータに複数の値を受け入れません配列のような名前でない限り。

次に、転送することができます

( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) .
( empty( $_SERVER['HTTP_Host'] ) ? $defaultHost : $_SERVER['HTTP_Host'] ) .
$_SERVER['REQUEST_URI'] . '?' . $new_query_string
41
Artefacto

私はこの単純なPHP関数Artefactoの回答に基づいて作成しました。

function addOrUpdateUrlParam($name, $value)
{
    $params = $_GET;
    unset($params[$name]);
    $params[$name] = $value;
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
  • 既存のパラメーターを変更する場合は、値を更新します。
  • 新しい値の場合は合計します
9
M_R_K
function request_URI() {

    if(!isset($_SERVER['REQUEST_URI'])) {
        $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
        if($_SERVER['QUERY_STRING']) {
            $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
        }
    }
    return $_SERVER['REQUEST_URI'];
}

$_SERVER['REQUEST_URI'] = request_URI();

礼儀: http://php.net/manual/en/reserved.variables.server.php LOLによる例

これにより、GETパラメータとともにルートに関するURLが提供されます。

現在のディレクトリに関して必要な場合は、以下を追加します。

$current_url = explode("/", $_SERVER['REQUEST_URI']);

$current_url = $current_url[end(array_keys($current_url))];
2
N A

それは単にJoomlaの理由かもしれませんが、以下を使用することで同じ値を取得します

$ currenturl = $ _SERVER ['REQUEST_URI'];

はるかに少ないコード。

1
user2284001

これが最も簡単な方法です

function buildUrl($name, $value)
 {
    $_GET[$name] = $value;
    return $_SERVER['SCRIPT_NAME'] . '?' . http_build_query($_GET);
 }

新しいクエリパラメータをURLに追加するか、既に存在する場合はその値を更新します

0
Amaynut

これを書いたのは、他のソリューションとは異なり、htaccessの書き換えから隠されたGETパラメーターを公開しないためです。ただし、既存のパラメーターは更新されません。

 function addUrlParam($name, $value)
{
  $url = $_SERVER['REQUEST_URI'];
  $val =  $name . '=' . urlencode($value);
  if (strpos($url, '?') !== false) {
    $url .= '&' . $val;
  } else {
    $url .= '?' . $val;
  }
  return $url;
}
0
luky

..

$newval = 'whatever';
if( !count($_GET) ) {
 header('Location: ?test=' . $newval);
 exit;
}
if(!isset($_GET['test'])) {
 $_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;
0
nathan