0

たとえば、次のような URL があります。

index.php?country=Canada

それだけの場合index.php、デフォルトの国は米国です。チェックボックスをオンまたはオフにすることで、国を切り替えることができます。 しかし、人々は GET 変数を介して結果を並べ替えることができます:

<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=state">State</a>
<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=surname">Surname</a>
<a href="<?php $_SERVER["REQUEST_URI"] ?>&sort=name">Name</a>

しかし、私が使用$_SERVER["REQUEST_URI"]すると、常に新しい値が URL 配列 (クエリ文字列) に追加され続けます。それがうまくいけばindex.php、私は次のようにすることができます:

<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=state">State</a>
<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=surname">Surname</a>
<a href="<?php $_SERVER["PHP_SELF"] ?>?sort=name">Name</a>

index.phpその後は常に疑問符が?最初になることを私は知っています。index.php?country=Canadaしかし、訪問者が保持したい場合はどうすればよいでしょうかsort=state, sort=surname and sort=name。次に、疑問符が URL に既に含まれているかどうか、いつ&マークを追加するかを知る必要があります。この問題を解決する方法がわかりません。

4

4 に答える 4

2

リンクをエコーする方法を変更します。

PHP

<?php
    $link = $_SERVER["PHP_SELF"];
    if(isset($_GET['country']
        $link.="&";
    else
        $link.="?";
?>

そして、次のようなエコーリンク:

HTML

<a href="<?php $link ?>sort=state">State</a>

:「並べ替え」の前の疑問符を削除しました。

于 2013-06-07T15:57:31.997 に答える
1

?とを静的に追加するのではなく、クエリ文字列を動的に構築するロジックが必要です&

http_build_query私が行くルートのようなものですが、あなたが提供した情報は、あなたが望んでいるように見える可能性に比べて小さいので、特定のコードを提供するのは難しいです.

http_build_queryPHPの関数に関する詳細情報を次に示します。その目的は、クエリ文字列を作成することです。これは、実行できることの例です。

// capture the values into variables, however you want ($_GET is example)
$country = $_GET['country'];
$state = $_GET['state'];
$city = $_GET['city'];
$data = array();

// use logic to dynamically build the array, so long as the variables have values
!empty($country) ? array_push($data,'country'=>$country) : '';
!empty($state) ? array_push($data,'state'=>$state) : '';
!empty($city) ? array_push($data,'city'=>$city) : '';

// apply the array dynamically built
$querystring = http_build_query($data);

// concatenate to form the new URL
$url = 'http://www.example.com/?'.$querystring

countrybeUSAcityto beを宣言し、 を宣言Seattleしなかった場合、次のようになりstateます。

http://www.example.com/?country=USA&city=Seattle

これらの行に沿ったものは、探している値のみで必要な動的配列を構築する必要があります。

于 2013-06-07T15:57:19.347 に答える
1

クエリ文字列のすべての変数は、$_GETphp スーパーグローバル配列に格納されます。あなたの例では、で国にアクセスできます$_GET['country']isset()変数が存在するかどうかを確認するために使用できる USA にデフォルト設定します。

$country = "USA";
if(isset($_GET['country'])) {
   $country = $_GET['country'];
}
于 2013-06-07T15:58:13.040 に答える
1

ここでの解決策は、$_GET(別の回答ですでに言及されている)またはhttp://php.net/manual/en/function.parse-url.phpを使用することです。これにより、引数の順序は完全に無関係になります。URL をクエリ引数の配列に解析し、必要なものをテストするだけです。すべてを URL に戻すには、http://php.net/manual/en/function.http-build-query.phpを使用します。

于 2013-06-07T15:58:25.780 に答える