IF语句在视图中不触发

Mik*_*ick 0 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;
        } 
    } 
Run Code Online (Sandbox Code Playgroud)

在视图中:

    <?php if($query -> result() == TRUE) : ?>
    <? echo $packagename; ?>
    <?php endif ?>
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 5

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

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

if($query->num_rows() > 0){
    foreach ($query->result() as $row){
    }
}
Run Code Online (Sandbox Code Playgroud)

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

<?php if(isset($packagename)): ?>
    <?php echo $packagename; ?>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud)


dtr*_*enz 5

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

<?php if ( isset($packagename) ) : ?>
    <? echo $packagename; ?>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

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

<? if ( isset($packagename) ) : ?>
    <?= $packagename ?>
<? endif; ?>
Run Code Online (Sandbox Code Playgroud)