0

所以我在我的控制器中有这个代码块(我知道,数据库的东西应该在模型中......一旦工作我会把它转移到那里)。在数据库中搜索“订阅”并在视图中回显。这样可行。但是,在我看来,我想添加一个 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 ?>
4

3 回答 3

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 ?>
于 2012-11-08T16:38:19.583 回答
5

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

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

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

<? if ( isset($packagename) ) : ?>
    <?= $packagename ?>
<? endif; ?>
于 2012-11-08T16:39:07.973 回答
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);

您不需要 a foreach,因为您通过 ID 提取 - 您只需要一条记录。

然后,在您看来,只需像这样显示它:

<?php if (!empty($packagename)) echo $packagename;?>
于 2012-11-08T16:41:47.857 回答