UPDATE:2024年08月01日
PHP $_POST(ポスト変数 )のすべて【初心者向け基本】
目次 [閉じる]
$_POST(ポスト変数) 簡単まとめ
$_POST(ポスト変数)とは
1 Minute Note
- $_POST は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_POST は HTTP POST メソッド で送信された値を取得する変数
- $_POST は 連想配列として使用する
- $_POST は、関数やメソッドの内部で使用する場合、global $_POST; とする必要がない
$_POST(ポスト変数)の送受信
1 Minute Note
- $_POST は HTTP POST で渡された値を取得する変数
- クライアントからサーバーにデータを送信するHTTPメソッドには、GET と POST の両方がある
- HTTP POST メソッドでデータを送信する方法はHTML の <form>タグ の 属性 を POST にする
- $_POST は 連想配列として使用する
- クライアントから HTTP GET で送信されたリクエスト結果の値は変化しません。従ってブックマークに登録しても同じ結果を得れる。HTTP POST で送信されたリクエスト結果の値は変化する場合がある
$_POST(ポスト変数)とは
- $_POST は PHPの定義済み変数(=スーパーグローバル変数)の1つ
- $_POST は HTTP POST メソッド で送信された値を取得する変数
- $_POST は 連想配列として使用する
- $_POST は、関数やメソッドの内部で使用する場合、global $_POST; とする必要がない
$_POST は、PHPの定義済み変数のポスト変数です。この変数は、HTTP POST メソッドで送信された値を取得する変数です。HTMLで記述された formタグ からの値を受け取り表示したり処理することが出来ます。
$_POST のデータ型は配列(配列変数)で、$_POST は、連想配列で使用します。
$_POST は、スーパーグローバル変数なので、スクリプトのコード中どこからでも使用することが出来る変数です。関数やメソッドの内部で使用する場合にも global $_POST; とする必要はありません。
$_POSTはPHPの定義済み変数
PHPの定義済み変数はスーパーグローバル変数とも言います。
$_POST = PHPの定義済み変数 = スーパーグローバル変数、また、$_POSTは自動グローバル変数とも呼ばれます。
(PHPには定義済みの定数というものもあります。詳細はこちらを参照下さい。)
PHPの定義済み変数(=スーパーグローバル変数)
$GLOBALS (グローバル変数) | ・グローバルスコープで使用可能なすべての変数への参照 ・連想配列として使用 |
---|---|
$_SERVER (サーバー変数) | ・サーバ情報および実行時の環境情報 ・連想配列として使用 |
$_GET (ゲット変数) | ・HTTP GET 変数 ・連想配列として使用 |
$_POST (ポスト変数) | ・HTTP POST 変数 ・連想配列として使用 |
$_FILES (ファイル変数) | ・HTTP ファイルアップロード変数 ・連想配列として使用 |
$_REQUEST (リクエスト変数) | ・HTTP リクエスト変数 ・連想配列として使用 |
$_SESSION (セッション変数) | ・セッション変数 ・連想配列として使用 |
$_ENV (環境変数) | ・環境変数 ・連想配列として使用 |
$_COOKIE (クッキー変数) | ・HTTP クッキー ・連想配列として使用 |
これら、PHPの定義済み変数は、プログラムコード中何処からでも使用することができます。関数の内部でも globalキーワードを使用せず呼び出すことが出来ます。このように、スーパーグローバル変数は非常に便利なものです。
通常、変数には有効範囲などのルールがあります。このルールは、PHPにおいて変数のスコープという宣言の場所とそれによる有効範囲として定められています。スコープには、「グローバルスコープ」「ローカルスコープ」「スタティック変数」「関数の引数」の4種類ありますが、これらすべてのスコープを持っているのがスーパーグローバル変数です。
変数のスコープについてはこちらを参照下さい。
※注意2:
ただし、スーパーグローバル変数は、関数やクラスメソッドの中の 可変変数 として使用することはできません。
可変変数についてはこちらを参照下さい。
$_POSTの送受信について
- $_POST は HTTP POST で渡された値を取得する変数
- クライアントからサーバーにデータを送信するHTTPメソッドには、GET と POST の両方がある
- HTTP POST メソッドでデータを送信する方法はHTML の <form>タグ の method属性 を POST にする
- $_POST は 連想配列として使用する
- クライアントから HTTP GET で送信されたリクエスト結果の値は変化しません。従ってブックマークに登録しても同じ結果を得れる。HTTP POST で送信されたリクエスト結果の値は変化する場合がある
送受信について
$_POSTは、HTTP POST メソッドで渡された値を取得する変数です。
クライアントからサーバーにデータを送信するHTTPメソッドには、GET と POST の両方があります。
HTTPとは、ウェブブラウザとウェブサーバの間でHTMLなどのコンテンツの送受信に用いられる通信プロトコル(通信方法、通信規約というようなものです)のことです。
HTTP POST メソッドでデータを送信する方法は HTMLの <form>タグ を利用します。<form>タグ のmethod属性 に POST を指定することで、フォームのパラメーターをサーバーへ送信することが出来ます。
$_POSTは、連想配列として使用します。
form の <input>タグ や <checkbox>タグ 、 <select>タグ などで指定する name属性 の値は、$_POSTの連想配列の「key名」となります。value属性の値が値そのものになります。
以下のフォームの inputタグ の値を$_POSTで受け取る場合
1 2 3 | <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST"> yourname:<input type="text" name="yourname" value="山田"> </form> |
1 | <?php echo $_POST['yourname']; ?> |
結果は
となります。
クライアントから HTTP GET で送信されたリクエスト結果の値は変化しません。従ってブックマークに登録しても同じ結果を得れます。ですが、HTTP POST で送信されたリクエスト結果の値は変化する場合があります。HTTP POSTの場合、ページを再読み込みする際に「フォームのデータを再送信しますか?」などのメッセージが表示されますが、これは値が変化する場合があるためです。
<form>タグ を利用して HTTP POST メソッド で送信
post_reg1.php と post_reg2.php の2つのファイルを作成し、<form>タグ の method属性 を POST にして値を送信し、$_POST で値を取得し出力します。
(1) post_reg1.php 送信フォーム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>post_reg1</title> </head> <body> <h1>POST送信</h1> <form method="post" action="post_reg2.php"> <input type="text" name="sitename" size="15" value="TRYPHP"> <input type="submit" value="送信"> </form> </body> </html> |
(2) post_reg2.php 受信
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>post_reg2</title> </head> <body> <h1>POST受信</h1> <?php echo $_POST['sitename']; ?> </body> </html> |
結果は
TRYPHP
となります。
HTTP POST メソッドでフォームの複数の値(チェックボックスなど)を送信
post_checkbox_reg1.php と post_checkbox_reg2.php の2つのファイルを作成し、formタグ のmethod属性をPOSTにして複数の値(チェックボックスなど)を送信し、 $_POST で値を取得し出力します。
(1) post_checkbox_reg1.php 送信
inputタグののname属性に「
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>post_checkbox_reg1</title> </head> <body> <h1>POST送信</h1> <form method="post" action="post_checkbox_reg2.php"> 趣味:<br> <input type="checkbox" name="hoby[]" value="musicappreciation">音楽鑑賞<br> <input type="checkbox" name="hoby[]" value="moviegoing">映画鑑賞<br> <input type="checkbox" name="hoby[]" value="reading">読書<br> <input type="checkbox" name="hoby[]" value="fishing">釣り<br> <input type="submit" value="送信"> </form> </body> </html> |
(2) post_checkbox_reg2.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 | <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>post_checkbox_reg2</title> </head> <body> <h1>POST受信</h1> <?php if(!isset($_POST['hoby'])){ ?> 選択されていません。<br> <?php }else{ ?> <strong>$_POST['hoby']をforeach構文で表示</strong><br> <?php foreach($_POST['hoby'] as $value){ ?> <?php echo "$value<br>\n"; ?> <?php } ?> <br> <strong>$_POST['hoby']を連想配列のキー名を指定して表示</strong><br> <?php $max = count($_POST['hoby']); ?> <?php for($i=0; $i<$max; $i++){ ?> <?php echo "{$_POST['hoby'][$i]}<br>\n";?> <?php } ?> <br> <strong>$_POST['hoby']の構造を確認</strong><br> <pre> <?php var_dump($_POST['hoby']); ?> </pre> <?php } ?> </body> </html> |
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <h3>$_POST変数の送信と取得</h3> このページに 「time」という名前で「値」は現在時刻の POST変数 を送信します。<br> <form action="https://wepicks.net/code-example/php/3-5-6.php" method="post"> <input type="text" name="time" value="<?php echo '現在時刻は:'.date('Y/m/d H:i:s'); ?>" size="60"> <input type="submit" value="送信"> </form> <div style="background-color:#ffffff;margin:10px; padding:10px; border:solid #efefef 1px;"> <?php //$_POST['time']が存在していれば if(isset($_POST['time'])){ echo '<strong>$_POST[\'time\']が送信されました。値は[ '.$_POST['time'].' ]です。'."</strong><br>\n"; ?> <form action="https://wepicks.net/code-example/php/3-5-6.php" method="post"> <input type="submit" value="クリア"> </form> <?php }else{ echo '<strong>$_POST[\'time\']はまだ送信されていません。'."</strong><br>\n"; } ?> </div> |
$_POST変数の送信と取得
このページに 「time」という名前で「値」は現在時刻の POST変数 を送信します。
$_POST(ポスト変数)で入力フォームアプリケーションを作成する
1 入力 phpsample-form-post.php
↓
2 確認 phpsample-form-post2.php
↓
3 完了 phpsample-form-post3.php
1入力 phpsample-form-post.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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <head> <title>POSTフォーム</title> </head> <body> <?php //$htmlを初期化 $html = array(); //戻りの場合 if(isset($_POST['back'])){ //htmlentities()でHTMLコードをエスケープします。 $html['name'] = htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8'); $html['hoby']['reading'] = htmlentities($_POST['hoby']['reading'], ENT_QUOTES, 'UTF-8'); $html['hoby']['appreciate'] = htmlentities($_POST['hoby']['appreciate'], ENT_QUOTES, 'UTF-8'); $html['hoby']['trip'] = htmlentities($_POST['hoby']['trip'], ENT_QUOTES, 'UTF-8'); $html['maintext'] = htmlentities($_POST['maintext'], ENT_QUOTES, 'UTF-8'); //初期値 }else{ //初期化 $html['name'] = ''; $html['hoby']['reading'] = ''; $html['hoby']['appreciate'] = ''; $html['hoby']['trip'] = ''; $html['maintext'] = ''; } ?> <h3>1入力</h3> <form action="phpsample-form-post2.php" method="POST"> <table border="1"> <tr> <td>名前</td> <td><input type="text" name="name" value="<?php echo $html['name']; ?>" size=48></td> </tr> <tr> <td>趣味</td> <td> <input type="checkbox" name="hoby[reading]" value="reading"<?php if($html['hoby']['reading'] == 'reading') echo ' checked'; ?>>読書 <input type="checkbox" name="hoby[appreciate]" value="appreciate"<?php if($html['hoby']['appreciate'] == 'appreciate') echo ' checked'; ?>>鑑賞 <input type="checkbox" name="hoby[trip]" value="trip"<?php if($html['hoby']['trip'] == 'trip') echo ' checked'; ?>>旅行 </td> </tr> <tr> <td>お問合せ内容</td> <td><textarea name="maintext" cols="50" rows="10"><?php echo $html['maintext']; ?></textarea></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="confirm" value="- 入力内容の確認 -"> <input type="reset" value="リセット" name="reset" onClick="Frest()"> </td> </tr> </table> </form> </body> </html> |
2確認 phpsample-form-post2.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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <head> <title>POSTフォーム</title> </head> <body> <?php //変数初期化 $html = array(); $cln = array(); $strError = ''; //確認ボタンが押されていれば if(isset($_POST['confirm'])){ //名前 フィルタリング 30文字以内 if(isset($_POST['name']) && $_POST['name'] != ''){ $cln['name'] = $_POST['name']; //マルチバイト文字列を含めた文字数 if(mb_strlen($cln['name']) <= 30){ //htmlentities()でHTMLコードをエスケープします。 $html['name'] = htmlentities($cln['name'], ENT_QUOTES, 'UTF-8'); }else{ $strError .= "名前を30文字以内にして下さい。<br>\n"; $html['name'] = ''; } }else{ $html['name'] = ''; }//end //選択読書 フィルタリング if(isset($_POST['hoby']['reading']) && $_POST['hoby']['reading'] != ''){ $cln['hoby']['reading'] = $_POST['hoby']['reading']; //値のチェック if($cln['hoby']['reading'] === 'reading'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['reading'] = $cln['hoby']['reading']; }else{ $strError .= "読書の選択肢が不正です。<br>\n"; $html['hoby']['reading'] = ''; } }else{ $html['hoby']['reading'] = ''; }//end //選択鑑賞 フィルタリング if(isset($_POST['hoby']['appreciate']) && $_POST['hoby']['appreciate'] != ''){ $cln['hoby']['appreciate'] = $_POST['hoby']['appreciate']; //値のチェック if($cln['hoby']['appreciate'] === 'appreciate'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['appreciate'] = $cln['hoby']['appreciate']; }else{ $strError .= "鑑賞の選択肢が不正です。<br>\n"; $html['hoby']['appreciate'] = ''; } }else{ $html['hoby']['appreciate'] = ''; }//end //選択旅行 フィルタリング if(isset($_POST['hoby']['trip']) && $_POST['hoby']['trip'] != ''){ $cln['hoby']['trip'] = $_POST['hoby']['trip']; //値のチェック if($cln['hoby']['trip'] === 'trip'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['trip'] = $cln['hoby']['trip']; }else{ $strError .= "旅行の選択肢が不正です。<br>\n"; $html['hoby']['trip'] = ''; } }else{ $html['hoby']['trip'] = ''; }//end //お問合せ内容 フィルタリング 300文字以内 if(isset($_POST['maintext']) && $_POST['maintext'] != ''){ $cln['maintext'] = $_POST['maintext']; //マルチバイト文字列を含めた文字数 if(mb_strlen($cln['maintext']) <= 300){ //htmlentities()でHTMLコードをエスケープします。 $html['maintext'] = htmlentities($cln['maintext'], ENT_QUOTES, 'UTF-8'); }else{ $strError .= "お問合せ内容を300文字以内にして下さい。<br>\n"; $html['maintext'] = ''; } }else{ $html['maintext'] = ''; }//end //フィルタリングでエラーがあれば if($strError != ''){ echo $strError."<br>\n"; ?> <form action="phpsample-form-post.php" method="POST"> <input type="hidden" name="name" value="<?php echo $html['name']; ?>"> <input type="hidden" name="hoby[reading]" value="<?php echo $html['hoby']['reading']; ?>"> <input type="hidden" name="hoby[appreciate]" value="<?php echo $html['hoby']['appreciate']; ?>"> <input type="hidden" name="hoby[trip]" value="<?php echo $html['hoby']['trip']; ?>"> <input type="hidden" name="maintext" value="<?php echo $html['maintext']; ?>"> <input type="submit" name="back" value="- 戻る -"> </form> </div> <hr/> </body> </html> <?php exit; } //確認ボタンが押されていなければ }else{ ?> 確認ボタンを押して下さい。<br> <a href="phpsample-form-post.php">入力へ</a> </div> <hr/> </body> </html> <?php exit; } ?> <h3>2確認</h3> <table border="1"> <tr> <td>名前</td> <td><?php echo $html['name']; ?></td> </tr> <tr> <td>趣味</td> <td> <?php if($html['hoby']['reading'] == 'reading') echo '読書<br>'; ?> <?php if($html['hoby']['appreciate'] == 'appreciate') echo '完了<br>'; ?> <?php if($html['hoby']['trip'] == 'trip') echo '旅行<br>'; ?> </td> </tr> <tr> <td>お問合せ内容</td> <td><?php echo nl2br($html['maintext']); ?></td> </tr> </table> <form action="phpsample-form-post.php" method="POST"> <input type="hidden" name="name" value="<?php echo $html['name']; ?>"> <input type="hidden" name="hoby[reading]" value="<?php echo $html['hoby']['reading']; ?>"> <input type="hidden" name="hoby[appreciate]" value="<?php echo $html['hoby']['appreciate']; ?>"> <input type="hidden" name="hoby[trip]" value="<?php echo $html['hoby']['trip']; ?>"> <input type="hidden" name="maintext" value="<?php echo $html['maintext']; ?>"> <input type="submit" name="back" value="- 戻る -"> </form> <br> <form action="phpsample-form-post3.php" method="POST"> <input type="hidden" name="name" value="<?php echo $html['name']; ?>"> <input type="hidden" name="hoby[reading]" value="<?php echo $html['hoby']['reading']; ?>"> <input type="hidden" name="hoby[appreciate]" value="<?php echo $html['hoby']['appreciate']; ?>"> <input type="hidden" name="hoby[trip]" value="<?php echo $html['hoby']['trip']; ?>"> <input type="hidden" name="maintext" value="<?php echo $html['maintext']; ?>"> <input type="submit" name="comp" value="- 完了へ -"> </form> </body> </html> |
3完了 phpsample-form-post3.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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <head> <title>POSTフォーム</title> </head> <body> <?php //変数初期化 $html = array(); $cln = array(); $strError = ''; //完了ボタンが押されていれば if(isset($_POST['comp'])){ //名前 フィルタリング 30文字以内 if(isset($_POST['name']) && $_POST['name'] != ''){ $cln['name'] = $_POST['name']; //マルチバイト文字列を含めた文字数 if(mb_strlen($cln['name']) <= 30){ //htmlentities()でHTMLコードをエスケープします。 $html['name'] = htmlentities($cln['name'], ENT_QUOTES, 'UTF-8'); }else{ $strError .= "名前を30文字以内にして下さい。<br>\n"; $html['name'] = ''; } }else{ $html['name'] = ''; }//end //選択読書 フィルタリング if(isset($_POST['hoby']['reading']) && $_POST['hoby']['reading'] != ''){ $cln['hoby']['reading'] = $_POST['hoby']['reading']; //値のチェック if($cln['hoby']['reading'] === 'reading'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['reading'] = $cln['hoby']['reading']; }else{ $strError .= "読書の選択肢が不正です。<br>\n"; $html['hoby']['reading'] = ''; } }else{ $html['hoby']['reading'] = ''; }//end //選択鑑賞 フィルタリング if(isset($_POST['hoby']['appreciate']) && $_POST['hoby']['appreciate'] != ''){ $cln['hoby']['appreciate'] = $_POST['hoby']['appreciate']; //値のチェック if($cln['hoby']['appreciate'] === 'appreciate'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['appreciate'] = $cln['hoby']['appreciate']; }else{ $strError .= "鑑賞の選択肢が不正です。<br>\n"; $html['hoby']['appreciate'] = ''; } }else{ $html['hoby']['appreciate'] = ''; }//end //選択旅行 フィルタリング if(isset($_POST['hoby']['trip']) && $_POST['hoby']['trip'] != ''){ $cln['hoby']['trip'] = $_POST['hoby']['trip']; //値のチェック if($cln['hoby']['trip'] === 'trip'){ //htmlentities()でHTMLコードをエスケープします。 $html['hoby']['trip'] = $cln['hoby']['trip']; }else{ $strError .= "旅行の選択肢が不正です。<br>\n"; $html['hoby']['trip'] = ''; } }else{ $html['hoby']['trip'] = ''; }//end //お問合せ内容 フィルタリング 300文字以内 if(isset($_POST['maintext']) && $_POST['maintext'] != ''){ $cln['maintext'] = $_POST['maintext']; //マルチバイト文字列を含めた文字数 if(mb_strlen($cln['maintext']) <= 300){ //htmlentities()でHTMLコードをエスケープします。 $html['maintext'] = htmlentities($cln['maintext'], ENT_QUOTES, 'UTF-8'); }else{ $strError .= "お問合せ内容を300文字以内にして下さい。<br>\n"; $html['maintext'] = ''; } }else{ $html['maintext'] = ''; }//end //フィルタリングでエラーがあれば if($strError != ''){ ?> 不正なエラーです。<br> <a href="phpsample-form-post.php">入力へ</a> </div> <hr/> </body> </html> <?php exit; } //完了ボタンが押されていなければ }else{ ?> 完了ボタンを押して下さい。<br> <a href="phpsample-form-post.php">入力へ</a> </div> <hr/> </body> </html> <?php exit; } ?> <h3>3完了</h3> <table border="1"> <tr> <td>名前</td> <td><?php echo $html['name']; ?></td> </tr> <tr> <td>趣味</td> <td> <?php if($html['hoby']['reading'] == 'reading') echo '読書<br>'; ?> <?php if($html['hoby']['appreciate'] == 'appreciate') echo '完了<br>'; ?> <?php if($html['hoby']['trip'] == 'trip') echo '旅行<br>'; ?> </td> </tr> <tr> <td>お問合せ内容</td> <td><?php echo nl2br($html['maintext']); ?></td> </tr> </table> <form action="phpsample-form-post.php" method="POST"> <input type="submit" name="input" value="- 入力へ -"> </form> </body> </html> |
タグ(=記事関連ワード)
日付
最終更新日:2024年08月01日