对于每个内部其他每个视图MVC PHP

我正在尝试为我的代码提供结构,我正面临一个问题。
我正在循环 sql查询响应和我试图检索其他相关元素的每个元素。 它在我的控制器中工作没有问题,但是当我试图在视图中重复时,我总是得到相关元素的相同值</ p>

我的控制器:</ p>

 &lt;?php 
include_once('class / guide.class.php');
$ bdd = new DBHandler();
$ req = guide :: getGuides($ bdd,0,5 );

foreach($ req as $ results =&gt; $ poi)
{
$ req [$ results] ['id'] = htmlspecialchars($ poi ['id']);; \ n $ req [$ results] ['name'] = nl2br(htmlspecialchars($ poi ['name']));

$ guide = new guide($ results ['name'],$ bdd);
$ guidePois = $ guide-&gt; getGuidePois($ poi ['id']);
foreach($ guidePois as $ res =&gt; $ re)
{
echo $ guidePois [$ res] ['id'];
echo $ guidePois [$ res] ['name'];
$ guidePois [$ res] [ 'id'] = htmlspecialchars($ re ['id']);
$ guidePois [$ res] ['name'] = nl2br(htmlspecialchars($ re ['name']));

}
}

include_once('listing.php');
</ code> </ pre>

在这里,您看到我回显相关列表的ids /名称 元素和它运行良好,输出对于第一个列表的每个元素都是正确的。</ p>

当我在我的视图中执行此操作时:</ p>

 <  code>&lt;?php 
foreach($ req as $ poi)
{
?&gt;
&lt; div class =“news”&gt;
&lt; h3&gt;
&lt;?php echo $ poi [ 'ID']; ?&gt;
&lt; em&gt;:&lt;?php echo $ poi ['name']; ?&gt;&lt; / em&gt;
&lt; / h3&gt;
&lt;?php foreach($ guidePois as $ re)
{
?&gt;
&lt; h4&gt;
&lt;?php echo $重新[ '身份证']; ?&gt;:
&lt;?php echo $ re ['name']; ?&gt;
&lt; / h4&gt;
&lt;?php
}
?&gt;
&lt; / div&gt;
&lt;?php
}
?&gt;
</ code> < / pre>

不知何故,第一个列表输出是好元素,但对于第二个列表,我总是得到第一个项目的相关元素。</ p>

你是 有个主意吗?</ p>

非常感谢您的帮助</ p>
</ div>

展开原文

原文

I'm trying to give structure to my code and i am facing a problem. I'm looping through a sql query response and for each element i'm trying to retrieve other related elements. It works in my controller without problem but when i'm trying to repeat in the view I always get the same value for the related element

My controller:

<?php
include_once('class/guide.class.php');
    $bdd = new DBHandler();
    $req = guide::getGuides($bdd,0,5);


foreach ($req as $results => $poi)
{
    $req[$results]['id'] = htmlspecialchars($poi['id']);;
    $req[$results]['name'] = nl2br(htmlspecialchars($poi['name'])); 

    $guide = new guide($results['name'],$bdd);
    $guidePois = $guide->getGuidePois($poi['id']);
    foreach ($guidePois as $res => $re)
    {
        echo $guidePois[$res]['id'];
        echo $guidePois[$res]['name'];
        $guidePois[$res]['id'] = htmlspecialchars($re['id']);
        $guidePois[$res]['name'] = nl2br(htmlspecialchars($re['name']));    
    }
}

include_once('listing.php');

here, you see that I echo the ids/names of the related list of element and it works well, the output is correct for each element of the first list.

When i do it in my view:

<?php
foreach($req as $poi)
{
?>
<div class="news">
    <h3>
        <?php echo $poi['id']; ?>
        <em>: <?php echo $poi['name']; ?></em>
    </h3>
    <?php foreach($guidePois as $re)
    { 
        ?>
        <h4>
        <?php echo $re['id']; ?>:
        <?php echo $re['name']; ?>
        </h4>
    <?php 
    } 
    ?>
</div>
<?php
}
?>

Somehow the first list output are the good elements, but for the 2nd list, i always get the related elements of the first item.

Do you have an idea ?

Thanks a lot for your help

