2015-08-14 140 views
0

我嘗試爲學習目的創建一個簡單的cms。我寫了一個函數來獲取特定類別的帖子。要打印帖子,我使用了一個foreach循環。但我想只在屏幕上使用cat_title一次。應顯示與該cat_title/cat_id相關的所有帖子。我似乎無法得到這個工作。在foreach循環之外使用變量

function get_cat_posts($cat_id, $conn) 
{ 
    $result = $conn->query("SELECT blog_item.id, blog_item.title, blog_item.category_id, blog_item.posted_on, blog_item.content, menu_item.cat_title, menu_item.cat_id FROM blog_item INNER JOIN menu_item ON blog_item.category_id = menu_item.cat_id WHERE menu_item.cat_id= $cat_id"); 
    if($result->rowCount() != 0) { 
     // - category title - 
       foreach($result as $row) {    
           echo '<hr>'; 
           echo '<a href="post_cat_template.php/?category=' .$row['cat_id'] . '?post_id=' .$row['id'] . '">' . $row['title'] . '</a> - <em>' . $row['posted_on'] . '</em>'; 
           echo '<hr>'; 
       } 
    } 
    else { echo "no posts in this category";} 

} 
+1

爲什麼不能你只是回聲'cat_title',然後做'foreach'來顯示你的帖子? – Maxxi

+0

這是我的問題。爲什麼我不能。如果可以,如何? –

回答

1

只要你是if($result->rowCount() != 0) {裏面,你知道$result[0]存在並且,基於SQL,所有的$result具有相同的cat_title,所以你可以這樣做:

function get_cat_posts($cat_id, $conn) 
{ 
    $data = $conn->query("SELECT blog_item.id, blog_item.title, blog_item.category_id, blog_item.posted_on, blog_item.content, menu_item.cat_title, menu_item.cat_id FROM blog_item INNER JOIN menu_item ON blog_item.category_id = menu_item.cat_id WHERE menu_item.cat_id= $cat_id"); 
    if($data->rowCount() != 0) { 
     $result = $data->fetchAll(PDO::FETCH_ASSOC); 
     echo $result[0]['cat_title']; // format as you want 
     foreach($result as $row) {    
           echo '<hr>'; 
           echo '<a href="post_cat_template.php/? category=' .$row['cat_id'] . '?post_id=' .$row['id'] . '">' . $row['title'] . '</a> - <em>' . $row['posted_on'] . '</em>'; 
           echo '<hr>'; 
       } 
    } 
    else { echo "no posts in this category";} 
} 
+0

謝謝。如果我按照你的建議說: 不能使用PDOStatement類型的對象作爲數組 –

+0

我更新了答案(修改了第3行並添加了第5行)。以爲我第一次讀取'fetchAll()'。 – Berriel

+0

謝謝!奇蹟般有效! –