15

重複の可能性:
ページネーション中に URL パラメータを保持する

PHP を使用して現在の URL にパラメーターを追加したいのですが、URL に既にパラメーターが含まれているかどうかを確認するにはどうすればよいですか?

例:

foob​​ar.com/foo/bar/index.php => foobar.com/foo/bar/index.php?myparameter=5 foobar.com/index.php?foo=7 => foobar.com/index.php?foo =7&myparameter=5

主な問題は、「?」を追加する必要があるかどうかわからないことです。

私のコード(どこかで見つけましたが、動作しません):

<?php   if(/?/.test(self.location.href)){ //if url contains ?
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}?>
4

3 に答える 3

37

$_GETURL パラメーターは、実際には配列であるというグローバル変数から受け取ります。したがって、URL にパラメーターが含まれているかどうかを知るには、isset()関数を使用できます。

if (isset($_GET['yourparametername'])) {
    //The parameter you need is present
}

その後、URL に添付する必要があるそのようなパラメーターの別の配列を作成できます。お気に入り:

if(isset($_GET['param1'])) {
    \\The parameter you need is present
    $attachList['param1'] = $_GET['param1'];
}
if(isset($_GET['param2'])) {
    $attachList['param2'] = $_GET['param2];
}

さて、シンボルが必要かどうかを知るには、?この配列を数えるだけです

if(count($attachList)) {
    $link .= "?";
    // and so on
}

アップデート:

パラメータが設定されているかどうかを知るには、$_GET

if(count($_GET)) {
     //some parameters are set
}
于 2012-06-03T08:14:43.460 に答える
19

本当にparse_url()関数を使用する必要があります。

<?php
$url = parse_url($_SERVER['REQUEST_URI']);

if(isset($url['query'])){
    //Has query params
}else{
    //Has no query params
}
?> 

また、配列ベースの変数を中括弧で囲むか、文字列を分割する必要があります。

$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}?myparameter=5";

また

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?myparameter=5";

有効error_reporting(E_ALL);にすると、エラーが表示されます。Notice: 未定義の定数 REQUEST_URI の使用 - 'REQUEST_URI' ect を想定

于 2012-06-03T08:30:14.197 に答える
7

「?」を検索できます。このような文字:

if (strpos($_SERVER[REQUEST_URI], '?')) { // returns false if '?' isn't there
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}
于 2012-06-03T08:18:09.070 に答える