du0531
du0531 看看答案:你错过了在视图的每次迭代中设置$guidePois,所以它使用的是控制器中首先设置的原始值。
接近 4 年之前 回复
dsg41888
dsg41888 :在控制器中,显示好的值,在视图中,它始终是第一个项目的相关值
接近 4 年之前 回复
douhuang3833
douhuang3833 添加echo'<pre>'。print_r($guidPois,TRUE)。'</PRE>';在$guidePois=$guide->getGuidePois($poi['id'])之后;在您的控制器中以及在您的视图中<?phpforeach($guidePoisas$re)之前....他们输出相同的东西吗?
接近 4 年之前 回复
dousui8263
dousui8263 我修改了显示完整的控制器
接近 4 年之前 回复
dsa111111
dsa111111 你能发布一下Controller如何调用View吗?难以使用部分代码进行调试。
接近 4 年之前 回复
douqihua6212
douqihua6212 我在发布这里之前修改了几个变量之后犯了这个错误,但不幸的是如果我把<?phpforeach($guidePoisas$re),同样的问题发生了,我编辑了我的问题!
接近 4 年之前 回复
dongxin8709
dongxin8709 也许与$$有关,与$res不一样?
接近 4 年之前 回复

1个回答



这是因为你只设置:</ p>

  $ guidePois = $ guide-&gt  ; getGuidePois($ poi ['id']); 
</ code> </ pre>

一次在控制器中。</ p>

如果你想要它 在视图中工作,您需要在结束&lt; / h3&gt; </ code> </ p>

 &lt;?php $ guidePois = $ guide之后立即插入此代码  - &GT; getGuidePois($ POI [ 'ID']);  ?&gt; 
</ code> </ pre>

这样$ guidePois在每次迭代中都会获得一个新值。</ p>

完整的视图代码:</ p >

 &lt;?php 
foreach($ req as $ poi)
{
?&gt;
&lt; div class =“news”&gt;
&lt; h3&gt; \ n&lt;?php echo $ poi ['id']; ?&gt;
&lt; em&gt;:&lt;?php echo $ poi ['name']; ?&gt;&lt; / em&gt;
&lt; / h3&gt;
&lt;?php
$ guidePois = $ guide-&gt; getGuidePois($ poi ['id']);
foreach($ guidePois as $ re)
{
?&gt;
&lt; h4&gt;
&lt;?php echo $ re ['id']; ?&gt;:
&lt;?php echo $ re ['name']; ?&gt;
&lt; / h4&gt;
&lt;?php
}
?&gt;
&lt; / div&gt;
&lt;?php
}
?&gt;
</ code> < / pre>
</ div>

展开原文

原文

This is because you only set:

$guidePois = $guide->getGuidePois($poi['id']);

once in the controller.

If you want it to work in the view, you need to insert this code right after the closing </h3>

<?php $guidePois = $guide->getGuidePois($poi['id']); ?>

So that $guidePois gets a new value in each iteration.

Complete view code:

<?php
foreach($req as $poi)
{
?>
<div class="news">
    <h3>
        <?php echo $poi['id']; ?>
        <em>: <?php echo $poi['name']; ?></em>
    </h3>
    <?php 
    $guidePois = $guide->getGuidePois($poi['id']);
    foreach($guidePois as $re)
    { 
        ?>
        <h4>
        <?php echo $re['id']; ?>:
        <?php echo $re['name']; ?>
        </h4>
    <?php 
    } 
    ?>
</div>
<?php
}
?>

donglongqiao9595
donglongqiao9595 高科技,谢谢你的回答。 我只是想用这个项目刷新我的基本PHP知识,现在我将重新开始使用Symfony。
接近 4 年之前 回复
dqlhsm9820
dqlhsm9820 一般说明:为什么要为循环中的每个子项调用查询? 在您的数据库服务器上运行的查询数量比在您调用时最初加入数据时要多得多:$ req = guide :: getGuides($ bdd,0,5); 另外,您是否看过PHP框架中提供的较新模板工具,例如Laravel中的Blade模板? 使更清洁的代码不必使用<? php标签和回声一直...
接近 4 年之前 回复
dongzhuang1923
dongzhuang1923 非常感谢你,这应该是一个教训!
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