За последние 24 часа нас посетили 17855 программистов и 1624 робота. Сейчас ищут 1036 программистов ...

Вывод просмотра количества комментариев на странице без id

Тема в разделе "PHP для новичков", создана пользователем olga_0630, 16 фев 2018.

  1. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, не смогла разобраться в данном моменте, просьба помочь.

    1. Ранее была страница blog.html и несколько блоков <div>, где имелась ссылка на страницу с комментариями, т.е на странице blog.html, в каждом из блоков делала вывод количества комментариев, таким образом :
    PHP:
    1. $res=mysqli_query($connect,"SELECT count(id) FROM comment WHERE theme_id='info-1' and moderation=1");
    2.     $num_comm=mysqli_fetch_array($res);
    3.     echo '<div class="comment">Комментариев - <a href="article.php#comment" title="Перейти к комментариям">'.$num_comm[0].'</a></div>';
    Присваивала каждой странице свой theme_id и все отлично работает.

    2. Решила все перекинуть в БД и данный код не работает или работает коряво.
    Использую цикл do-while, где в начале делаю выборку, но у меня получается, сверху в коде сразу 2 выборки из разных таблиц.

    PHP:
    1. $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='$id'");
    2. $comm_num = mysqli_fetch_array($res_num);
    3.  
    4. $res_rows=mysqli_query ($connect,"SELECT id, img, title, description, date, refer FROM log");
    5. $num_rows=mysqli_fetch_array($res_rows);
    6.  
    7. do {                          
    8. printf ("<div class='post'>
    9.         <div class='entry'>
    10.             <img src='%s' width='170' height='150'> <!-- изображение -->
    11.            
    12.             <h2><span class='gradient'>%s</span></h2> <!-- название -->
    13.                
    14.             <blockquote><p>%s</p></blockquote> <!-- описание -->
    15.            
    16.             <div class='post-info'>
    17.                
    18.                 <h5>Дата: %s &nbsp; <!-- дата -->
    19.                     <p><a href='article.php?id=%s'>%s</a></p>
    20.                 </h5>
    21.  
    22.                 <div class='comment'>Комментариев - <a href='article.php?id=%s'>%s</a></div>
    23.  
    24.             </div> <!-- post-info ends -->
    25.         </div> <!-- entry ends -->
    26.     </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $comm_num['0']);                      
    27. }
    28.  
    29. while ($num_rows = mysqli_fetch_array($res_rows));
    т.е имеется страница article.php со своим id, где находятся комментарии и если пробовать там сделать просмотр количества комментариев, то проблем нет, код описанный в 1 пункте работает, но если я пытаюсь выводить общее число комментариев не на странице article.php, а на странице blog.php без id для каждой статьи со своим id, то возникает проблема как правильно сделать выборку из таблицы comment, который я пыталась реализовать в пункте 2.

    На скрине, 1 из блоков на странице blog.php, где нужно вывести количество комментариев. В данный момент на всех блоках Комментариев - 0.

    img.png

    Заранее благодарна всем откликнувшимся, Ольга.
     
  2. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    1) Используй цикл while
    2) Можешь сделать запрос на количество в цикле
    3) не работает у тебя потому что запрос вот этот у тебя достает по id
    PHP:
    1. $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='$id'");
    а так как там выводятся все записи $id не существует.
     
  3. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо, за ответ. У меня к вам просьба. Не могли бы вы, пожалуйста, подробнее разъяснить.
    C php пока на начальном уровне и не получается некоторые моменты реализовать.
    Заранее благодарна, Ольга
     
  4. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    PHP:
    1. $res_rows=mysqli_query ($connect,"SELECT id, img, title, description, date, refer FROM log");
    2. while($num_rows=mysqli_fetch_array($res_rows)){
    3.     $res_num = mysqli_query ($connect, "SELECT COUNT(id) FROM comment WHERE post='{$num_rows['id']}'");
    4.     //тут пошло все дальше твое
    5. }
    это работать будет но, лучше сделать один запрос на выборку и количества и данных а не в цикле. Кто знает как сделать такой запрос подскажите ей, мне тоже будет интересно.
    С уважением, Виктор
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    чур вас чур, учить в цикле использовать запросы - невероятное зло
    а запрос такой нужен
    Код (Text):
    1. SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM log AS l
    2. LEFT JOIN comment AS c ON c.post = l.id
    3. GROUP BY l.id
     
  6. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Ну вот и я о том же, просто незнал как по другому сделать. Вот и написал подпись.
     
  7. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    ЗАПРОСЫ В ЦИКЛЕ = ОТРУБИТЕ РУКИ ЕМУ !
     
  8. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Да я смотрю ты читать не умеешь... Ну ладно бывает.
     
  9. ZlobnyKolob

    ZlobnyKolob Активный пользователь

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    не будь таким серьёзным :D
     
  10. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    :)
     
  11. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Здравствуйте, разобралась. Спасибо.

    Данный цикл с постусловием работает, код :
    PHP:
    1. $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc");
    2. $num_rows=mysqli_fetch_array($res_rows);
    3.  
    4. do {                        
    5. printf ("<div class='post'>
    6.         <div class='entry'>
    7.             <img src='%s' width='170' height='150'> <!-- изображение -->
    8.          
    9.             <h2><span class='gradient'>%s</span></h2> <!-- название -->
    10.              
    11.             <blockquote><p>%s</p></blockquote> <!-- описание -->
    12.          
    13.             <div class='post-info'>
    14.              
    15.                 <h5>Дата: %s &nbsp; <!-- дата -->
    16.                     <p><a href='article.php?id=%s#link' class='right-blog'>&#10141;&nbsp;%s</a></p>
    17.                 </h5>
    18.  
    19.                 <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div>
    20.  
    21.             </div> <!-- post-info ends -->
    22.         </div> <!-- entry ends -->
    23.     </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']);                      
    24. }
    25.  
    26. while ($num_rows = mysqli_fetch_array($res_rows));
    Но правильней было бы использовать цикл с предусловием, пробовала так :

    PHP:
    1. $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc");
    2.  
    3. while($num_rows=mysqli_fetch_array($res_rows)) {
    4.   printf ("<div class='post'>
    5.  <div class='entry'>  
    6.  <img src='%s' width='170' height='150'> <!-- изображение -->
    7.  
    8.  <h2><span class='gradient'>%s</span></h2> <!-- название -->
    9.  
    10.  <blockquote><p>%s</p></blockquote> <!-- описание -->
    11.  
    12.  <div class='post-info'>
    13.  
    14.  <h5>Дата: %s &nbsp; <!-- дата -->
    15.  <p><a href='article.php?id=%s#link' class='right-blog'>&#10141;&nbsp;%s</a></p>
    16.  </h5>
    17.  
    18.  <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div>
    19.  
    20.  </div> <!-- post-info ends -->
    21.  </div> <!-- entry ends -->
    22.  </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']);    
    23. }
    В запросе я использую цикл while, что как я поняла нехорошо, подскажите как сделать запрос без цикла.
    Просьба извинить, но работала только с циклами пока, поэтому нужна помощь.

    Как вариант, так можно ?
    PHP:
    1. $number = mysqli_num_rows($res);
    2. for ($n=1; $n<=$number; $n++) {
    3.     $comments=mysqli_fetch_array($res);
    4.     // Оформление и вывод
    5.     echo '<h3>'.$comments['title'].'</h3>';
    6.     echo '<div>'.$comments['text'].'</div>';
    7. }
    Заранее благодарна.
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    неверно понимаете, я сказал в цикле не желательно использовать запросы - то есть производить их
    вы не в запросе while используете - а для отработки его результата - это норм
    но обычно для отображения результатов запросов - используют перебор всех значений с помощью foreach
     
  13. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо за ответ,
    У меня ещё к вам есть 1 вопрос и 1 просьба.

    1. Лучше использовать цикл с предусловием while или особой разницы нет, если применять цикл с пустословием do-while ?
    2.
    У меня большая просьба, не могли бы вы на моём примере показать, как использовать foreach, так как где-то читала что цикл (do) while нецелесообразно использовать (так ли это ?)

    Сейчас у меня следующий код :
    PHP:
    1. $res_rows=mysqli_query ($connect,"SELECT l.id, l.img, l.title, l.description, l.date, l.refer, COUNT(c.id) AS cnt FROM dpn_log AS l LEFT JOIN dpn_comment AS c ON c.post = l.id GROUP BY l.id ORDER BY id desc");
    2.  
    3. while($num_rows=mysqli_fetch_array($res_rows)) {
    4.     printf ("<div class='post'>
    5.         <div class='entry'>
    6.             <img src='%s' width='170' height='150'> <!-- изображение -->
    7.            
    8.             <h2><span class='gradient'>%s</span></h2> <!-- название -->
    9.                
    10.             <blockquote><p>%s</p></blockquote> <!-- описание -->
    11.            
    12.             <div class='post-info'>
    13.                
    14.                 <h5>Дата: %s &nbsp; <!-- дата -->
    15.                     <p><a href='article.php?id=%s#link' class='right-blog'>&#10141;&nbsp;%s</a></p>
    16.                 </h5>
    17.  
    18.                 <div class='comment'>Комментариев - <a href='article.php?id=%s#comment' title='Перейти к комментариям'>%s</a></div>
    19.  
    20.             </div> <!-- post-info ends -->
    21.         </div> <!-- entry ends -->
    22.     </div> <!-- post ends -->", $num_rows['img'], $num_rows['title'], $num_rows['description'], $num_rows['date'], $num_rows['id'], $num_rows['refer'], $num_rows['id'], $num_rows['cnt']);                      
    23. }
    Как тут поменять и использовать конструкцию foreach ?
    Заранее спасибо благодарна за ответ, Ольга.
     
  14. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    У них разные цели применения. do {} while() - если код в блоке должен быть выполнен минимум один раз. В случае while() {} - код в блоке может быть не выполнен ни разу.
    В Вашем случае, если запрос вернет пустой набор - будут неприятности...
    2. Цикл foreach предназначен для обхода массива. mysqli_query возвращает не массив.
     
  15. olga_0630

    olga_0630 Новичок

    С нами с:
    16 фев 2018
    Сообщения:
    47
    Симпатии:
    0
    Спасибо.