• 締切済み

CakePHPでテーブルからデータを選択したデータを受け渡し、次ページで表示する動作について

現在CakePHPを使用して研修用の受講登録ページを作成しています。 やりたい事としては、 (1)ページ1でデータベースに入っているコース一覧をテーブルに表示 (2)ページ1で各行にチェックボックスがついており、選択したコースのIDを次ページに受け渡しする。 (3)ページ2で受け取ったデータ(コースのID)を元にFindで検索、テーブルに表示する。 といった感じです。 現在(2)まではできているのですが、(3)の部分でうまくいかずに困っています。 現在の状態は、(2)の部分ではチェックボックスの名前をコースのIDと同じ数字にし選択したチェックの数値と、何件選択したかをカウントしたものを変数に入れてFormにて受け渡しています。 そして、(3)で受け取ったデータを元にFindをかけたいのですが、Findの部分でどういった記述をすればいいのかわからず1週間ほど困っています。 グーグルでFindについて検索をしてみたものの、有効な答えを得られなかったので質問させて頂きます。よろしくお願いします。 なお、現在Findの部分は $conditions = array(  'conditions' => array(   'or' => array( for ($a=0;$a < $kensuu;$a++){ $data = $this->params['form'][$a]; if ($data == 1){ $check = 1; $count++; } if ($check == 1){ $sdata .= array('courceID' => '$a'); $a++; $data = $this->params['form'][$a]; if ($a == $kensuu){ $sdata .= array('courceID' => '$a'); $count++; } $a--; } $check = 0; } //$conditions = $conditions . $sdata; //$conditions .= ",),),);"; $sentakudata = $this->Pobs->find('all', $conditions); $this->set('sentakudata', $sentakudata); と、途中で止まっています。 選択したデータを $conditions = array(  'conditions' => array(   'or' => array( array('courceID' => '○○'), array('courceID' => '○○'), と、いった感じで自動で条件の部分に追加していきたいのです。

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

みんなの回答

回答No.1

ろくにCakePHPを使ったことがないですが、 <?php $conditions = array( 'conditions' => array( 'or' => array( array('courceID', 'xx'), array('courceID', 'xx'), ), ), ); ?> この配列に挿入されるのが目的で、フォームから値の取得は出来ているという前提ですが まず、<input type="checkbox" name="○○">に指定した、「○○」はどのような値ですか? それ次第で回答も変わりますが <input type="checkbox" name="hoge[1]" value="on"> <input type="checkbox" name="hoge[2]" value="on"> ・ ・ ・ <input type="checkbox" name="hoge[10]" value="on"> といった値を挿入したと仮定し、「[]」内の数値がテーブルのidフィールドの値だったとします。 <?php $checkbox_array = $this->params['form']['hoge']; //質問の内容から推測するに // //とりあえず変数conditionsを初期化 $conditions = array( 'conditions' => array( 'or' => array(), ), ); foreach($checkbox_array as $key => $check){ $conditions['conditions']['or'][] = array('courceID'=>$key); } $sentakudata = $this->Pobs->find('all', $conditions); $this->set('sentakudata', $sentakudata); ?> とすれば、いけるのではないでしょうか。 配列に値を追加する場合は、 <?php array_push($array, $data); //とするか $array[] = $data; ?> とすることが出来ます。

関連するQ&A

  • cake php について

    cake php フォームについて View <?php echo $this->Form->create(null,array('type'=>'post','action'=>'./serch')); echo $this->Form->text('serch'); echo $this->Form->end('検索'); ?> Controller //検索機能 public function serch(){ $this->modelClass = null; if ($this->request->is('post')) { $a = Sanitize::stripAll( $this->request->data['serch']); $conditions = array("Manga.title" =>$a); $this-> set('datas',$this->paginate($conditions)); } } で実行すると(いろいろ省いていますが) Undefined index: serch と出ます。色々試してみたのですがどうやら $a = Sanitize::stripAll( $this->request->data['serch']); ここの部分がおかしいみたいなのですが理由が分かりません。 よろしければご教授ください。よろしくお願いします。

    • 締切済み
    • PHP
  • CakePHPでのコメント数表示について

    CakePHPを使って簡単な掲示板を開発しているのですが、トップページに 各トピックについたコメント数を表示させる方法で壁にぶち当たってしまっております。 データの取り出し方及び表示方法について教えて頂ければと思います。 DB構造(モデル)としては、 ==================================== ■掲示板(post.php) テーブル:posts id title contents ■コメント(comment.php) テーブル:comments id post_id comment ==================================== となっており、postsにhasMany、commentsにbelongsToで アソシエーションを貼ってあります。 コントローラー(posts_controller.php)では、 ==================================== $data = $this->Post->find('all',array('order' => array('Post.id' => 'desc'))); $this->set('data',$data); ==================================== という処理を行い、 ビュー(/posts/index.ctp)では、 ==================================== foreach($data as $val){ echo "<tr>"; echo "<td><a href='{$val['Post']['id']}'>$val['Post']['title']</a></td>"; echo "</tr>"; } ==================================== としています。 これで、トップページに行くと掲示板トピックスのタイトルの 一覧は表示できるのですが、その横についたコメント数を表示 させたいのです。 例)掲示板のタイトルです(13) 上記のように(○)とさせたいのです。 コントローラーの所でallではなくcountにすることで件数を取りだす ことができる所まではできるのですが、 $cnt = $this->Post->find('count',array('order' => array('Post.id' => 'desc'))); などとやっても本来取り出したいcommentsではなくpostsの件数を取りだす ことになってしまっています。 また、hasManyを利用すると、 Array( [0] => Array( [post] => Array( [id] => 1 [title] => 掲示板のタイトルです [contents] => 掲示板の内容です [comment] => Array( [0] => Array( [id] => 1 [post_id] => 1 [comment] => コメント1です。 [1] => Array( [id] => 2 [post_id] => 1 [comment] => コメント2です。 ・ ・ ・ となる為、ビューでの表示のさせ方にも困っております。

    • ベストアンサー
    • PHP
  • GridViewからチェックボックスでデータを選択し、次のページへ送信する動作について

    現在VisualWebDeveloper2005にて、セミナーの申し込みページを作成しています。 動作は、コース一覧(GridView)からチェックボックスで受けたいコースを選択し、GridViewの下にある[申し込む]ボタンを押すとGridViewからチェックがついている行のデータ(コースID)を取得し、次ページに送信→次ページでそのIDをもとにGridViewで詳細情報を表示する確認ページを作成したいと思っています。 GridViewの中にチェックボックスを作成し、チェックボックスがオンになっているもののみ、という部分まではプログラムが完成しているのですが、取得したデータを送信→次ページで受け取り表示の部分がわからずに困っています。 チェックした行のデータをSessionに入れようと考えたのですが 'チェックボックスがオンになっている時、その行のIDを取得してテキストボックスに表示 Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) For Each row As GridViewRow In GridView1.Rows Dim cb As CheckBox = CType(row.FindControl("cbSelect"), CheckBox) If cb.Checked Then Session("test") = row.Cells(1).Text Response.Redirect("kakunin.aspx") End If Next End Sub このプログラムだと複数の項目をチェックしても1つしかデータが送信されないのでどうすればいいかわからない状態です。 3日ほどどうすればいいかを検索してみたのですが、良い答えが見つからなかったので質問させていただきます。よろしくお願いします。

  • プルダウンで選択したページにフォームデータを送る

    a.htmlからプルダウンで選択した1~6までのhtmlに、フォームデータを送る ということは可能でしょうか? いろいろ組み合わせたりしていますがうまくいきません。 どなたかご教授お願い致します。 <SCRIPT LANGUAGE="JavaScript"> <!-- function jumpMenu(){ location=(document.link.list.options [document.link.list.selectedIndex].value); } //--></SCRIPT> <SCRIPT LANGUAGE="JavaScript"> <!-- // sendURL = " jumpMenu()"; function sendData() { sData = escape(doument.myFORM.theData.value); Location.href = sendURL + "?"+sData; } //--> </SCRIPT> <form name="myFORM"> <SELECT NAME="list"> <OPTION VALUE="1.html" SELECTED>1</OPTION> <OPTION VALUE="2.html">2</OPTION> <OPTION VALUE="3.html">3</OPTION> <OPTION VALUE="4.html">4</OPTION> <OPTION VALUE="5.html">5</OPTION> <OPTION VALUE="6.html">6</OPTION> </SELECT> <INPUT TYPE="TEXT" SIZE="61" NAME="a"> <INPUT TYPE="submit" VALUE="GO" onClick="sendData()"> <INPUT TYPE="reset" VALUE="クリア">

  • 別のページにデータを送るには?

    JavaScriptで、別のページにデータを送るにはどうしたらよいのでしょうか。 1ページ目でテキストボックスに入力した文字列を、 2ページ目で、あらかじめ用意した文字列と一致するかどうかチェックする、 というのをやりたいのですが、なにぶん初心者なもので、どうも何かに失敗しているらしくうまくいきません。 一応、JavaScript解説のサイトさんを参考にこんなもんを作ってはみたのですが。 1ページ目 <html> <head> </head> <body> <form action="pas2.html" onSubmit="this.box.value=escape(this.box.value)"> <input type=text name=box> <input type=submit value=" 送 信 "> <input type=reset value="リセット"> </form> </body> </html> 2ページ目 <html> <head> </head> <body> <script> val = document.location.search; val = val.split("="); val = unescape(unescape(val[1])); if (val){ if(val==none||val!="pass") val="はずれ" else val="あたり" } else val = "何にも入力されてません。"; document.write(val); </script> </body> </html> これでやってもエラーが出ます…… どうやったらいいのでしょうか。教えてください。

  • テーブル内のチェックボックスを、全て選択、全て解除 したい

    以下のような、フォームの中にあるテーブル内のチェックボックスを一括して選択、解除したいのですが、どのように書けば良いのかが分かりません。 <form name="form1"> <table> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="1">項目(1)</td> </tr> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="2">項目(2)</td> </tr> <tr> <td><input name="array[]" type="checkbox" id="array[]" value="3">項目(3)</td> </tr> </table> </form> ↓これは自分で試したプログラムですが、うまく動きませんでした。 <SCRIPT TYPE="text/javascript"> <!-- var count; function BoxChecked(check){ for(count = 0; count < document.form1.array[].length; count++){ document.form1.array[][count].checked = check; } } //--> </SCRIPT> <INPUT TYPE="button" onClick="BoxChecked(true);" VALUE="全て選択"> <INPUT TYPE="button" onClick="BoxChecked(false);" VALUE="全て未選択"> ↓ここに載っているのを色々変更してみたのですが上手くいきませんでした。 http://www5e.biglobe.ne.jp/~access_r/hp/javascript/js_072.html よろしくお願いします。

  • チェックボックスで選択されたデータをリンク先で表示させる方法。

    チェックボックスで選択されたデータを、 リンク先で表示させる方法を質問させていただきます。 ○やりたい事(以下は例) ページA・・・チェックボックスがあるページ ページB・・・Aのデータを表示させたいページ ・ページAにて。 □1 □2 □3 上の様なチェックボックスを作成し、 ■1 □2 □3(■にチェックをつけているものをします) 上のようにチェックをつけます。 ページAにあるページBへのリンクをクリック、 (このときBへのリンクはフォームの送信ボタンではない) ・ページBにて ページAで選択した項目(この場合は「1」)を、 任意の場所に表示させる。 上記の方法をご存知の方がいましたら教えて下さい。

    • ベストアンサー
    • HTML
  • チェックボックスの表示・非表示 動作

    はじめまして。 初めて掲示板を利用させていただきます。javascriptを勉強しまだ日が浅いのでご存知の方がいらっしゃれば教えてください。 今、チェックボックスを選択し選択した項目がアクティブになるようにしたいのですが、選択項目が重複すると以下のようになってしまいました。 A+AB=AB A+AB+E=ABE 個々までは問題なし。 既に全てのチェックが付いた上体で、ABCE-A=BCE となってしまい、 ABのチェックが入っていても、Aが消えてしまいます。 以下に現在のコードを張ります。 <script type='text/javascript'> <!-- function fchk2(obj, name) { var frm=obj.form; if(obj.checked==true) { /* チェックボックスが選択されている場合は、   テキストボックスを有効化(false)*/ for(var i=1; i<=3; i++){ frm.elements[name+i].disabled=false; } } else { for(var i=1; i<=3; i++){ /* 無効化する前に、入力値をクリア */ if(name=='t'){ /* テキストボックスの場合 */ frm.elements[name+i].value=''; }else{ /* チェックボックスの場合 */ frm.elements[name+i].checked=false; } /* 無効化(true) */ frm.elements[name+i].disabled=true; } } } //--> </script> <form name='form2' action='#'> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t")' checked>A<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"b");' checked>AとB<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"e");' checked>AとE<br> <input type='checkbox' name='chk2' value='1' onclick='fchk2(this,"c");fchk2(this,"e");' checked>CとE<br> <br> A<input type='text' name='t1' value='テキストA'><br> A<input type='text' name='t2' value='テキストB'><br> A<input type='text' name='t3' value='テキストC'><br> <br> B<input type='text' name='b1' value='テキストA'><br> B<input type='text' name='b2' value='テキストB'><br> B<input type='text' name='b3' value='テキストC'><br> <br> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> <br> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </form> よろしくお願いいたします。

  • プルダウンで選択したページから戻った時

    どなたか教えてください。 プルダウンで選択したページにリンクして、そのページから戻ってきた場合、 プルダウンメニューは選択した項目ではなく、一番上に来る項目が選択されているようにしたいのです。 例:--メニュー--    テスト1ページへ    テスト2ページへ ↓をやったら、うまくいったのですがステータスバーに「1」と表示されてしまいました。 <script language="JavaScript"> <!--// function gotosite(site) { if (site != "") { self.location=site } } function init() { status = document.jump.length; for (i=0; i<document.jump.length; i++) document.jump.elements[i].selectedIndex=0; } //--> </script> ちなみにselectのところはこのように書きました。 <form method="POST" name="jump"> <select name="jump" onChange="gotosite(this.options [this.selectedIndex].value)"> よろしくお願いします。どうしても「1」を出したくないんです。 やっぱり無理なんでしょうか?

  • rubyにおけるPOSTされたデータの処理について

    言語はRubyです。 場面としては、railsにPOSTされたパラメータを受け取ってオブジェクトであるdetaを保存しているところです。 #case1 #params = {'a' => 1, 'b'=> 2 ,'c' => 3} #case2 #params = [{'a' => 1, 'b'=> 2 ,'c' => 3}, {'a' => 4, 'c' => 5}] if params.kind_of?(Array) params.length.times do |i| @deta.new if a = params[i]['a'] end if b = params[i]['b'] end if c = params[i]['c'] end @deta.save! end else @deta.new if a = params['a'] end if b = params['b'] end if c = params['c'] end @deta.save! end paramsが配列の可能性がある上、 paramsのハッシュである a, b, c のキーが毎回存在するかわからないので、 if文で例外がでないようにチェックしています。 自分で書いてて冗長な感じがして気持ち悪いです。 なにかよい方法があれば、教えてください。 よろしくお願いします。

    • ベストアンサー
    • Ruby