• 締切済み

cakePHPでFormを使用したDBへの登録

cakePHP初心者です。 ブラウザで入力画面→確認画面→完了画面と遷移して、 DBに入力した値を登録する基本の動きをさせたいのですが、 Controllerの動きが分かりません。 Viewのファイルを 入力画面:entry.ctp 確認画面:confirm.ctp 完了画面:complete.ctp とします。 1.SampleControllerからentryページを表示 public function entry(){ } 2.etntry.ctpでFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> 3.SampleControllerでconfirmメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ データを画面にセット? } } 4.confirm.ctpが表示され、登録ボタンを押すと完了画面にFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'complete')) . PHP_EOL; ?> 5.SampleControllerでcompleteメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ バリデーションチェック後、DBに登録? } } この流れでよいのでしょうか。 完了画面のcompleteでバリデーションチェックを行うことに違和感を感じています。 仮にconfirmで実施するとしても、書き方が良く分かりません。 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> と書いたら、3の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

みんなの回答

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.1

confirmアクションは作らない方法はいかがでしょうか。 ◼︎entryアクション 通常遷移ならフォームを表示 entry.ctpをrender(入力画面) 確認ボタン押下したら自分自身にpost 確認ボタンのpostがあればバリデーション バリデーションOKでconfirm.ctpをrender(確認画面) hiddenに入力された値を持っておきます。 postされた値をhtmlspecialchars()(cakephpだとh()だったかな)でエスケープしてから表示します。 戻るボタン押下でjsでhistory.back() 登録ボタン押下で自分自身にpost 登録ボタンのpostがあれば model->save()メソッドでDBに保存 保存できたらcompleteアクションに遷移 ◼︎completeアクション complete.ctpをrender(完了画面) このような流れでどうでしょう。 余談:フォーム周りはセキュリティをしっかり意識しましょう。 XSS、 SQLインジェクション、CSRFあたり勉強されるとよいとおもいます。

hizumin
質問者

お礼

同じfunctionを指定して、hiddenで画面ごとに識別する値をpostすることで自己解決できました。 ありがとうございます。 ひとまず動くようになったら、SQLインジェクションなども対応していこうと思います! ご回答ありがとうございました!!

関連するQ&A