HTMLフォームの情報をPOSTメソッドで送信し、送信されたデータをPHPスクリプトで取得しHTMLに埋め込み表示してみます。フォームの各フィールドははformタグ中でinput、select、textareaタグ等を用いて指定します。特にinputタグは下表の様にtype属性が色々あります。
inputタイプ | type属性 |
---|---|
テキスト入力 | type="text" |
パスワード入力 | type="password" |
ラジオボタン | type="radio" |
チェックボックス | type="checkbox" |
送信ボタン | type="submit" |
ボタン | type="buttun" |
フォームデータの送信先はformタグのaction属性で指定します。また、そのときのリクエストメソッドの指定はformタグのmethod属性で指定し、ここではPOSTを用いるのでmethod=”post”と記述します。POSTはGETメソッドと異なり特に文字制限はありません。
ソースコード
form_test.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>HTMLフォーム情報の送信テスト</title> </head> <body> <form action="show_form_data.php" method="post"> ID:<input type="text" name="user_id" /><br /> PASS:<input type="password" name="pass" /><br /> 性別:<input type="radio" name="sex" value="1" checked />男性 <input type="radio" name="sex" value="2" />女性<br /> 学年:<select name="grade"> <option value="1" selected>1年生</option> <option value="2">2年生</option> <option value="3">3年生</option> <option value="4">4年生</option> </select><br /> 所有デジタル機器: <input type="checkbox" name="have_dig[0]" value="1" />PC <input type="checkbox" name="have_dig[1]" value="1" />Cell<br /> コメント:<br /><textarea name="comment" cols="30" rows="5"></textarea><br /> <input type="submit" value="送信" /> </form> </body> </html>
フォームデータは同ディレクトリに設置したshow_form_data.phpファイルに送信しています。
show_form_data.php
<?php // 変数の初期化 $user_id = ""; $pass = ""; $sex = "1"; $grade = "1"; $have_dig = array("0", "0"); $comment = ""; // POSTリクエストがあった時 if ($_SERVER["REQUEST_METHOD"] == "POST") { $user_id = htmlspecialchars($_POST["user_id"], ENT_QUOTES); $pass = htmlspecialchars($_POST["pass"], ENT_QUOTES); $sex = $_POST["sex"]; $grade = $_POST["grade"]; if (isset($_POST["have_dig"])) { foreach($_POST["have_dig"] as $key => $value) { $have_dig[$key] = $value; } } $comment = htmlspecialchars($_POST["comment"], ENT_QUOTES); } else { echo "フォームページからアクセスしてください。"; exit(1); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>HTMLフォームのPOSTの受信テスト</title> </head> <body> 送信されたデータは、<br /> ID:<?=$user_id ?><br /> PASS:<?=$pass ?><br /> 性別:<? echo $sex ? "男性" : "女性"; ?><br /> 学年:<?=$grade ?>年生<br /> 所有デジタル機器: <? if ($have_dig[0] == 1) echo "PC"; if ($have_dig[1] == 1) echo ($have_dig[0] == 1 ? "、" : "") . "Cell"; ?><br /> コメント:<?=$comment ?><br /> </body> </html>
POSTリクエストでshow_form_data.phpへアクセスした場合はexit関数でスクリプトを終了します(→PHP: exit – Manual)。
htmlspecialchars関数で特殊文字をエスケープします(→PHP: htmlspecialchars – Manual)。今回はPOSTメソッドに関する練習用スクリプトなのでバリデーション処理は入れていませんが、実際はセキュリティ対策と合わせて色々フィルタするなり、リダイレクトで別ページに誘導するなりの処理が必要です。最近はこの辺の処理をフレームワークで上手くラップしてくれるのでかなり楽になっています。
あと、余談ですがforeach文では操作対象の配列のコピーを作成して、コピーに対して処理していきます。
コメント
[…] PHP: フォーム情報の送信・受信 – POSTメソッド […]