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

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

ただいまの
回答率

90.13%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 803

amaguri

score 217

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']);
?>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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


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

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

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

・追記

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


$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 11:27

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

    キャンセル

  • 2016/10/27 11:31

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

    キャンセル

  • 2016/10/27 11:41

    回答に追記しました

    キャンセル

  • 2016/10/27 12:00

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

    キャンセル

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

  • ただいまの回答率 90.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る