PHPでウェブの世界と繋がろう!
menu
ホーム > PHPの文法 > 5 変数 > $_GET(ゲット変数)のすべて!【初心者向け基本】

$_GET(ゲット変数)のすべて!【初心者向け基本】

Pocket

5-5 PHP5 PHP7
[ $_GETを利用したフォームアプリケーションはこちら ]

$_GET(ゲット変数)

- 1 分ノート ! -

  • $_GET
    PHPの定義済み変数(=スーパーグローバル変数)の1つ
  • $_GET
    HTTP GET メソッド で送信され、URLパラメーターとして送られてきた値を取得する変数
  • $_GET連想配列として使用する
  • $_GETurldecode()関数を介した値が渡される
  • $_GET は、関数やメソッドの内部で使用する場合、
    global $_GET; とする必要がない
$_GETの送受信

- 1 分ノート ! -

  • $_GET は、HTTP GET メソッドで送信された値を取得する変数
  • クライアントからサーバーにデータを送信するHTTPメソッドには、
    GETPOST の両方がある
  • HTTP GET メソッドでデータを送信するとURLパラメーター
    としてデータが送信される
  • URLパラメータとは、
    URLの後に「?(クエッション)」記号を記述して、
    その後 「key名=値」 と続けるクエリ文字列
    「http://sample.com/index.php?key名=値&key名=値&key名=値・・」
  • HTTP GET メソッドでデータを送信する方法は
    HTML の <form>タグ<a>タグ を利用
  • <form>タグ を利用し HTTP GET メソッドでデータを送信には、
    method属性GET にする
  • <a>タグ を利用し HTTP GET メソッドでデータを送信には、
    URLの後に「?(クエッション)」記号を記述して、
    その後 「key名=値」 と続ける
  • <a>タグ で複数の値を送信する場合は「&(アンド)」で繋げる
    「http://sample.com/index.php?key名=値&key名=値&key名=値・・」とする
  • $_GETは、連想配列として使用する
  • URLパラメーターの「'key名'」は
    $_GETの連想配列「'key名'」となる $_GET['key名']
  • $_GETは、urldecode()関数を介して値が渡される
  • クライアントから HTTP GET で送信されたリクエスト結果の値は
    変化しません
    。従ってブックマークに登録しても同じ結果を得れる。
    HTTP POST で送信されたリクエスト結果の値は変化する場合がある

$_GET(GET変数)とは
POINT

  • $_GET
    PHPの定義済み変数(=スーパーグローバル変数)の1つ
  • $_GET
    HTTP GET メソッド で送信され、URLパラメーターとして送られてきた値を取得する変数
  • $_GET連想配列として使用する
  • $_GETurldecode()関数を介した値が渡される
  • $_GET は、関数やメソッドの内部で使用する場合、
    global $_GET; とする必要がない

$_GETは、PHPの定義済み変数のゲット変数です。この変数は、HTTP GET メソッドで送信され、URLパラメーターとして送られてきた値を取得する変数です。

$_GETは、連想配列で使用します。

$_GETに渡される値は、自動的にurldecode()関数を介します。

$_GETは、スーパーグローバル変数なので、スクリプトのコード中どこからでも使用することが出来る変数です。関数やメソッドの内部で使用する場合にも global $_GET; とする必要はありません。

$_GETはPHPの定義済み変数
$_GETは、PHPの定義済み変数の内の1つの変数です。PHPには定義済み変数が複数あります。其の中の1つが$_GETです。
PHPの定義済み変数はスーパーグローバル変数とも言います。
$_GET = PHPの定義済み変数 = スーパーグローバル変数
また、$_GET は自動グローバル変数とも呼ばれます。
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)

PHPの定義済み変数(=スーパーグローバル変数)

