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メソッド […]