質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

2275閲覧

cakephp this->setでデータが渡せているのに表示ができない

amaguri

総合スコア227

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2016/10/27 00:59

layoutにデータを渡しているのですが最後の行のprint($para['database']);で表示ができず困っています。
layoutにデータが渡せれていることは確認済みです。
プルダウンのボタンに表示させたいのですがそれが原因なのでしょうか?
まったく表示できず何が原因かわからず困っています。

<?php class EntityController extends AppController { var $name = 'Entity'; var $components = array('RequestHandler','Auth','Common'); var $user; function index() { $this->Entity->setDataSource('hive'); //パラメータ解析 if ( isset($this->params['url']['database_id']) ){ $p_database_id=$this->params['url']['database_id']; }else{ $p_database_id="default"; } if ( isset($this->params['url']['table_id']) ){ $p_table_id=$this->params['url']['table_id']; }else{ $p_table_id=""; } if ( isset($this->params['form']['filter']) ){ $p_filter=$this->params['form']['filter']; }else{ if ( isset($this->params['url']['filter']) ){ $p_filter=$this->params['url']['filter']; }else{ $p_filter=""; } } if ( !file_exists(DIR_ENTITY."/data/${p_database_id}/table/${p_table_id}.dat") ){ $p_table_id=""; } //CLEARボタンクリック if ( isset($this->params['form']['clear_x']) or isset($this->params['form']['clear_y'])){ $p_database_id="default"; $p_table_id=""; $p_filter=""; } //GOボタンクリック if ( isset($this->params['form']['x']) or isset($this->params['form']['y'])){ $p_table_id=""; } ////////////////////////////////////////////////////////////////// //データベース一覧SQL ////////////////////////////////////////////////////////////////// $sql ="select * from DBS;"; $dbs= $this->Entity->query($sql); //debug($result); $this->set('dbs', $dbs); }

layoutのentity.ctp

<html> <head> <title>hive configuration</title> <link href="/WebHive/css/main.css" rel="stylesheet"> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" > <a name='page_top'></a> <?php echo $this->element('banner'); ?> <table width="100%" height="100%" cellspacing="0" cellpadding="0"> <tr height="5" bgcolor="#dfe9f6" class="noprint"> <td colspan="2"> <table width="100%"> <tr> <td align="left"> <?php echo APP_TITLE ?><?php echo $app_title_msg; ?> </td> <td align="right"> <br> <?php echo $user['User']['username']."さん"; ?>&nbsp;&nbsp; |<a href='/WebHive/users/logout'>LOGOUT</a> |<a href='/WebHive/'>WebHive</a> |<a href="/WebHive/help" onclick="window.open('/WebHive/help','_blank','width=900,height=500,scrollbars=yes'); return false;">変更履歴</a>| </td> </tr> </table> </td> </tr> <tr class="noprint"> <td bgcolor="#efefef" colspan="1" height="8" style="background-image: url(/WebHive/img/shadow_gray.gif); background-repeat: repeat-x; border-right: #aaaaaa 1px solid;"> <img src="/WebHive/img/transparent_line.gif" width="200" height="2" border="0"><br> </td> <td bgcolor="#ffffff" colspan="1" height="8" style="background-image: url(/WebHive/img/shadow.gif); background-repeat: repeat-x;"> </td> </tr> <tr> <td valign="top" style="padding: 5px; border-right: #aaaaaa 1px solid;"> <script type="text/javascript"> <!-- function applyGraphPreviewFilterChange(objForm) { strURL = '?action=preview'; strURL = strURL + '&database_id=' + objForm.database_id.value; strURL = strURL + '&table_id=' + objForm.table_id.value; strURL = strURL + '&filter=' + objForm.filter.value; document.location = strURL; } --> </script> <table width='100%' style='background-color: #f5f5f5; border: 1px solid #bbbbbb;' align='center' cellpadding='3'> <tr bgcolor="E5E5E5" class="noprint"> <form name="form_graph_view" method="post"> <td class="noprint"> <table width="100%" cellpadding="0" cellspacing="0"> <tr class="noprint"> <td nowrap style='white-space: nowrap;' width="40"> &nbsp;<strong>Database:</strong>&nbsp; </td> <td width="1"> <select name="database_id" onChange="applyGraphPreviewFilterChange(document.form_graph_view)"> <?php foreach($dbs as $name){ $p_database=$name['DBS']['NAME']; $para['database']=$p_database; debug($para['database']); } print($para['database']); ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php

1 foreach($dbs as $name){ 2 $p_database=$name['DBS']['NAME']; 3 $para['database']=$p_database; // ※1 4 debug($para['database']); 5 } 6 print($para['database']); // ※2

$dbsをforeachで回しているという事は複数レコードを取得する前提でそうされているのだと思うのですが、
※1の部分で$para['database']にデータベース名?を入れていますが、複数レコード取得した場合毎回上書きになり
最終$para['database']には最後のレコードのものしか残らないように思います。
複数レコードの場合、たとえば5件あった場合、debugには5件表示されるがprintでは最後の1件しか表示されないのでは?と思うのですが、そういう不具合ですか?

それともそもそもdebugにもprintにもなにも表示されないですか?

あと一点、このforeach文はselectタグの中にありますので仮にprintで文字列が出力されてもoption要素として出力しないとselectボックスのoptionとしては出力されないと思います。

・追記

php

1 foreach($dbs as $name){ 2 $p_database=$name['DBS']['NAME']; 3 $para['database']=$p_database; 4 //debug($para['database']); 5 printf("<option value=\"%s\">%s</option>",$para['database'],$para['database']); 6 }

$para['database']に値がセットされている前提とすると上記のようなコードになると思います。
printfはforeachの中に入れました

もしこれでも表示されないのであれば$para['database']、つまり$name['DBS']['NAME']にデータが渡ってきていないという事になりますのでその場合は
まずdebug($dbs)やvar_dumpでも良いのでlayoutで$dbsに値が入っている事を確認する。
それもOKであれば次にdebug($name)でどういう配列になっているか確認した上で$name['DBS']['NAME']のようなキーで大丈夫か確認する、という流れになると思います。ただし、このあたりを確認するときはselectタグはコメントし、プレーンに表示されるようにされた方が見やすいかと思います。

投稿2016/10/27 01:49

編集2016/10/27 02:41
hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/10/27 02:27

debugにも表示されずprintにもなにも表示されない状態です。 調べてみたのですが確かにセレクトと作っているやつをオプションで設定していなかったのでそのせいではないかと思いました!
amaguri

2016/10/27 02:31

やりたいこととしては $sql ="select * from DBS;"; $dbs= $this->Entity->query($sql); $this->set('dbs', $dbs); で取得したデータをoptionかしないといけないのですね。。
hiim

2016/10/27 02:41

回答に追記しました
amaguri

2016/10/27 03:00

表示できました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問