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

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

スーパーグローバル変数については下記の記事を参考にしてください。

この記事の著者 ->S.E; です。

普段は、システム開発に必要なヒアリング、システムの要件定義、設計からプログラマとしてWebサイトやWebアプリケーションの開発、WordPressでのブログの執筆やサーバー運用・管理を行っています。

このページは「未経験の為のプログラミング講座 ゼロから始めるPHPプログラミング〜初級から実践編までを網羅〜」としてPHPの基本的な部分を【初級編】【中級編】【上級編】に分けて解説しています。最終的には簡単なフォームやシステム開発をフルスクラッチで行うことを目的としています。また、参考になる書籍なども紹介しています。

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

スーパーグローバル変数の「$_GET」は<form></form>内の値をGET形式で送信、またはリンク記載されたクエリ情報(文字列)と解説しました。

では実際にフォームからGET形式で送信される情報を取得するコードを確認して見ます。

以下のフォームがGET形式でデータを送信するHTMLです。
POST形式で送信する時はformの属性methodの値は「post」でしたが今回は「get」となります。

PHPでGETデータを受け取る〜フォーム編

フォームからGET形式でデータが送信され、PHPでそれを受け取る場合、name属性の値が $_GET[‘****‘]の「****」に入ります。

例)<input type=”text” name=”data01“> の場合は $_GET[‘data01‘] でデータを受け取ることができます。

上記のフォームからGET形式でデータを送信し表示した結果の例が以下となります。

GET形式のデータを受け取るときの注意点

POST形式のデータを受け取る時は下記を利用しましたが

GET形式のデータを受け取る場合は「if( $_SERVER[‘REQUEST_METHOD’] == ‘GET’ ){〜}」ではなく下記を利用しました。

「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へデータを送信すると

https://*******.com/test.php?data01=自由入力&data02=ラジオ02&data03=選択肢03

へアクセスすることになります。「?name=値」、複数ある場合は「&」で連結し「?name=値&name=値」となります。

データを送信していると言うより、指定のURLにアクセスしている感じです。
このことからもわかるように、<a href=”~”></a>の「〜」へパラーメーター(クエリ情報)付きのURLを記述することでformから送信したものと同様の結果が得られます。

リンクで送信する際の注意点

今回は「自由入力」や「ラジオ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エンコード

また、URLエンコードされた文字列を元に戻すには

GET形式とPOST形式の違い

同じような動作をするGET形式とPOST形式ですが、用途が異なります。

$_POST形式容量の大きい情報を送信するのに向いている。
URLのパラメータには出ないのでログインや情報の登録・更新・削除などで利用する
$_GET形式検索結果などの情報をURLとして取得したい場合に利用する
リンクで希望の結果を得るために利用する
created by Rinker
PHP7の基本構文から、クラス、DB連携、セキュリティ対策まで、しっかり習得! PHPプログラミングの標準教科書『独習PHP』が、最新のPHP7に対応。PHPでWebページ/アプリケーションを開発する際に必要な基礎的な知識、PHPの基本構文から、クラス、データベース連携、セキュリティまで、詳細かつ丁寧に解説します。
created by Rinker
時間がなくたって、プログラミングは学べます。学習を躊躇していた人たちに、既存の入門書で挫折した人たちに、「これならできる!」の最短カリキュラムを、土日の14時間で提供。まったくのプログラミング初心者が簡単なWebデータベースアプリを構築できるまでの成長コースを、手取り足取り、導きます。

コメントする

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)