前回はアンケートページ操作の枠組みとなる、アンケート入力ページ、確認ページ、そしてお礼ページの切替方法について説明しました。いよいよ本格的なコード記述に入っていきます。PHP のコーディング規則については割愛しておりますので、不明な点があれば PHP のマニュアルを参照してください。
皆さんご存じのとおり、Web ページの構成はざっと以下のようになっています。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmW_rZCU49f6E5GhkthLED9XZFD3jOSSj4WnjgTS3w3WN1L8QGAEeESiQ52e5h8goWXz-z66kPasGGy7gjZrgJhCbMQUB7oGF8j_M5Qr0xJlJ5M5eHA3t0B9HiqcWSfJzP7S_wNg/s400/structure.png)
前回の説明では、本文部分の表示切替について説明したわけですが、実際は、本文を表示する前にヘッダを表示し、本文の表示が終わったところでフッタを表示することによって、Web ページを構成する必要があります。第一回目で、ヘッダとフッタは部品化できると申し上げたとおり、ヘッダとフッタをそれぞれ独立した文字列として変数にセットしておくことで、実際のページ表示を行うときに呼び出して使うことができます。
以下はその部分を取り出したものですが、HTML による Web ページ作成経験がある方なら、この部分は容易に想像できるでしょう。
●ヘッダ部品のソース
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1nGAWz_KScP3pUjpgWSHJTGoBhMV85Us0R_NiC11bPZ3sFtT4lLjv-prhWrw1j-37r-n3SWYSv4YuO7mj3d9RiXM3i37QiFCa0dVCPgwfz4-265OVPIWteX7KmhsUELSwUuqNqw/s400/header_part.png)
ヘッダ中にある $pagetitle は、ページのタイトルを表示するための変数です。入力ページ、確認ページ、お礼ページでタイトルを切り替えることができるため、このようにしておくと便利です。
●フッタ部品のソース
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs6XvazDt1HbOuzbcaZOQXo459o3boraoXE9uId9VebFZjqfx9xdl-o-6FqOPSi3s5vDCnsip91Jw1DwmdMBwOX0VTrn-lFlKGU1Xj1LuQG_lrMVaW62HrwpFtAmyi4B1lHRUP7Q/s400/footer_part.png)
このように部品を用意しておけば、極端な話、PHP コードの中で以下のように記述するだけで一つの Web ページが出来上がります。
echo $header;
echo $footer;
次に、上記のヘッダとフッタの間に入れる本文部分を検討していきます。
1. ステップ 0 (ユーザ入力ページ)
ここでは、入力用のフォームを作っていきます。
フォーム部品(エレメント)は次の 5 つです。
氏名 -- テキストボックス (myname というエレメント名)
email -- テキストボックス (email というエレメント名)
アンケート回答 -- ラジオボタン (answer というエレメント名)
その他回答 -- テキストボックス (otheranswer というエレメント名)
ご意見など -- テキストエリア (memo というエレメント名)
以下は上記を踏まえてフォームを起こすためのコードを PHP で記述したものです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRPSQISZ0GupnjsShk7cNHMn9yiAnmHZv9QV6l0TBtY4uKkZ-WrZXS9pBLY9H6iS5Acy6SK-26hwSn5o7edg8ozC86BAqzyIS7GR0WWdW61CBri3K8P9wiCLXU4TqFdm02EnegMg/s400/input_form0.png)
上記赤で囲った部分がアンケート回答の選択肢を示すラジオボタンです。これですと、アンケート回答の選択肢が増えるたびにラジオボタン行を増やす必要があるため、将来的に非効率といえば非効率です。というわけで、このラジオボタンの部分を可変対応にしてみましょう。
そこで選択肢のリスト作って変数に入れてみます。ここでは $answeroptions という変数にリストを配列としてセットしているところです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCJKi4CUnBtRmEB1_NbBk7FILTS0o50-TINZB2McJ_JOHXDcgD9-_oZSfpBREPa2JYBvAIemds6rShf8B3TRqSd6mXXwnF8dRav07YtHRhpICTEjfJIH0ZTFSjzjO8yU1afRZr7A/s400/answer_choices.png)
そして、ラジオボタンを表示したいところでこの変数($answeroptions)を呼び出して、各項目を取り出します。その加工を行っているのがこの部分です。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgELprpGL3lzEfqq67dOa4T6iTzKVtSYll1O8K53J-wlt8TV383-8TetXQcowWXNm5ds5Md-drJikk-Ay8gRJsxo2swQMNwV85OxL44siu0TOw1gPnTvlrn-DlT71ZTzH7WlFohQQ/s400/radiobuttons.png)
これでデフォルトのページの部品ができあがりました。しかし、これでは各エレメントの value が空欄のため、前回何らかのユーザ入力が行われていたとしても値はページには反映されません。そこで、前回ユーザ入力があった場合にはその値を当該の項目に表示する処理を追加します。
この処理を施すと、次のようになります。赤線部分に注目してください。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3TP4cqTR3E3JImZnDdZhDlziteeNE0nisNFQhVZK_kbXn79G4SYLReCyvvr8Rd2u5RBf8qHbv57hYtLjAs36byxzaLTDfhSXKQu6MFlndzTO8CXlN0CFUuPPYk71gird4PIIU-A/s400/input_form0_fix1.png)
そしてさらに、必須項目である[氏名]欄と[email]欄が正しく入力されているかどうかをチェックして、値が不正の場合には赤字でメッセージを表示するようにします。
その処理を施したものが以下のソースです。赤線部分に注目してください。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9n2-5fOQe_PCev6-unTcK7-D0V0Ze5Y9aFRFvTRbXQABeyCS0E7-PieJxkYQmpFKJ4cjjhZH2Mf20YY8DAS9fHfsnM_LFZuRMtHs-UsK1Ma1wvVz-N9LSqRtudd7WoqFMU6NcDg/s400/input_form0_fix2.png)
入力項目の処理はこれで終わりですが、後は今のステップ番号を次の操作のためにどこかに用意しておく必要があります。
ここでは以下のような隠しエレメントを用意して、そこにステップ番号を入れることにします。エレメントの名前は後で参照しやすいように page_flg としておきます。今回はステップ 0 (ユーザ入力フォーム)なので、設定しておく値は 0 ですね。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuCnCLjqrbMJIo5_XRfZFCd523CJtrz6AzY2q3d4KYfN7XCkkcHGTyb4J4OUgZYOECMgF4xavFIM3mDSrcLYbyXtV0kYb_VMF5Nhydu8DRKPJeZ5TbVkfO8tpRhY4t6hAVm9k5PQ/s400/page_flg.png)
後は送信ボタンとリセットボタンを用意するだけです。
上記を踏まえて、もう一度サンプルコードを見てみてください。
2. ステップ 1 (確認ページ)
このステップは、ステップ 0 に比べると比較的処理が容易です。ここでは、ステップ 0 で入力された値 ($_POST にまとめて入っています)を取り出してページに表示し、ユーザにこの内容でデータベースに送信しても良いか尋ねて、ステップ 2 に入力値を渡すだけです。
まずは入力された値を表示します。この部分は、確認ページとお礼ページの両方で同じものを表示しますので、使い回すことができます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvw_pNy-6tEy3A3cuyF2iIZ7aipqhh40AzIOqUSF_BGOBNIPkoc76AVaL2T9xhFefezv7Lo-mnmeWnL7IUEo43Tnafw6wZ1debdMjzE8Znwa1PRiVev8rSWrEvefy5U024_rLhEA/s400/confirmation1.png)
次に、ステップ 2 (お礼ページ)に渡すためのユーザ入力値を隠しエレメントとしてフォームに用意します。
以下、赤線を引いた箇所が現在のステップ番号を渡しているところです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUpTdiPmC7oZtC8HlcbPw1pWVj7qMdQ3ufdcAp4zfZC141RfvXoUrJOynjkk-zuMf-Z1uggaU7RSwp8ed34Fe8xAtMxbsZNRsj8O6K4ONAQRO0igVHzauFA2FoKjg_4TqqnWX8uA/s400/confirmation2.png)
実際にサンプルコードのソースを開いてみて、この部分を確認してみてください。
残すはステップ 2 です。ステップ 2 では、データベース操作およびメール送信について触れますので、次回詳しく説明いたします。
●まとめ
入力フォームの記述方法とユーザ入力値の表示方法の理解