2015-08-14 3 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

Почему косяк вы просто echo '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

спасибо! работает как шарм! –

Смежные вопросы