Codeigniter 2.1 - 使用foreach循环爆炸

时间:2012-08-14 09:46:42

标签: php codeigniter

我以一种简单的方式解释这个问题有点困难,所以解释会很长。 用户可以投票,如果评论是否有用(简单的是或否),当他这样做时,他的投票将发送到数据库 - >表'user_vote'。

user_vote 有两列 - user_id和container。每个用户在此表中只有一行。当他投票时,更新了现场容器。例如,用户对 id 205 的评论进行投票,并投票,对于 ID为300 的评论,他投了即可。 表 user_vote 将如下所示:

user_id-> 111;

容器 - > 205-是,300没有

这个工作正常,直到这里的代码,我需要检查用户是否对特定评论进行了投票。这里的代码部分工作 - 问题如下:

用户是否投了3次​​,如果评论的 id $ split [0] 匹配,则会一次写 $ text ,它将产生2组按钮,如果评论的 id 不匹配,它将产生3组按钮(部分在 elseif 之后正常工作)。

我做错了什么,如何以正确的方式编写代码?

<div class="zuta_strana_komentar_korisno" data-id="<?php echo $cmm['id_comment'] ?>">
    <?php if(isset($glas) && !empty($glas)) : 
    $br = explode(',', $glas->container);
    foreach($br as $br) :                                  
    $split = explode('-', $br);
    if($split[0] == $cmm['id_comment']) : ?>
    <?php 
    if($split[1] == 'yes') :
    $text = 'koristan.';
    else :
    $text = 'nekoristan.';
    endif;
    ?>
    <p>Ovaj komentar vam je bio <?php echo $text ?></p>
    <?php else :?>
    <p>Da li vam je ovaj komentar bio od pomoći?</p>
    <button role="yes">Da</button><button role="no">Ne</button>
    <?php 
    endif;
    endforeach;             
    elseif($this->session->userdata('is_logged_in') == TRUE && empty($glas)) : ?>
    <p>Da li vam je ovaj komentar bio od pomoći?</p>
    <button role="yes">Da</button><button role="no">Ne</button>
    <?php endif ?>
    </div>

3 个答案:

答案 0 :(得分:1)

您从根本上不正确地设计数据库。良好的数据库设计不会使用字段中的逗号分隔列表来存储信息。通过将数据存储在逗号分隔列表中,您实质上会使所有数据库的查询功能无效。使用表格,这就是你给他们的原因!

我建议创建表格:userscommentsvotes

users表包含idusername ...以及其他字段

comments表包含idbodyuser_id ...以及其他字段

votes表包含idcomment_iduser_idyes_or_no ...以及其他字段

然后了解如何正确使用SQL Joins

答案 1 :(得分:0)

你所要做的就是改变

$br = explode(',', $glas->container);
foreach($br as $br) :                                  

$br_lines = explode(',', $glas->container);
foreach($br_lines as $br) :                                  

但是你真的需要先将PHP逻辑与HTML分开。它看起来很可怕,我的眼睛想要流血。

答案 2 :(得分:0)

试试这段代码:

<?php if(isset($glas) && !empty($glas)) {
    $br = explode(',', $glas->container);
    foreach($br as $b) {                                  
       $split = explode('-', $b);
       if($split[0] == $cmm['id_comment']) {
       ?>
       <p>Ovaj komentar vam je bio <?php echo ($split[1] == 'yes')?'koristan.':'nekoristan.'; ?></p>
       <?php } else {?>
       <p>Da li vam je ovaj komentar bio od pomoći?</p>
       <button role="yes">Da</button><button role="no">Ne</button>
       }
    }
}