図1●パスワード入力画面からアンケート入力画面へ遷移するときに使うPHPスクリプト
図2●パスワード入力画面
リスト1
リスト2
 このPHP*1プログラミング連載のお題は日経ソフトウエアの巻末に付いている読者アンケートを,Webアンケート・システムにしよう,というものです。

 第1回目である前回は,システムに必要なデータベース(DB)のテーブルについて説明し,そのうちの一つ「プレゼント・テーブル(pretb)」をメンテナンスする画面や内部処理を作成しました。データベースのアクセスにPEAR*2を使うことや,入力チェックにJavaScript*3を使うことなど,初めてPHPに触れた人にはちょっと盛りだくさんの内容だったかもしれませんね。

 でも心配はご無用。今回も,じっくり進めます。テーマは,ブラウザ上で名前やアンケートの回答を入力する画面,「HTMLフォーム」の作成です。「HTMLフォームって,要するにHTMLの<form>タグを使った画面のことでしょ。それなら,ホームページ作成ツールを使えば済むのに」――いえ,違うのです。「プログラムでHTMLフォームを作ると,いろいろ便利ですよ」というのが今回の筆者の主張なのです。――その話に入る前に,まずはプログラムを使わないでHTMLフォームを作る方法について見ておきましょう。

ポイント1
常に変わらない画面は
HTMLタグでフォームを作る

 前回説明した通り,今回作成するWebアンケート・システムでは,最初に本誌のどこかに印刷してある10桁のパスワードを入力させます*4。プレゼント欲しさに,本誌を買わずにアンケート入力されるのを防ぐためです。

 さて,PHPのプログラミングに着手。と,その前に「プログラムはシンプルに分割しよう」という前回の説明を思い出してください。そこで,パスワード入力からアンケート入力までの処理を,

(1)パスワード入力画面(enqpwd.php)
(2)パスワードをDBに問い合わせる処理(enqpwdsub.php)
(3)アンケート入力画面(enqin.php)
(4)入力結果をDBに書き込む処理(enqinsub.php)

の四つのシンプルなPHPスクリプトに分割することにしましょう(図1[拡大表示])。

 さて,ここで登場する二つの画面(1)と(3)をどう作ればよいでしょう? ついさっき筆者は,HTMLフォームをPHPプログラムで作ると便利,と言いましたが,「すべてのHTMLフォームをプログラムで作ろう」と主張するわけではありません。表示する情報が常に同じ内容であるのなら,HTMLタグをそのまま書いたほうがシンプルだし簡単です。例えば(1)のパスワードを入力する画面は,テキスト入力欄が一つだけあればいいHTMLフォームです(図2[拡大表示])。パスワードが毎月変わっても,フォームそのものを変える必要はありません。

 そこで図2のHTMLフォームを表示するコードとして作成したのがリスト1[拡大表示]です。PHPのコードは,セッションを開始するためのsession_start*5だけ(1)。それ以外はすべてHTMLタグで構成しています。(2)の<form>タグのaction属性には,入力されたパスワードをDBに照会するスクリプトenqpwdsub.phpを指定しています。これにより,(3)の<input>タグで入力されたパスワードの値が変数frmpasswdに格納されて,(4)のsubmitボタンを押すとenqpwdsub.phpに渡されるようになります。

 呼び出されるenqpwdsub.phpを見てみましょう(リスト2[拡大表示])。こちらは,「コントロール・テーブル(contb)」に格納されたパスワードのデータ*6と,入力されたパスワードが一致するかどうかをチェックする処理になります。

 (1)は,リスト1で開始したセッションをリスト2でも使うよ,と指示するコードです。(2)(3)では,require_once関数*7を使って,DBアクセス用にPEARが用意しているDBクラス(DB.php)と,今回別途作成したdsn.php*8をそれぞれ読み込んでいます。これにより,DBクラスの各種メソッドや,dsn.phpに記述したget_dsn関数を利用できるようになります。

 実際にデータベースenqdbに接続するのは(4)の部分です。(5)は,contbからパスワード(cpasswd)を取得するSQL*9文。(6)でこのSQL文を実行しています。getOneは,SQL文を実行して,最初の行の最初の列の値,つまり値を一つだけget(取得)するメソッドです。

 (7)はブラウザに入力されたパスワードが,contbから取得したパスワードと一致するかどうかをチェックするif文。一致したら入力されたパスワードをセッション配列に格納し(8),アンケート入力画面(enqin.php)を呼び出します(9)。

 ここまで見てきたように,フォームの表示内容を変える必要がない場合は,ほとんどHTMLタグだけで構成したファイルと,そこで入力された値を処理するPHPのファイルを作れば,入力処理を実装できるわけです。



金宏和實(かねひろ・かずみ)氏

株式会社イーザー代表取締役副社長。
富山県高岡市在住。