IF语句在视图中不触发

时间:2012-11-08 16:34:26

标签: php codeigniter

所以我在我的控制器中有这个代码块(我知道,db的东西应该在模型中..我会在那里工作后转移它)。在数据库中搜索“订阅”并在视图中回显。这样可行。但是,在我看来,我想添加一个IF语句,如下面的第二个代码块 - 但它不起作用。建议?换句话说,您如何在视图中编写IF语句?很确定query部分不正确......

    // displays current subscription in view
    $userid = $this -> session -> userdata('user_id');

    $this -> db -> select('subscription');
    $this -> db -> where ('id', $userid);
    $query = $this -> db -> get('subscriptions');

    if($query -> result() == TRUE) // if subscription exists for user, display:
    {
        foreach ($query->result() as $row)
        {
            $data['packagename'] = $row->subscription;
        } 
    } 

在视图中:

    <?php if($query -> result() == TRUE) : ?>
    <? echo $packagename; ?>
    <?php endif ?>

3 个答案:

答案 0 :(得分:5)

$query->result()不返回布尔值,它返回一个数组ob对象。

要检查查询是否返回结果,请使用num_rows()

if($query->num_rows() > 0){
    foreach ($query->result() as $row){
    }
}

此外,您不应将$query对象传递给视图,而是使用isset查看变量是否存在:

<?php if(isset($packagename)): ?>
    <?php echo $packagename; ?>
<?php endif ?>

答案 1 :(得分:5)

让您的数据库逻辑远离您的视图,这就是模型的用途。如果您已将$ packagename传递到视图中,为什么不直接测试呢?

<?php if ( isset($packagename) ) : ?>
    <? echo $packagename; ?>
<?php endif; ?>

或者,如果你可以使用short_open_tags:

<? if ( isset($packagename) ) : ?>
    <?= $packagename ?>
<? endif; ?>

答案 2 :(得分:1)

基于我从您的代码中看到的内容,我感觉您认为您在控制器中使用的任何变量都会在您的视图中自动显示。不是这种情况。您应该在控制器中设置变量并执行逻辑,并将您想要显示的内容传递给视图。

这是你的控制器应该是这样的:

// displays current subscription in view
$userid = $this -> session -> userdata('user_id');

$this -> db -> select('subscription');
$this -> db -> where ('id', $userid);
$query = $this -> db -> get('subscriptions');

if($row = $query -> result()) // if subscription exists for user, display:
{
        $data['packagename'] = $row->subscription;
}

$this->load->view("yourview", $data);

您不需要foreach,因为您只需要一个记录。

然后,在您的视图中,只需显示如下:

<?php if (!empty($packagename)) echo $packagename;?>