解 説

*解答はHTMLコード、HTML&PHPコードと書かれたところをクリックすると表示されます。

問題 次のサンプルのように「PHP実習 (3)入力フォームで入力されたデータを確認付きで表示」を変更して、確認画面から入力フォームに戻ってもデータを保持するようにしましょう。
サンプル ここでは入力フォームをPHPにしてセッションで保存したデータを受け取れるようにします。
HTML&PHPコードフォーム
HTML&PHPコード(確認ファイル)
HTML&PHPコード(最終表示ファイル)

解説

セッションを利用することでフォームで入力されたデータをページを跨いで保存できます。
けれども、確認のページから入力フォームに戻ると全てのデータはクリアされてしまいます。
この実習ではこの間もデータが保持されるような仕組みを作ることがねらいです。
とはいえ、セッションを利用している以上データはページを跨いで保管されています。
ということは、入力フォームで保管されたデータを受け取る仕組みを作ればよいことになります。
そこで入力フォームもPHPファイルにしてしまいます。

  1. session_start()関数でセッションを開始
  2. 次にフォームの部品の値にセッションの値を格納します。
    次のようにして値をいれます。
  3. セレクトメニューやラジオボタン、チェックボックスはforeach文を使用して配列のデータを取り出します。
  4. その他のファイルは特に編集の必要はありませんが、確認ページの戻るをクリックしたら今作成したphpファイルにリンクを変更するだけです。最終ページの変更はありません。

さて、ここで問題になるのが入力フォームのリセットボタンです。input type=”reset”を使用してもそれはリセットされるだけで、valueの値にセッションの値が代入されてしまいます。
そのため、リセットの役割を果たせなくなるのです。

ここではリセットではなくjavascriptの値は「無し」を代入することで対応しています。
onClick=”clearFormAll()”としてイベントハンドラを仕掛けておきます。
clearFormAll()は入れ子状態で2つの関数を呼び出し、DOMを操作してそれぞれの入力boxの値を空白にします。
for文でDOMを使って得たform内の要素のtype属性をswich文で判定してそれぞれの値に見合った空白状態、あるいは選択なしの状態を作り出しています。