0

次のコードでは、2 つの個別の foreach ループが実行されています。最後に、2 番目の foreach ループの直後に $row->websiteURL を出力しています。問題は $row->websiteURL が最初のループの一部であることです。そのため、コードを実行すると次のエラーが発生します。

PHP エラーが発生しました

重大度: 通知

メッセージ: 未定義のプロパティ: stdClass::$websiteURL

ファイル名: views/projects.php

ライン番号: 135

" target="_blank">

2 番目の foreach が完了した後、最初の foreach ループを続行するにはどうすればよいですか?

<table style="width: 41%">
<?php   $query  = $this->db->query("SELECT * FROM projects ORDER BY idprojects DESC");
        foreach ($query->result() as $row) { ?>
    <tr>
        <td style="height: 15px">
        <div class="auto-style2">
            <em><span class="auto-style1"><?=$row->projectName?></span></div>
        <table cellpadding="5" style="width: 535px; height: 66;">
            <tr>
                <td class="box1" style="height: 49px; width: 800px;">
        <table cellpadding="0" cellspacing="0" style="width: 466px; height: 185px">
            <!-- MSTableType="layout" -->
            <tr>
                <td valign="top" style="width: 225px">
            <em>
        <table style="width: 100%">
            <tr class="box1">
                <td class="innerbox" style="height: 88px"><em><span class="text1">Project name</span>:
                <span class="underlined-link"><?=$row->projectName?></span><br>
                <span class="text1">Description</span>: <?=$row->projectDesc?><br><span class="text1">Start 
                date</span>: <?=$row->startDate?><br><span class="text1">Finised date</span>: 
                <?=$row->finishedDate?><br><span class="text1">Created for</span>: 
                <?=$row->createdFor?><br><span class="text1">Contributers</span>:
                <span class="underlined-link"><?=$row->contributors?></span></em></td>
            </tr>
        </table>
        </em></td>
                <td style="width: 12px">&nbsp;</td>
                <td valign="top" style="height: 185px; width: 229px">
            <em>
<?php           $query  = $this->db->query("SELECT * FROM screenshots ORDER BY idscreenshot DESC");
                foreach ($query->result() as $row) { ?>
                <img alt="" src="<?=$row->screenshotURI?>" width="231" height="187"></em>&nbsp;</td>
            </tr>
<?php } ?>
        </table>
                <br>
                <a style="text-decoration:none" href="<?=$row->websiteURL?>" target="_blank"><div class="link1">
                    View This Product</div></a>
                </td>
            </tr>
        </table>
        </em></td>
    </tr>
<?php } ?>
        </table>
4

1 に答える 1

1

次のように、2 番目の foreach で変数を変更する必要があります。

 $query  = $this->db->query("SELECT * FROM screenshots ORDER BY idscreenshot DESC");
                foreach ($query->result() as $row2) { ?>
                <img alt="" src="<?=$row2->screenshotURI?>" width="231" height="187"></em>&nbsp;</td>

$row 変数はまだスコープ内にあり、最初のクエリでこれを探しています。内側の foreach ループを実行している場合、"item" 変数に外側の foreach と同じ名前を付けることはできません。

さらに要点:

foreach($arr as $row):
   foreach($arr as $row2):
      //do something
   endforeach;
 endforeach;

もっと大きな問題に戻りましょう。ビューでデータをクエリするべきではありません。データはモデルで操作されます。コントローラーはモデルをロードし、モデルを使用して情報を取得し、その情報をビューに渡します。MVC を初めて使用する場合、理解するのが難しい概念になる可能性があります。これが機能するようになったら、これらのクエリをモデル内の独自の関数に移動し、その方法で情報を取得することに集中してください。

于 2012-04-18T22:00:42.500 に答える