• 締切済み

cakePHPについて

現在、cakePHPを勉強しているのですが、分からなくて進めない箇所があり困っています。 ユーザーがフォームからデータを入力し、DBにデータを格納する際、フォーム項目にないデータを一緒に入力するためにはどうすればいいのか分かりません。 例)ユーザーフォーム入力欄 name email password ↓ ■DB側に格納したいデータ id(AUTO_INCREMENT) contact_id(問題箇所) name email password created modified 現在、下記のようなコードになっているのですが、ご教授頂ければ幸いです。 ■Controller/RequestController public function index(){ if(!empty($this->request->data)){ if($this->request->data[$this->Request->alias]['confirmed']){ //保存実行 //成功時に画面遷移・失敗時にメッセージを表示 if($this->Request->saveAll($this->request->data)){ $this->Session->setFlash('お申し込み有難う御座います。新規依頼が完了しました。'); $this->redirect(array('action' => 'index','controller' => 'details')); }else{ $this->request->data[$this->Request->alias]['confirmed'] == false; $this->Session->setFlash('新規依頼に失敗しました。'); } }else{ if($this->Request->saveAll($this->request->data, array('validate' => 'only'))){ //saveALLは値をまとめて保存するモデルメソッドだけど('validate' => 'only')にすることで //保存処理を行わずにバリデーションのみを実行することができます //入力データに問題がなかった場合は確認画面を呼び出し $this->render('confirm'); }else{ $this->Session->setFlash('エラーがあります。入力内容をご確認下さい。'); } } } }

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.2

無理やりですが、こんな感じでrequestデータの配列に値を入れてやれば良いです。 $this->request->data["Request"]["contact_id"] = "123456";

noname#247307
noname#247307
回答No.1

<input type="hidden">でフォームに用意しておいてはいかがですか。

関連するQ&A

  • CakePHPでのフォームデータの受け渡しについて

    CakePHPでフォームから送られてきたデータは$this->dataに格納されていますが、フォームから送られてきた$this->dataを「フォームの送信先」以外で使うにはどのようにしたら良いのでしょうか? $this->set('test', $this->data); $this->redirect(array( 'action' => 'confirm' )); などとして、confirmで$testをprしてみたのですが、この方法では送られないようです。 よくある、申込フォーム→確認画面、のようなものを作りたいのですが、バリデーションを行う都合もあり申込フォーム自身をフォーム送信先に指定しており、完全に内容が入力された状態になったら確認画面に移行する、というイメージなのですが、この「確認画面」にフォーム送信値の$this->dataを引き継ぐ方法がわかりません。 解決法をご存知の方、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHPでvalidateのメッセージの表示

    バリデーションで設定したエラーメッセージをsetFlashで表示したいのですが、 エラーメッセージ(下記のhoge)を取得する方法はありますか? CakePHP 2x Model public $validate = array( 'username' => array( 'rule' => 'notEmpty' 'message' => 'hoge' ) ); Controller $this->Session->setFlash('test'); $this->redirect('index');

    • 締切済み
    • PHP
  • CakePHP2について

    viewにデータを送るときに、1の $this->set() と2の $this->request->dataは、 どう違うのでしょうか? ご教授ください。 public function view($id = null) { // レコードを選択 $this->Post->id = $id; // レコードデータを取得しビューへ送る $this->set('post', $this->Post->read());---------1 } public function edit($id = null){ $this->Post->id = $id; if($this->request->is('get')) { $this->request->data = $this->Post->read();-------2 }

    • ベストアンサー
    • PHP
  • CakePHP 1.3について

    CakePHPが初心者です。 Views-userdetail-index.ctpにて <?php echo $form->create(null,array('type'=>'get','action'=>'./updateRecord')); ?> ~ <?php echo $form->textarea("User.remarks", array("cols" => 22,"rows" => 2)); ?> ~ を記述し、userdetail_controllerにて function updateRecord(){ if (!empty($this->data)){ $this->User->id = 1; $this->User->saveField('remarks','exists'); } else { $this->User->id = 1; $this->User->saveField('remarks','empty'); } $this->redirect('.'); } を記述しています。 しかし、どうしても「!empty($this->data)」の判別によってemptyとなってしまいます。 User.remarksの部分をUserdetailにして色々ためしましたが、どうしても値の受け渡しがうまくいかないのです。 どなたかご教授を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHPのsyntaxエラーについて

    お世話になります。 CakePHPでサイト構成をしています。 教本に従ってコードを書いています。 最も簡単なサイトを作るという章で、MyPagesContorllerを作り、Viewにindex.ctpとedit.ctpを作り、ModelにUser.php、 ContollerにUsersController.phpを作りました。 ユーザーの一覧表示まで出来ましたが、編集機能を作るところでつまずいてます。 UsersController.php <?php class UsersController extends AppController { //モデルの指定(users) public $uses = array('User'); //レイアウトの指定(defaultの場合はなくても動作する) public $layout = 'default'; //indexアクション public function index () { $userData = $this->User->find('all'); //Viewにデータを送る $this->set('userData', $userData); } } //editアクション public function edit($id = null) { if($this->request->isPost() || $this->request->isPut()) { if(!empty($this->data)) { if($this->User->save($this->data)) { $this->Session->setFlash('保存しました'); $this->redirect(array('action' => 'index')); return; } } 下記の様なエラーが表示されてしまいます。 Error: syntax error, unexpected 'public' (T_PUBLIC) 本にある通りに記述して、何度も確認しましたが間違いが見つけられません。 写真に添付しているline20の前後を見ても特にミスは無い様に思えます どこが間違っているのでしょうか。。。 ちなみにeditアクションのソースを消すと、エラーは表示されません。 どなたかご教授頂けないでしょうか。 宜しくお願いいたします。

  • Ifが正常に動作しない。

    下記のコードで、login.htmlからデータを適当に入力し てかえってくる処理が全て、空の表示になってしまう。 Ifが正常に動作しません、正常に動作するようにするにはどうすればいいのでしょうか? <login.html> <html> <body> <table> <tr> <td>id:</td> <td><input type="text" name="id"></td></tr> <tr><td>password:</td> <td><input type="password" name="pass"></td></tr> </table> <form methed="post" action="http://session.asp"> <input type="submit" name ="sb" value="login" > </form> </body> </html> session.asp <html> <body> <% if session("id")="" Or session("id")= null then if request("pass")="" Or request("id")= null then response.write "空" elseif request("pass")= "1234" then session("id")="login" response.write "ログインしました。" else response.write "違う" end if else response.write "ログインしました" response.write session("id") end if %> </body> </html>

  • cakephpのバリデーションについて。

    cakephpのバリデーションについて。 windowsxp環境にxamppをインストール php:5.3.1 cakephp:1.2.6 mysql:5.1.41 書籍を読みながらcakephpを始めました。 現在 フォームで入力された項目に該当する データをmysqlのデータベースで検索後、 結果をビューに表示するものを作っています。 フォームヘルパーを使用し、inputされたデータを コントローラ側で受け、その値をモデルで検索後 ビューへ渡しています。 このようなデータベースに保存は行わない検索だけの場合 フォームに入力されたデータをcakePHPのバリデーション機能 を利用してチェックできるのでしょうか? ビューでは $form->input('form.text1'array('label'=>'検索対象1')); $form->input('form.text2'array('label'=>'検索対象2')); としています。 このform.text1とform.text2について未入力の場合など エラーチェックが行いたいです。 そもそもこのような場合のエラーチェックは コントローラーに処理を記述しバリデーションは利用しないのかなど、 どなたかアドバイスいただけると助かります。

    • ベストアンサー
    • PHP
  • ログイン処理ができません。

    ただいまPHPを勉強している者です。 ログインしてマイページにとぶという事をやっているんですがうまくできません。 どなたかアドバイスいただけたらうれしいです。 *ソース* <?php //MySQLファイルのインクルード require_once("data/dbinfo.php"); session_start(); $_SESSION["my_no"]=0; $_SESSION["name"]=""; $_SESSION["mail"]=""; $error=""; $usr_mail =""; $usr_password=""; //POSTされた場合 if($_SERVER["REQUEST_METHOD"]=="POST"){ //ログインボタンが押された場合 if(isset($_POST["login"])){ //POSTされたデータを取得する //mail $usr_mail=htmlspecialchars($_POST["usr_mail"], ENT_QUOTES); //password $usr_password=htmlspecialchars($_POST["usr_password"], ENT_QUOTES); //入力内容をチェックする //mail if(strlen($usr_mail)==0){ $error="メールアドレスが入力されていません。"; } if(strlen($usr_password)==0){ $error="パスワードが入力されていません。"; } //エラーがなければ if(strlen($error)==0){ //registerテーブルをチェックする //registerのmailと入力usr_mailの一致を探す $mysql->query("SELECT * FROM register WHERE mail='$usr_mail'"); //行が存在した場合 if($mysql->rows()>0){ $row = $mysql->fetch(); //さらにパスワードの一致を確認 if($row["pass"] == $usr_password){ //セッションに格納する $_SESSION["my_no"]= $row["no"]; $_SESSION["name"]=$row["name"]; $_SESSION["mail"]=$usr_mail; //クッキーを保存 //mailを保存 setcookie("cooking[usr_mail]",$usr_mail); //passを保存 setcookie("cooking[usr_password]",$usr_password); //マイページへとぶ $login_url = "http://{$_SERVER["HTTP_HOST"]}/reservation/mypage.php"; header("Location: {$login_url}"); exit; } }else{//行が存在しない場合 $error = "メールアドレスかパスワードに誤りがあります"; } } } } ?> <html> <head></head> <body> <form action="<?=_SERVER["PHP_SELF"]?> method="post"> <td><b><i>*メールアドレス</i></b></td> <td><input type="text" name="usr_mail" value="<?=$usr_mail ?>" size=30></td> </tr> <tr> <td><b><i>*PASS</i></b></td> <td><input type="password" name="usr_password" value="<?=$usr_password ?>" maxlength="8"></td> </tr> </table><br> <input type="submit" name="login" value="ログイン"> </form> </body> </html> という感じなんですが・・・・

    • 締切済み
    • PHP
  • 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の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

    • 締切済み
    • PHP
  • 買い物かご機能

    商品.phpでは echo $syou= '<strong>商品名:</strong>'.$row['syou'].'<br/>'; echo $kakaku='<strong>価格:</strong> '. $row['kakaku'] . '<br />'; この値を session_start(); $_SESSION['gazou']=$gazou; if (isset($_SESSION['syou']) && is_array($_SESSION['syou'])) { $_SESSION['syou'][]=$syou; } else { $_SESSION['syou'] = array(); } $ardata = array("シャツ1","ぼろシャツ"); if (isset($_SESSION['kakaku']) && is_array($_SESSION['kakaku'])) { $_SESSION['kakaku'][]=$kakaku; } else { $_SESSION['kakaku'] = array(); } $ardata = array("100円","80円"); このようにセッションして 買い物カゴ.phpで print_r ($_SESSION['syou']); print_r ($_SESSION['kakaku']); と表示させてます。 ところが、このシステム 一個しか買い物カゴに入らないんです。一回入れた物は保存し、ずっと削除するまで表示していて欲しいのですが、どうしたら良いでしょうか??できればセッション主体で行いたいです。

    • 締切済み
    • PHP

専門家に質問してみよう