PHP: フォーム情報の送信・受信 – POSTメソッド

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&#91;0&#93;" value="1" />PC
<input type="checkbox" name="have_dig&#91;1&#93;" 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&#91;"REQUEST_METHOD"&#93; == "POST") {
	$user_id = htmlspecialchars($_POST&#91;"user_id"&#93;, ENT_QUOTES);
	$pass = htmlspecialchars($_POST&#91;"pass"&#93;, ENT_QUOTES);
	$sex = $_POST&#91;"sex"&#93;;
	$grade = $_POST&#91;"grade"&#93;;
	if (isset($_POST&#91;"have_dig"&#93;)) {
		foreach($_POST&#91;"have_dig"&#93; 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&#91;0&#93; == 1) echo "PC";
if ($have_dig&#91;1&#93; == 1) echo ($have_dig&#91;0&#93; == 1 ? "、" : "") . "Cell";
?><br />
コメント:<?=$comment ?><br />
</body>
</html>

POSTリクエストでshow_form_data.phpへアクセスした場合はexit関数でスクリプトを終了します(→PHP: exit – Manual)。
htmlspecialchars関数で特殊文字をエスケープします(→PHP: htmlspecialchars – Manual)。今回はPOSTメソッドに関する練習用スクリプトなのでバリデーション処理は入れていませんが、実際はセキュリティ対策と合わせて色々フィルタするなり、リダイレクトで別ページに誘導するなりの処理が必要です。最近はこの辺の処理をフレームワークで上手くラップしてくれるのでかなり楽になっています。
あと、余談ですがforeach文では操作対象の配列のコピーを作成して、コピーに対して処理していきます。

実行結果

form_test.html

HTMLフォームへの入力

show_form_data.php

POSTされたデータの出力

コメント

  1. PHP Bibtex Database Manager導入失敗 – Tomii lab. より:

    […] PHP: フォーム情報の送信・受信 – POSTメソッド […]