PHPによるWebフォーム処理
Webアプリケーションの基本はなんといってもWebフォームを使ってユーザから情報を受け取り、
それに対する応答を返すという処理パターンです。
PHPでの実装方法はバリエーションが豊富ですが、
ここで最も簡単な例をご紹介しましょう。
次のHTML文書は一般的なセミナーの受講申し込みを模したWebフォームです。
この中にはPHPスクリプトは含まれていないので、
「form-separate-form.html」と名づけました。
<html>
<head>
<meta http-equiv="Context-Type" content="text/html;charset=EUC_JP">
<title>フォームのサンプル</title>
</head>
<body bgcolor="white">
<form action="form-separate-result.php" method="post">
受講生ID:
<input type="text" name="student_id"><br>
コース:<br>
<input type="radio" name="course" value="lv1" checked>入門コース<br>
<input type="radio" name="course" value="lv2">初級コース<br>
<input type="radio" name="course" value="lv3">応用コース<br>
<input type="radio" name="course" value="lv4">特訓コース<br>
会場:<br>
<select name="location" size=4>
<option value="sendai" selected>仙台
<option value="shinagawa">品川
<option value="makuhari">幕張
<option value="kyoto">京都
<option value="osaka">大阪
</select>
<br>
<input type="submit" value="申し込む">
<input type="reset" value="クリア">
</form>
</body></html>
|
今度は、この入力に対する処理を行って応答するスクリプト
(form-separate-result.php)です。
処理を行うといっても、入力内容をそのまま出力するだけのものなので、
全く登録処理は行っていません。その部分は?
そそ、そこを書くのがビジネスに依存する部分なのですね。
<html><head>
<meta http-equiv="Context-Type" content="text/html;charset=EUC_JP">
<title>フォームのサンプル</title>
</head>
<body bgcolor="white">
<?
$student_id = trim($HTTP_POST_VARS["student_id"]);
$course = trim($HTTP_POST_VARS["course"]);
$location = trim($HTTP_POST_VARS["location"]);
if(empty($student_id)){
?>
<h1>おおっと</h1>
受講生IDを入力して下さい。
<?
}
else{
?>
<h1>登録を完了しました。(たぶん)</h1>
受講生ID= <?= $student_id ?><br>
コース=<?= $course ?><br>
会場=<?= $location ?><br>
<?
}
?>
<br>
<a href="form-separate-form.html">フォームに戻る</a><br>
</body></html>
|
ポイントは、フォームで入力されたCGI変数の値は配列HTTP_GET_VARSまたはHTTP_POST_VARS
に、変数名を添字とする配列として格納されるということだけで、
後はそれらを使って処理を書いてやればOKです。
フォームと応答をひとつの文書にまとめる
これもよく使われる基本的なテクニックですが、
CGI変数の存在有無によって、同じHTML文書で、
Webフォームを表示したり、
それに対する応答を表示したりを切り替えることが可能です。
ひとつの処理に対するファイルが複数に分散してしまうCGIに比べて、
リソースの管理が楽になるはずです。
<html><head>
<meta http-equiv="Context-Type" content="text/html;charset=EUC_JP">
<title>フォームのサンプル</title></head>
<body bgcolor="white">
<?
if(isset($HTTP_POST_VARS["student_id"])){
/* フォーム変数が存在すれば、フォームの入力を受けた応答を
* 返します。*/
$student_id = trim($HTTP_POST_VARS["student_id"]);
$course = trim($HTTP_POST_VARS["course"]);
$location = trim($HTTP_POST_VARS["location"]);
if(empty($student_id)){
?>
<h1>おおっと</h1>
受講生IDを入力して下さい。
<?
}
else{
?>
<h1>登録を完了しました。(たぶん)</h1>
受講生ID= <?= $student_id ?><br>
コース=<?= $course ?><br>
会場=<?= $location ?><br>
<?
}
}
else{
/* フォーム変数が存在しない場合、これからフォームに入力するものとして、
* フォームを表示します。 */
?>
<form action="form-united.php" method="post">
受講生ID:
<input type="text" name="student_id"><br>
コース:<br>
<input type="radio" name="course" value="lv1" checked>入門コース<br>
<input type="radio" name="course" value="lv2">初級コース<br>
<input type="radio" name="course" value="lv3">応用コース<br>
<input type="radio" name="course" value="lv4">特訓コース<br>
会場:<br>
<select name="location" size=4>
<option value="sendai" selected>仙台
<option value="shinagawa">品川
<option value="makuhari">幕張
<option value="kyoto">京都
<option value="osaka">大阪
</select>
<br>
<input type="submit" value="申し込む">
<input type="reset" value="クリア">
</form>
<?
}
?>
<br>
<a href="form-united.php">フォームに戻る</a><br>
</body></html>
|
というか、上2つのサンプルをifブロックとelseブロックをつけて連結しただけ。
これでテクニックと言われてもねえ、
というよーな矯激なツッコミは、全て無効とさせていただきます。(こらこらこら)
(first uploaded 2001/12/24, KQ Taura)
|