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

今回は、システム開発では必要不可欠なスーパーグローバル変数について解説したいと思います。

この記事の著者 ->S.E; です。
普段は、システム開発に必要なヒアリング、システムの要件定義、設計からプログラマとしてWebサイトやWebアプリケーションの開発、WordPressでのブログの執筆やサーバー運用・管理を行っています。
このページは「未経験の為のプログラミング講座 ゼロから始めるPHPプログラミング〜初級から実践編までを網羅〜」としてPHPの基本的な部分を【初級編】【中級編】【上級編】に分けて解説しています。最終的には簡単なフォームやシステム開発をフルスクラッチで行うことを目的としています。また、参考になる書籍なども紹介しています。
スーパーグローバル変数とは
スーパーグローバル変数とは、ユーザーが定義する必要がなく、あらかじめ用意された変数のことを指します。
スーパーグローバル変数の特徴として、「global命令」を利用することなく関数内、関数外どのスコープからでもアクセス可能な変数です。
スコープに関しては「変数のスコープ(参照できる有効範囲)」を参照してください。
スーパーグローバル変数の種類
スーパーグローバル変数は主に下記の5種類があります。
※厳密にはこれ以外にもありますがWebサイトやWebアプリケーションを開発時主に利用する変数のみ記載しました。
変数名 | 内容 |
---|---|
$_POST | <form></form>内の値をPOST形式で送信されたデータ |
$_GET | <form></form>内の値をGET形式で送信、またはリンク記載されたクエリ情報(文字列) |
$_FILES | <form></form>に設置された<input type=”file”>から送信された情報 |
$_SERVER | リクエストヘッダー |
$_COOKIE | クッキーを経由して送信された情報 |
$_SESSION | セッションを経由して送信された情報 |
スーパーグローバル変数 $_POST
フォームからPOST形式で送信される情報を取得するコードを確認して見ます。
以下のフォームがPOST形式でデータを送信するHTMLです。
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 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ポスト</title> </head> <body> <form action="./" method="post"> <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> <label><input type="checkbox" name="data03[]" value="チェック01"> チェック01</label> <label><input type="checkbox" name="data03[]" value="チェック02"> チェック02</label> <label><input type="checkbox" name="data03[]" value="チェック03"> チェック03</label> <input type="submit" value="送信"> </form > </body> </html> |
注意点としては<input type=”checkbox”>のname属性の値が「data03[]」と記述している部分です。
チェックボックスはラジオボタンとは違い複数の選択が可能です。その為送信するデータは配列にする必要があります。下記のようにnameの値を個別に指定しても同様の動作はしますが、データの受け渡しの記述が煩雑になります。
1 2 3 | <label><input type="checkbox" name="data03-1" value="チェック01"> チェック01</label> <label><input type="checkbox" name="data03-2" value="チェック02"> チェック02</label> <label><input type="checkbox" name="data03-3" value="チェック03"> チェック03</label> |
PHPでPOSTデータを受け取る
フォームからポスト形式でデータが送信され、PHPでそれを受け取る場合、name属性の値が $_POST[‘****‘]の「****」に入ります。
例)<input type=”text” name=”data01“> の場合は $_POST[‘data01‘] でデータを受け取ることができます。
例)<input type=”checkbox”>のname属性の値「data03[]」は受け取り時に配列となっている為「[]」は不要となり、$_POST[‘data03‘]でデータを受け取ることができます。
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 | <?php // POSTされたデータを受け取る if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ // type="text"からのデータ $data01 = $_POST['data01']; // type="radio"からのデータ $data02 = $_POST['data02']; // type="checkbox"からのデータ $data03 = $_POST['data03']; echo $data01; echo $data02; // $data03は配列のため echo ではなく print_r を使用 print_r( $data03 ); } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ポスト</title> </head> <body> <form action="./" method="post"> <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> <label><input type="checkbox" name="data03[]" value="チェック01"> チェック01</label> <label><input type="checkbox" name="data03[]" value="チェック02"> チェック02</label> <label><input type="checkbox" name="data03[]" value="チェック03"> チェック03</label> <input type="submit" value="送信"> </form > </body> </html> |
上記のフォームからPOST形式でデータを送信し表示した結果の例が以下となります。
1 2 3 4 5 6 | 自由入力 ラジオ02 array( 0 => 'チェック01' ,1 => 'チェック03' ) |
では、チェックボックスのnameの値を個別に与えた場合のPHPはどのようになるのでしょうか?
1 2 3 | <label><input type="checkbox" name="data03-1" value="チェック01"> チェック01</label> <label><input type="checkbox" name="data03-2" value="チェック02"> チェック02</label> <label><input type="checkbox" name="data03-3" value="チェック03"> チェック03</label> |
記述するコードが無駄に多くなります。
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 45 46 47 48 49 | <?php // POSTされたデータを受け取る if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ // type="text"からのデータ $data01 = $_POST['data01']; // type="radio"からのデータ $data02 = $_POST['data02']; // type="checkbox"からのデータ $data03 = array(); if( $_POST['data03-1'] ) $data03[] = $_POST['data03-1']; if( $_POST['data03-2'] ) $data03[] = $_POST['data03-2']; if( $_POST['data03-3'] ) $data03[] = $_POST['data03-3']; echo $data01; echo $data02; // $data03は配列のため echo ではなく print_r を使用 print_r( $data03 ); } ?><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ポスト</title> </head> <body> <form action="./" method="post"> <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> <label><input type="checkbox" name="data03-1" value="チェック01"> チェック01</label> <label><input type="checkbox" name="data03-2" value="チェック02"> チェック02</label> <label><input type="checkbox" name="data03-3" value="チェック03"> チェック03</label> <input type="submit" value="送信"> </form > </body> </html> |
フォームでデータを送信する際の注意点
フォームからデータを送信する際は、不正な文字や文字列を受け付けなくする必要があります。
詳しくは「PHP セキュリティー フォームから送信したデータをエスケープする」を参照してください。
$_POSTは必ず習得
$_POSTはWebのシステム開発において、利用しないことはほぼないと思います。
メールフォームやアンケートシステム、管理画面などでの情報の登録・更新・削除など全てこの「$_POST」を利用します。
S.E->お勧め記事;
- macOS Monterey にアップデート後、composerやhomebrewでenv: php: No such file or directoryが出る
- PHPフレームワーク「Laravel」ルーティング Route::get()
- PHPフレームワーク「Laravel」ディレクティブ-分岐処理(条件分岐)-
- PHPフレームワーク「Laravel」MVCとコントローラを利用する
- PHP フレームワーク Laravel ディレクティブ – ループ変数 $loop –
- PHPフレームワーク「Laravel」Bladeテンプレートを利用する
- PHPフレームワーク「Laravel」ディレクティブ-繰り返し処理(ループ処理)-
- XSERVERにSSHを利用してLaravel環境を構築する
- PHPフレームワーク「Laravel」PHPテンプレートを利用する
S.E->PR;
チームのタスク管理ツール【backlog】
FREENANCE(フリーナンス)
S.E->Weekly Ranking;
S.E->プロフィール;

