PHPのGET URLパラメータ


190

PHPでURLパラメータとしてURLを渡そうとしていますが、このパラメータを取得しようとしても何も得られません。

次のURLフォームを使用しています。

http://localhost/dispatch.php?link=www.google.com

私はそれを乗り越えようとしています:

$_GET['link'];

しかし、何も戻りませんでした。何が問題ですか?


15
完全なコードを表示
Pekka

3
paramを実行するvar_dumpと、$_GETそこにあるはずです
Naftali別名Neal

1
動作し$_REQUEST['link']ますか?また、インデックスキーlinkはURLの内容の大文字と小文字が区別されることに注意してください。
Dutchie432

あなたは実際には試して$_GETいませんが、たまたま投稿されていますか?
ジェームズ

そして、これの解決策は何でしたか?同じ問題
Ixx

回答:


282

$_GET関数や言語構造ではなく、単なる変数(配列)です。試してください:

<?php
echo $_GET['link'];

特に、これはスーパーグローバルです。PHPによって入力され、すべてのスコープで使用できる組み込み変数です(グローバルキーワードなしで関数内から使用できます)。

変数が存在しない可能性があるため、次のコードを使用して、コードが通知をトリガーしないようにすることができます(すべきです)。

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

または、手動のインデックスチェックをスキップし、さらに検証を追加する場合は、フィルター拡張を使用できます。

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

最後に重要なことですが、nullの合体演算子PHP / 7.0以降で使用可能)を使用して、欠落しているパラメーターを処理できます。

echo $_GET['link'] ?? 'Fallback value';

14
私のように、あなたが知っているよりもこれで何も得られない場合、その「リンク」はURLアドレスの変数の名前です!したがって、$ _ GET ['link']; 次のようなURLを入力する必要があります:localhost /?link = test
Firzen

私はWAMPを使用していますがlocalhost、このソリューションは機能しません。http://localhost/station?type=2 echo $_GET['type'];isnull
NineCattoRules

最後に使用しましたparse_str(parse_url($actual_link)['query'], $params);。詳細情報stackoverflow.com/a/11480852/4458531
NineCattoRules

「$ _GETは関数や言語構造ではなく、単なる変数(配列)だ」と言いますが、インデックスを介して値にアクセスするのではなく、文字列を介して値にアクセスします。これは配列よりも辞書ですか?
ScottyBlades

1
@ScottyBlades PHPデータ構造のコンテキストで話しています。PHPでは、配列はキーと値の組み合わせの順序付きリストです。これは、他の言語(CやJavaScriptなど)が「配列」と呼ぶものとは異なります。
アルバロゴンサレス

27

コードを投稿してください。

<?php
    echo $_GET['link'];
?>

または

<?php
    echo $_REQUEST['link'];
?>

やる仕事を...




10

受け入れられた答えは良いです。しかし、次のようなシナリオがある場合:

http://www.mydomain.me/index.php?state=California.php#Berkeley

次のように、名前付きアンカーをクエリ文字列として扱うことができます。

http://www.mydomain.me/index.php?state=California.php&city=Berkeley

次に、次のようにアクセスします。

$Url = $_GET['state']."#".$_GET['city'];

3

私は何も得ていませんでした$_GET["..."](例えばprint_r($_GET)、空の配列を与えた)$_SERVER['REQUEST_URI']ものがあるべきであると示しました。結局、私の.htaccessがそこにリダイレクトしていたので、私はWebページだけにアクセスしていることがわかりました(私の404ハンドラーは同じ.phpファイルであり、テスト中にブラウザーでタイプミスをしました)。

名前を変更するだけで、404リダイレクトが機能しなくなると、同じphpコードが機能するようになります。

そのため $_GET、phpコードが正しい場合でも何も返さない方法があります。



0

誰も何も返さない人は、結果をhtmlタグで囲む必要があると思います。

このような:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>

5
いいえ、htmlタグは必要ありません。プレーンテキストはすべてのブラウザでレンダリングされます。
MarcoS 2013

-1

Alvaroが言ったように、$ _ GETは関数ではなくパラメーターを含む配列なので、次のコマンドを使用してその配列から1つの要素を取得できます

<?php
$link = $_GET['link'];
echo $link;
?>

予想されるOP:

www.google.com
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.