2012-11-08 74 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