$GLOBALS
(グローバル変数)
・グローバルスコープで使用可能なすべての変数への参照
・連想配列として使用
$_SERVER
(サーバー変数)
・サーバ情報および実行時の環境情報
・連想配列として使用
$_GET
(ゲット変数)
・HTTP GET 変数
・連想配列として使用
$_POST
(ポスト変数)
・HTTP POST 変数
・連想配列として使用
$_FILES
(ファイル変数)
・HTTP ファイルアップロード変数
・連想配列として使用
$_REQUEST
(リクエスト変数)
・HTTP リクエスト変数
・連想配列として使用
$_SESSION
(セッション変数)
・セッション変数
・連想配列として使用
$_ENV
(環境変数)
・環境変数
・連想配列として使用
$_COOKIE
(クッキー変数)
・HTTP クッキー
・連想配列として使用

これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。

※注意2:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。

可変変数についてはこちらを参照下さい。

$_GETの送受信について
POINT

  • $_GET は、HTTP GET メソッドで送信された値を取得する変数
  • クライアントからサーバーにデータを送信するHTTPメソッドには、
    GETPOST の両方がある
  • HTTP GET メソッドでデータを送信するとURLパラメーター
    としてデータが送信される
  • URLパラメータとは、
    URLの後に「?(クエッション)」記号を記述して、
    その後 「key名=値」 と続けるクエリ文字列
    「http://sample.com/index.php?key名=値&key名=値&key名=値・・」
  • HTTP GET メソッドでデータを送信する方法は
    HTML の <form>タグ<a>タグ を利用
  • <form>タグ を利用し HTTP GET メソッドでデータを送信には、
    method属性GET にする
  • <a>タグ を利用し HTTP GET メソッドでデータを送信には、
    URLの後に「?(クエッション)」記号を記述して、
    その後 「key名=値」 と続ける
  • <a>タグ で複数の値を送信する場合は「&(アンド)」で繋げる
    「http://sample.com/index.php?key名=値&key名=値&key名=値・・」とする
  • $_GETは、連想配列として使用する
  • URLパラメーターの「'key名'」は
    $_GETの連想配列「'key名'」となる $_GET['key名']
  • $_GETは、urldecode()関数を介して値が渡される
  • クライアントから HTTP GET で送信されたリクエスト結果の値は
    変化しません
    。従ってブックマークに登録しても同じ結果を得れる。
    HTTP POST で送信されたリクエスト結果の値は変化する場合がある

送受信について

$_GETは、HTTP GET メソッドで送信された値を取得する変数です。HTTPとは、ウェブブラウザとウェブサーバの間でHTMLなどのコンテンツの送受信に用いられる通信プロトコル(通信方法、通信規約というようなものです)のことです。

クライアントからサーバーにデータを送信するHTTPメソッドには、GETPOST の両方があります。HTTP GET メソッドでデータを送信するとURLパラメーターとしてサーバーへデータが送信されます。

URLパラメータとは、URLの後に「?(クエッション)」記号を記述して、その後 「key名=値」 と続けるURLに付随させたクエリ文字列のことです。

http://sample.com/index.php?key名=値&key名=値&key名=値・・

$_GETは、上記のような HTTP GET メソッドによって送信されたURLパラメータで渡された値を取得する変数です。

HTTP GET メソッドによってURLパラメーターでデータを送信する方法は HTML の <form>タグ か <a>タグ を利用する2種類の方法があります。<form>タグ のmethod属性 に GET を指定することで、フォームのパラメーターをURL形式に変更し、作成されたクエリ文字列がURLパラメーターとして送信されます。<a>タグ を利用する場合はurlに直接クエリ文字列を書き込みます。クエリ文字列の記述方法は、、URLの後に「?(クエッション)」記号を記述して、その後 「key名=値」 と続けます。複数の値を送信する場合は「&(アンド)」で繋げます。「http://sample.com/index.php?key名=値&key名=値&key名=値&key名=値・・・」とします。

$_GETは、連想配列として使用します。URLパラメーターの「key名」は$_GETの連想配列「key名」となります。従って$_GETを呼び出す場合は、$_GET['key名'] とします。また、この変数の値は、urldecode() 関数を介して渡されます。これは通常自動で行われます。

クライアントから HTTP GET で送信されたリクエスト結果の値は変化しません。従ってブックマークに登録しても同じ結果を得れます。ですが、HTTP POST で送信されたリクエスト結果の値は変化する場合があります。HTTP POSTの場合、ページを再読み込みする際に「フォームのデータを再送信しますか?」などのメッセージが表示されますが、これは値が変化する場合があるためです。

