[PHP-users 26678] Re: (無題)

tommy tommy @ asobicreate.com
2005年 8月 29日 (月) 10:26:37 JST


富沢です。

>       補足ですが,hidden 渡しをする場合,「毎ページ」で「全要素に対し
>     て」 validateしなければなりません(比較的容易に改ざんできるため)そ
>     こを注意しましょう.

この補足を受けて・・・長くなるので割愛しましたが、最初の質問のように画面
ごとにスクリプトは別けず、一つのスクリプトで全部処理し、入力チェックなどを
共通化します。変数として画面IDを持って、次の画面に渡します。3つの画面
が入力画面、確認画面、そして登録終了の画面と仮定すると

・初期化ブロック
 ページの初期化をここでまとめて行います。
・入力ブロック
 画面IDが一番最初であれば、値の初期化、それ以外はGETなりPOSTなり
 の値を読んで、文字コードの変換とか下処理をする。
・入力チェックブロック
 画面IDが一番最初の時だけパス。それ以外の時全部で入力項目が規則に
 合ってるかチェック。エラーがあればエラーフラグを立てて画面IDを入力画面
 に戻す
・DB登録ブロック
 画面IDが登録終了でエラーフラグが立ってない時のみ。DB登録処理など。
・表示ブロック
 画面IDに従って画面の表示。エラーフラグが立っていれば該当エラーメッセ
 ージも表示

とこんな流れにしています。ぢょ〜さんがおっしゃる通り、hiddenで値を継いで
いく方法を取る場合、トンでもない値がいつ来てもおかしくない、と考えて組む
必要があります。

僕はテンプレートエンジンを使って画面とスクリプトを完全に別けているので、
表示ブロックで表示を別けるのはテンプレートを差し替えるだけという前提条
件が違うかも知れません。

入力項目が多く、入力が数ページに及ぶ場合でもこの応用でページを増やす
だけです。スクリプトもブロックごとに役割がはっきり別れているのでわかりや
すくなりますよ。また、このようなスタイルが確立していると、別なフォームを組
む時も前に作ったフォームをコピーして、中身をちょっと書き換えるだけで一丁
上がり、っていうのも、とっても大きいメリットです(笑)。

PHPセッションは色々と制約がありますので(途中でタイムアウトになった場合も
常に想定しなきゃならないし)、受け渡しする変数が極端に多い場合以外は
あまり使わないです。





PHP-users メーリングリストの案内