2012-11-08 103 views
0

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

// 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 ?> 
+1

然后,在你看来,就这样显示呢? – Darrrrrren

回答

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因为你是通过ID拉 - 你只想要一个记录。在哪里你通过`$ data`阵列的视图

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

嗨Darrrrrren,这正是我以前的。但如果结果不正确,我不想在视图中显示任何内容。 –

+1

在这种情况下,摆脱控制器中的'else'并输出'<?php if(!empty($ packagename))echo $ packagename;?>' – Darrrrrren

+1

您应该将数据库内容保留在模型中,而不是控制器。 –

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 ?> 
5

保持你的数据库逻辑出你的观点,那就是什么型号适用。如果你已经在你的视图中传递了$ packagename,为什么不简单地测试呢?

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

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

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

请勿使用短打开标签。 [成为一名更好的PHP开发人员](http://jason.pureconcepts.net/2012/08/better-php-developer/)。 –

+0

最简单的答案!奇迹般有效! –

+0

短打开标签存在的原因。如果您无法控制或预测PHP环境,则不应使用短开标签。如果您确实控制了服务器/环境,或者该环境可靠地支持短打开的标记,那么为什么不使用它们。如果您将简短的开放式标签与其他语法组合在一起,PHP就是一种很好的模板语言无论如何,出于这个原因,我首先提出了NON short open tag版本。 – dtrenz