• ベストアンサー

フォームを作る

現在フォームを作成しているのですが、 ふと気になったので質問させてください。 フォームのフローとして 入力→確認→確定 が大体の場合当てはまると思いますが入力チェック等、再利用する処理は別スクリプトに書くとして、 フォーム自体はなるべく1つのファイルで完結させた方がいいのでしょうか? それとも画面ごとにスクリプトを分けるような形がいいのでしょうか? 「そうじゃなくてこうした方が」「自分はこうしてる」等など、 ご意見、アドバイス等よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

確認画面がはさんである以上、最初の入力がされたときに値が正しいか検証をして、その後、確認画面に含まれた値が正しいか再検証を行う必要は必ずあります。(hiddenで含まれた値の書き換え、cookieで与えた場合でも書き換えがありうるし、sessionで引いた場合でも万が一ということもあるので。) そうなると、それらの値のチェックを関数なり検証用クラスなりを使って処理すると思うのですが、 index.php⇒confirm.php⇒thanks.php と遷移する場合、POST先であるconfirm.phpとthanks.phpで同じ検証用プログラムを走らせる必要がある上に、値が間違っていた場合は、confirm.phpでは、index.phpに記述したHTMLをまた含める必要があることを考えると、tom223さんの仰っているようにアクセスされるPHPファイルは一つにしてあったほうがやりやすい気はします。 -------index.php-------- <?php if(strtoupper($_SERVER['REQUEST_METHOD'] == 'POST')){ $flag = validate($_POST); //何らかの入力された文字が正しいかノチェック if(isset($_POST['confirm']) && $flag == true){ //<input type="submit" name="confirm" />が叩かれた場合 require_once '../template/confirm.html'; //入力項目確認画面 }elseif(isset($_POST['submit']) && $flag == true){ //<input type="submit" name="submit" />が叩かれた場合 require_once '../template/thanks.html'; //登録完了画面 }else{ require_once '../template/index.html'; } }else{ require_once '../template/index.html'; //HTMLファイル(通常のフォームのもの)を読み出す } ?> 簡単ですが、こんな感じでしょうか。

k17s
質問者

お礼

回答ありがとうございます。 やはりアクセスするファイルは1つにするのが良い感じなんですね。 恥ずかしながら入力チェックは確認画面でしか行ってませんでした。 これを機に最後の処理の前にもチェックするよう作成する事にします。

その他の回答 (3)

  • tom233
  • ベストアンサー率17% (61/352)
回答No.4

訂正 ワークフレーム ↓ フレームワーク 後既存のフレームワークを使わないまでも自分で使いやすい枠組み作っておけば新規で作る場合も作業的には楽になります。 作成の都度新たに作っていく手間を考えると 0から始めるのと3くらいから始められるのとでは初期の枠組み作業だけでも効率が違います。 また機能を関数やクラスで分けて構築すれば他のシステムでも同じ物が使えますから楽です。

k17s
質問者

お礼

度々のアドバイス有り難うございます。 現在前回頂いた回答を参考に作業させて頂いています。 その作業過程でご指摘頂いたMVCのモデルを使用しようと思い立ったのですが又新たな壁にぶつかってしまいました。 本質問とは趣旨がずれてしまうので、本質問とは別に質問させて頂こうと思うのですが、もしよろしければご回答お願いできますでしょうか? 何より、本質問については非常に参考になりました。 ありがとうございました。

  • tom233
  • ベストアンサー率17% (61/352)
回答No.3

>枠組みはどのフォームも似たり寄ったりなので読み込むライブラリとテンプレートを変えるだけで使い回せそうですね。 参考になります。 まぁ簡易的にMVCぽいものを作っている感じですね。 でこの考えをもっと突き詰めて構築していくとワークフレームって感じになるでしょう。

  • tom233
  • ベストアンサー率17% (61/352)
回答No.1

・プログラムは基本的に一つにまとめる。 >入力→確認→確定 とあった場合、 入力は1 確認は2 確定は3 で「?p=1」などとやる。 でそれをそれぞれ分ける処理がメインとして置いておいて 処理の中身そのものは関数やクラスで別にしておく。 でフォームなどのHTMLはテンプレートエンジンをして独立させておく。 って使い方が自分は多いですかね。

k17s
質問者

お礼

回答ありがとうございます。 なるほど、処理のフローチャート的なスクリプトを作り、 中身は外部のもので埋めていく。という認識でよろしいでしょうか? 枠組みはどのフォームも似たり寄ったりなので読み込むライブラリとテンプレートを変えるだけで使い回せそうですね。 参考になります。

関連するQ&A

専門家に質問してみよう