PHP スーパーグローバル変数-$_GET

前回からは、スーパーグローバル変数についての解説を始めましたが、今回は「$_GET」の解説をしたいと思います。
スーパーグローバル変数については下記の記事を参考にしてください。

この記事の著者 ->S.E; です。
普段は、システム開発に必要なヒアリング、システムの要件定義、設計からプログラマとしてWebサイトやWebアプリケーションの開発、WordPressでのブログの執筆やサーバー運用・管理を行っています。
このページは「未経験の為のプログラミング講座 ゼロから始めるPHPプログラミング〜初級から実践編までを網羅〜」としてPHPの基本的な部分を【初級編】【中級編】【上級編】に分けて解説しています。最終的には簡単なフォームやシステム開発をフルスクラッチで行うことを目的としています。また、参考になる書籍なども紹介しています。
スーパーグローバル変数-$_GET
スーパーグローバル変数の「$_GET」は<form></form>内の値をGET形式で送信、またはリンク記載されたクエリ情報(文字列)と解説しました。
では実際にフォームからGET形式で送信される情報を取得するコードを確認して見ます。
以下のフォームがGET形式でデータを送信するHTMLです。
POST形式で送信する時はformの属性methodの値は「post」でしたが今回は「get」となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ゲット</title> </head> <body> <form action="./" method="get"> <input type="text" name="data01" value="自由入力"> <label><input type="radio" name="data02" value="ラジオ01"> ラジオ01</label> <label><input type="radio" name="data02" value="ラジオ02"> ラジオ02</label> <label><input type="radio" name="data02" value="ラジオ03"> ラジオ03</label> <select name="data03"> <option value="選択肢01">選択肢01</option> <option value="選択肢02">選択肢02</option> <option value="選択肢03">選択肢03</option> </select> <input type="submit" value="送信"> </form > </body> </html> |
PHPでGETデータを受け取る〜フォーム編
フォームからGET形式でデータが送信され、PHPでそれを受け取る場合、name属性の値が $_GET[‘****‘]の「****」に入ります。
例)<input type=”text” name=”data01“> の場合は $_GET[‘data01‘] でデータを受け取ることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php // POSTされたデータを受け取る if( isset( $_GET['send'] ) ){ // type="text"からのデータ $data01 = $_GET['data01']; // type="radio"からのデータ $data02 = $_GET['data02']; // selectからのデータ $data03 = $_GET['data03']; echo $data01; echo $data02; echo $data03; } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ゲット</title> </head> <body> <form action="./" method="get"> <input type="text" name="data01" value="自由入力"> <label><input type="radio" name="data02" value="ラジオ01"> ラジオ01</label> <label><input type="radio" name="data02" value="ラジオ02"> ラジオ02</label> <label><input type="radio" name="data02" value="ラジオ03"> ラジオ03</label> <select name="data03"> <option value="選択肢01">選択肢01</option> <option value="選択肢02">選択肢02</option> <option value="選択肢03">選択肢03</option> </select> <input type="submit" name="send" value="送信"> </form > </body> </html> |
上記のフォームからGET形式でデータを送信し表示した結果の例が以下となります。
1 2 3 | 自由入力 ラジオ02 選択肢03 |
GET形式のデータを受け取るときの注意点
POST形式のデータを受け取る時は下記を利用しましたが
1 2 3 | if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ 〜処理〜 } |
GET形式のデータを受け取る場合は「if( $_SERVER[‘REQUEST_METHOD’] == ‘GET’ ){〜}」ではなく下記を利用しました。
1 2 3 | if( isset( $_GET['send'] ) ){ 〜処理〜 } |
「if( $_SERVER[‘REQUEST_METHOD’] == ‘GET’ ){〜}」利用しなかった理由は、フォームからデータ送信時のみ処理を行いたいのですが、「「if( $_SERVER[‘REQUEST_METHOD’] == ‘GET’ ){〜}」」ではこのページ自体にアクセスした時も処理をしてしまいます。
その為「「if( $_SERVER[‘REQUEST_METHOD’] == ‘GET’ ){〜}」」ではなくsubmitボタンをクリックした時のみ処理をする「if( isset( $_GET[‘send’] ) {〜})」を利用しました。
フォームでデータを送信する際の注意点
フォームからデータを送信する際は、不正な文字や文字列を受け付けなくする必要があります。
詳しくは「PHP セキュリティー フォームから送信したデータをエスケープする」を参照してください。
PHPでGETデータを受け取る〜リンク編
GET形式でのデータの送信はリンクとしても利用可能です。
フォーム編のスクリプトを実際に作成し操作するとわかると思いますが、GET形式の送信は送信先のURLの後ろにパラメータ(クエリ情報)として付与されます。
フォーム編で作成したスクリプトを参考にして説明します。
下記のフォームでsubmitボタンをクリックしてtest.phpへデータを送信すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php // POSTされたデータを受け取る if( isset( $_GET['send'] ) ){ // type="text"からのデータ $data01 = $_GET['data01']; // type="radio"からのデータ $data02 = $_GET['data02']; // selectからのデータ $data03 = $_GET['data03']; echo $data01; echo $data02; echo $data03; } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ゲット</title> </head> <body> <form action="./" method="get"> <input type="text" name="data01" value="自由入力"> <label><input type="radio" name="data02" value="ラジオ01"> ラジオ01</label> <label><input type="radio" name="data02" value="ラジオ02"> ラジオ02</label> <label><input type="radio" name="data02" value="ラジオ03"> ラジオ03</label> <select name="data03"> <option value="選択肢01">選択肢01</option> <option value="選択肢02">選択肢02</option> <option value="選択肢03">選択肢03</option> </select> <input type="submit" name="send" value="送信"> </form > </body> </html> |
https://*******.com/test.php?data01=自由入力&data02=ラジオ02&data03=選択肢03
へアクセスすることになります。「?name=値」、複数ある場合は「&」で連結し「?name=値&name=値」となります。
データを送信していると言うより、指定のURLにアクセスしている感じです。
このことからもわかるように、<a href=”~”></a>の「〜」へパラーメーター(クエリ情報)付きのURLを記述することでformから送信したものと同様の結果が得られます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php // POSTされたデータを受け取る if( isset( $_GET['send'] ) ){ // type="text"からのデータ $data01 = $_GET['data01']; // type="radio"からのデータ $data02 = $_GET['data02']; // selectからのデータ $data03 = $_GET['data03']; echo $data01; echo $data02; echo $data03; } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>リンク</title> </head> <body> <a href="https://*******.com/test.php?data01=自由入力&data02=ラジオ02&data03=選択肢03">データをリンクで送信</a> </body> </html> |
リンクで送信する際の注意点
今回は「自由入力」や「ラジオ02」など漢字やカタカナなどをそのまま記述していますが、ブラウザによってはこのままでは正常に送信できない場合があります。その際は、「自由入力」や「ラジオ02」などの文字列をURLエンコードすることで正常に送信することができます。
元の文字列 | URLエンコードされた文字列 |
---|---|
自由入力 | %E8%87%AA%E7%94%B1%E5%85%A5%E5%8A%9B |
ラジオ02 | %E3%83%A9%E3%82%B8%E3%82%AA02 |
また、URLエンコードされた文字列を元に戻すには
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $encode_str = '%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%80%81%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89'; $decode_str = urldecode( $encode_str ); echo $decode_str; ?> // 結果 文字列のエンコード、デコード |
GET形式とPOST形式の違い
同じような動作をするGET形式とPOST形式ですが、用途が異なります。
$_POST形式 | 容量の大きい情報を送信するのに向いている。 URLのパラメータには出ないのでログインや情報の登録・更新・削除などで利用する |
$_GET形式 | 検索結果などの情報をURLとして取得したい場合に利用する リンクで希望の結果を得るために利用する |
S.E->お勧め記事;
- PHPフレームワーク「Laravel」ディレクティブ-繰り返し処理(ループ処理)-
- Panic Nova 購入から1年が過ぎライセンスの更新時期の注意点
- CrowdWorks いつの間にか「プロクラウドワーカー」になっていた
- プログラマー になる為に必要な プログラミング以外 の知識・スキル
- CrowdWorks 提案後、受注に繋がりました。提案〜契約までの流れを解説
- Shopify APIを利用して在庫管理を行う
- XSERVERにSSHを利用してLaravel環境を構築する
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
S.E->PR;
チームのタスク管理ツール【backlog】
FREENANCE(フリーナンス)
S.E->Weekly Ranking;
S.E->プロフィール;

