PHP formからのデータ処理(POST送信)
クライアントからのデータの送信方法としてPOST送信を指定するとURLの後ろに付くクエリとしてではなく、送信内容自体が本文(本体)として送信されます。 入力内容がURLに表示されることはなく、かなり長い文章も送信することができます。 “post”というのは「フォームの内容を送信先ページに“送る”」という意味です。今回は、POST送信で送られたデータをPHPで取得する方法について説明します。なお、POSTの送信方法については、こちらの「HTMLのform」で説明してますので参考にしてください。。
POSTリクエストとは
HTTPのリクエストではパラメーターとして送信したいデータ、または、欲しいデータの条件を送信する事ができます。極端に言うと「データ送ります」がPOSTリクエストで、「この条件のデータをください(条件はこれです)」がGETリクエストです。
POSTリクエストは、主に入力フォームで使用されます(申し込みフォーム、アンケートフォーム、登録フォームなど)。またPOSTリクエストは、GETリクエストのように内容がアドレスに含まれないことから送信内容がサーバやブラウザのログに記されないのでGET送信に比べれば安心です(機密情報や個人情報は、POST送信にすれば安心ということではなく更にセキュリティ対策が必要となります)。
PHPでのPOSTデータ受け取り
PHPでPOST送信データを受け取る時は、非常に簡単でGET送信と殆ど同じ扱いで受け取れます。
GETと同様の形式で文字列をPOSTに変更するだけです。
サーバのPHPファイル「request_post.php」に対してPOSTリクエストを送信しましょう。
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> <head> <title>ゲンジン</title> <meta charset="UTF-8"> </head> <body> <h2>フォームタグ(POST)</h2> <form action="request_post.php" method="post"> <input type="radio" name="q1" value="yes"> はい <input type="radio" name="q1" value="no"> いいえ <br> <select name="no"> <option value="1">1月</option> <option value="2">2月</option> <option value="3">3月</option> <option value="4">4月</option> </select> <br> <input type="text" name="namae" size="40"> <br> <input type="submit" value="送信"> </form> </body> </html> |
受け取り側のプログラムを記述しましょう(request.php)。
1 2 3 4 5 6 7 8 9 |
<?php header("Content-type: text/html; charset=utf-8"); echo '<h1>POSTリクエストのテスト</h1>'; echo "postパラメータで送られたidの値は、".$_POST['q1']."です"; echo "<br>"; echo "postパラメータで送られたnoの値は、".$_POST['no']."です"; echo "<br>"; echo "postパラメータで送られたnoの値は、".$_POST['namae']."です"; ?> |
POSTで送られてきた値はPHPで“$_POST[ ]”を使います。[ ]のなかに、受け取りたいフォームの name属性 を書いてあげることで受け取ることができます(マルチバイト文字でもURLエンコードやデコードは不要です)。
実際にWebサーバ(XAMPP)で確認してください。
PHPのリクエスト変数($_REQUEST)
GETリクエストは、“$_GET[ ]”POSTリクエストは、“$_POST[ ]”と別々の方法でしたが、“$_REQUEST”はリクエスト変数といって $_GET、$_POST、$_COOKIE(クッキーは後述) などのデータを受け取ることができます。
受け取り方は、$_REQUEST[ ]”とします(プログラムでは通常、$_POST[ ]や$_GET[ ]を一緒くたに扱う事は少ないと思いますので出番は少ないのではないでしょうか)。
POSTかGETかを判別
PHPでリクエストデータを受け取る際にどちらのデータが来たのかで処理を変えたい時もあります。その時は、「$_SERVER[“REQUEST_METHOD”] を調べることでPOSTかGETかどちらで要求が来ているかを調べることができます。
1 2 3 4 |
if($_SERVER["REQUEST_METHOD"] != "POST"){ // ブラウザからHTMLページを要求された場合 }else{ // フォームからPOSTによって要求された場合 |