<form>タグ を利用して HTTP GET メソッド で送信

<form>タグ の method属性 に GET を指定することで、フォームのパラメーターをURL形式に変更し、作成されたクエリ文字列がURLパラメーターとして送信されます。

$_GETは、連想配列として使用します。URLパラメーターの「'key名'」は$_GETの連想配列「'key名'」となります。従って$_GETを呼び出す場合は、$_GET[‘key名’] とします。また、$_GETは、urldecode()関数を介して値が渡されます。これは通常自動的に行われます。

<form action="<?php echo $_SERVER&#91;'PHP_SELF'&#93;; ?>" method="GET">
名前:<input type="text" name="yourname" value="" /><br/>
<input type="submit" value="送信" />
</form>
<?php
//$_GET&#91;'yourname'&#93;が存在していれば
if(isset($_GET&#91;'yourname'&#93;) && $_GET&#91;'yourname'&#93; != ''){
    echo '<strong>$_GET[\'yourname\']が送信されました。値は[ '.$_GET['yourname'].' ]です。'."</strong><br/>\n";
    ?>
<?php
}else{
    echo '<strong>$_GET[\'yourname\']はまだ送信されていません。'."</strong><br/>\n";
}
?>

送信前

$_GET[‘yourname’]はまだ送信されていません。

となります。

送信後

$_GET[‘yourname’]が送信されました。値は[ 入力値 ]です。

となります。

注目する点は送信後のURLです。URLパラメーターとしてクエリ文字列が記述されています

URLの「?」以降が

?yourname=山田
//山田と入力した場合

或いは

?yourname=%E5%B1%B1%E7%94%B0
//山田と入力した場合

となっています。これがURLパラメーターです$_GETはこのURLパラメーターを取得しています
※ブラウザによってエンコード文字列が表示されているか、デコードされた文字列が表示されているかの違いがあります。

<a>タグ を利用して HTTP GET メソッド で送信

<a>タグ を利用する場合はurlに直接クエリ文字列を書き込みます。この場合、送信する値はurlencode()関数でエンコードして下さい。

$_GETは、連想配列として使用します。URLパラメーターの「'key名'」は$_GETの連想配列「'key名'」となります。従って$_GETを呼び出す場合は、$_GET[‘key名’] とします。また、$_GETは、urldecode()関数を介して値が渡されます。これは通常自動的に行われます。

<form action="<?php echo $_SERVER&#91;'PHP_SELF'&#93;; ?>" method="GET">
<a href="<?php echo $_SERVER&#91;'PHP_SELF'&#93;; ?>?time=<?php echo urlencode('現在時刻は:'.date('Y/m/d H:i:s')); ?>">現在時刻を送信します。<?php echo '現在時刻は:'.date('Y/m/d H:i:s'); ?></a><br/>
</form>
<?php
//$_GET&#91;'time'&#93;が存在していれば
if(isset($_GET&#91;'time'&#93;) && $_GET&#91;'time'&#93; != ''){
    echo '<strong>$_GET[\'time\']が送信されました。値は[ '.$_GET['time'].' ]です。'."</strong><br/>\n";
    ?>
<?php
}else{
    echo '<strong>$_GET[\'time\']はまだ送信されていません。'."</strong><br/>\n";
}
?>

送信前

$_GET[‘time’]はまだ送信されていません。

となります。

送信後

$_GET[‘time’]が送信されました。値は[ 現在時刻は:2013/10/18 01:21:22 ]です。

となります。

<a>タグ で送信する場合も、送信後のURLが以下のようになっています。

?time=現在時刻は:2013%2F10%2F18+01%3A08%3A17

或いは

?time=%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%81%AF%EF%BC%9A
2013%2F10%2F18+01%3A08%3A17

となっています。

HTTP GET メソッドでフォームの複数の値(チェックボックスなど)を送信

get_checkbox_reg1.php と get_checkbox_reg2.php の2つのファイルを作成し、formタグ のmethod属性をGETにして複数の値(チェックボックスなど)を送信し、 $_GET で値を取得し出力します。

– サンプル Click Here ! –

get_checkbox_reg1.php

HTMLのformタグでmethod属性をGETにして送信します。
inputタグののname属性に「hoby[]」と指定することで、チェックボックスなどの複数の値を送信できます。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>get_checkbox_reg1</title>
</head>
<body>

<h1>GET送信</h1>
<form method="GET" action="get_checkbox_reg2.php">
趣味:<br/>
<input type="checkbox" name="hoby&#91;&#93;" value="musicappreciation">音楽鑑賞<br/>
<input type="checkbox" name="hoby&#91;&#93;" value="moviegoing">映画鑑賞<br/>
<input type="checkbox" name="hoby&#91;&#93;" value="reading">読書<br/>
<input type="checkbox" name="hoby&#91;&#93;" value="fishing">釣り<br/>
<input type="submit" value="送信">
</form>

</body>
</html>

post_checkbox_reg2.php

$_GETを連想配列として利用します。チェックボックス等で送信された複数の値を取得する方法は幾つかあります。以下の例では、foreach構文やfor文を利用して$_GETを展開しています。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>get_checkbox_reg2</title>
</head>
<body>

<h1>GET受信</h1>
<?php if(!isset($_GET&#91;'hoby'&#93;)){ ?>

	選択されていません。<br/>

<?php }else{ ?>

	<strong>$_GET['hoby']をforeach構文で表示</strong><br/>
	<?php foreach($_GET&#91;'hoby'&#93; as $value){ ?>
		<?php echo "$value<br/>\n"; ?>
	<?php } ?>

	<br/>

	<strong>$_GET['hoby']を連想配列のキー名を指定して表示</strong><br/>
	<?php $max = count($_GET&#91;'hoby'&#93;); ?>
	<?php for($i=0; $i<$max; $i++){ ?>
		<?php echo "{$_GET&#91;'hoby'&#93;&#91;$i&#93;}<br/>\n";?>
	<?php } ?>

	<br/>

	<strong>$_GET['hoby']の構造を確認</strong><br/>
	

		



<?php } ?>

</body>
</html>

サンプルコード

[ $_GETを利用したフォームアプリケーションはこちら ]

– サンプル Click Here ! –

<h3>$_GET変数の送信と取得</h3>

このページに 「time」という名前で「値」は現在時刻の GET変数 を送信します。<br/>
以下のURLがGET変数を送信するURLです。URLをクリックして送信して下さい。<br/>
ソースコードを確認してください。URLの値はurlencode()関数でエンコード文字列になっています。<br/>
<a href="http://www.tryphp.net/code-example/php/3-5-5.php?time=<?php echo urlencode('現在時刻は:'.date('Y/m/d H:i:s')); ?>">時刻を送信します。現在時刻は:<?php echo date('Y/m/d H:i:s'); ?></a><br/>

<div style="background-color:#ffffff;margin:10px; padding:10px; border:solid #efefef 1px;">
<?php
//$_GET&#91;'time'&#93;が存在していれば
if(isset($_GET&#91;'time'&#93;)){
    echo '<strong>$_GET[\'time\']が送信されました。値は[ '.$_GET['time'].' ]です。'."</strong><br/>\n";
    ?>
    <a href="http://www.tryphp.net/code-example/php/3-5-5.php">クリア</a>
<?php
}else{
    echo '<strong>$_GET[\'time\']はまだ送信されていません。'."</strong><br/>\n";
}
?>
</div>
実行結果

$_GET変数の送信と取得
このページに 「time」という名前で「値」は現在時刻の GET変数 を送信します。
以下のURLがGET変数を送信するURLです。URLをクリックして送信して下さい。
ソースコードを確認してください。URLの値はurlencode()関数でエンコード文字列になっています。
時刻を送信します。現在時刻は:2013/10/26 18:42:57

$_GET[‘time’]が送信されました。値は[ 現在時刻は:2013/10/26 18:42:57 ]です。
クリア

– サンプル Click Here ! –


タグ(=記事関連ワード)

日付

投稿日:2011年10月20日
最終更新日:2016年12月26日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpref-get/trackback/