図3●アンケート入力画面
リスト3
図4●都道府県名の選択リストを表示したところ。
最初の行は空白になっている

ポイント2
表示する情報が変わる場合はプログラムでフォームを作る

 では,いよいよプログラムでHTMLフォームを作る話に移りましょう。リスト1と2のプログラミングを規定演技と呼ぶならば,ここからは自由演技です。自由演技では作り手のクリエイティビティが要求されるので,じっくりコードを見てくださいね。

 リスト2のラストで呼び出すアンケート入力画面(図3[拡大表示])のコードが,リスト3(enqin.php)です。やや長いですが,がんばってリスト1と見比べてみてください。

 (3)の部分で,入力された値が妥当かどうかをJavaScriptを使ってチェックしているのはリスト1にはないところです。ほかには,(4)でユーザーがフォームで入力/選択した値を再描画する処理を実装している部分も異なります(後述)。

 しかしそれ以上に違う点があります。それはリスト3では,(5)の<form>タグ以降を,すべてprintステートメントで出力している点です。実はこれが,「PHPプログラムでHTMLフォームを作る」ということなのです。

 前述したように,いつも決まった内容を表示する画面なら,リスト1のようにHTMLタグの中に<?php~?>で囲んでPHPスクリプトを埋め込めばいいでしょう。しかしアンケート画面の「今月号の良かった記事」のように,随時変わる情報を表示する場合は,プログラムでHTMLフォームを作ったほうがよいと筆者は考えています。その理由は,

●データベースの値を表示する「選択リスト」を作れる
●データベースの値に応じて,チェックボックスやラジオボタンを作れる

という二つのメリットがあるからです。

ポイント3
データベースの値を選択リストに表示する

 では最初に,「選択リスト」をどう実装しているのかを見てみましょう。図3の真中あたりに「都道府県名」という選択ボックスがありますね。ここでは都道府県名を,<select>タグを使って選択リストにして表示しています。コードで言うと,リスト3[拡大表示]の(6)の部分になります。(6)では<select>タグのname属性がeprefになっています。つまり画面上で都道府県名を「千葉県」などと選択すると,その値の「キー(添え字)」となる都道府県コード(千葉県なら12)がeprefに格納されるというわけです。このように「データベースから値を取り出して選択リストに表示し,ユーザーがその値を選ぶと,その値のキーが得られる」ような処理を実装するのであれば,プログラムの出番です。

 (8)のwhileループを見てください。

while (list($key,$val) =
each($prefary))

eachは配列から「キー(添え字)」と「値」のペアを取り出して配列のカーソルを次に進める関数,listは複数の変数に一括して値をセットする関数です*10。「$prefaryには何が入っているの?」――おっと失礼しました。$prefaryには(2)のコードによって,(1)のma2ary.php内に定義したpref2ary関数の実行結果が格納されています。誌面ではコードを紹介していませんが,pref2ary関数は,「県名テーブル(preftb)」から都道府県コードと都道府県名を抽出して連想配列*11にして返すようになっています。

 つまりここでは,$prefaryから都道府県コード($key)と都道府県名($val)を取り出して<option>タグを使った選択リストを生成し(10),その結果,図4[拡大表示]のような都道府県名のリストを表示しているわけです。(7)の部分で,"<option value='0' ></option> \n"という値をprintしているのは,初期状態(何も選択されていない状態)を作るためです。



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

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