За последние 24 часа нас посетили 93619 программистов и 6243 робота. Сейчас ищут 2003 программиста ...

Обмен данными между страницами

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

  1. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Есть две страницы blog.php и comments.php, на странице blog.php заметки, а на странице comments.php комментарии к заметке и должна отображаться сама заметка, если у заметки нет комментария, то вывести об этом сообщение. Я связал две страницы по id, а как записать условие проверки, что комментарий к заметке отсутствует и вывести саму заметку по которой перешел?
    PHP:
    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html; charset=utf8" />
    4. <title>Мой блог</title>
    5. </head>
    6. <body>
    7. <?php require_once 'Connections/mysitedb.php';
    8. include ("menu.html");
    9. $link = mysqli_connect($hostname_mysitedb, $username_mysitedb , $password_mysitedb, $database_mysitedb)
    10.     or die("Ошибка " . mysqli_error($link));
    11. $link->set_charset("utf8");
    12. $query ="SELECT * FROM notes ORDER BY id DESC";
    13. $result = mysqli_query($link, $query);
    14. ?>
    15. <h1><center>Добро пожаловать!</center></h1>
    16. <?php
    17. while ($query = mysqli_fetch_array($result)){
    18. echo $query['id'], "<br>";
    19. ?>
    20. <a href="comments.php?query=<?php echo $query['id']; ?>">
    21. <?php echo $query ['article'], "<br>";?></a>
    22. <?php
    23. echo $query ['created'], "<br>";
    24. echo $query ['title'], "<br>";
    25. }
    26. ?>
    27. </body>
    28. </html>

    Страница comments.php


    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Комментарий</title>
    6. </head>
    7. <body>
    8. <?php $query_id = $_GET['query']; require_once 'Connections/mysitedb.php';
    9. include ("menu.html");
    10. $link = mysqli_connect($hostname_mysitedb, $username_mysitedb , $password_mysitedb, $database_mysitedb)
    11.     or die("Ошибка " . mysqli_error($link));
    12. $link->set_charset("utf8");
    13. $query ="SELECT  * FROM comments WHERE $query_id = art_id";
    14. $result = mysqli_query($link, $query);
    15. ?>
    16. <h1><center>Комментарии</center></h1>
    17. <?php
    18. while ($query = mysqli_fetch_array($result)){
    19. echo $query['id'], "<br>";
    20. ?>
    21. <a href="comments.php?query=<?php echo $query['id']; ?>">
    22. <?php echo $query ['comment'], "<br>";?></a>
    23. <?php
    24. echo $query ['created'], "<br>";
    25. echo $query ['author'], "<br>";
    26. }
    27. ?>
    28. <h1><a href="editnote.php?query=<?php echo $query_id; ?>">Исправить заметку</a>
    29. <p><a href="deletenote.php?query=<?php echo $query_id; ?>">Удалить заметку</a>
    30. </body>
    31. </html>
     

    Вложения:

  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Не можете простое ветвление состряпать? Если $count (или num_rows), выводим список, иначе «нифига нет».

    Ну выберите данные заметки отдельным запросом по id и выводите.

    Многовато косяков. Это реальный сайт?
    --- Добавлено ---
    Если реальный, лучше возьмите какой-нибудь каркас. Даже самый простой будет лучше, чем это, например гляньте мою статью Как сделать вывод списка статей? Комменты могут выводиться точно так же. Контент статьи может выбираться автоматом. Точно так же, как «Краткое пояснение к списку» статей.
     
  3. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Сайт реальный, но пока на стадии реализации:oops:. Получается вместо while, использовать проверку через if?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Для вывода сообщения, о котором вы спрашивали, да. Но для комментов это вовсе необязательно, поэтому можете ограничиться одним циклом. Если комментов нет, то цикл будет холостым.
    --- Добавлено ---
    Главное не дернуть при этом 404-ую и т.п., о чем я писал в этом комменте. Но вам до этого далеко.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    И не вместо while, а в дополнение к while, если вы о списке комментов (процитировали всю портянку, поэтому хз, о чем вы). Для отдельной статьи до шаблона статьи вообще дело не должно доходить, если нет данных для вывода, хотя где-то в глубинах кода наверняка должен быть if, причем не один, потому что проверять нужно не только наличие затребованной записи в выборке, но и др. вещи, например результат запроса. Но вам опять-таки до этого далеко.
     
  6. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Проверку на наличие комментария к заметке сделал, но не выводит сообщение, что запись не комментировали... А чтобы вывести заметку на страницу comments.php мы в запросе используем id, который передали со страницы blog.php или я что-то не понимаю?
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Комментарий</title>
    6. </head>
    7. <body>
    8. <?php $query_id = $_GET['query']; require_once 'Connections/mysitedb.php';
    9. include ("menu.html");
    10. $link = mysqli_connect($hostname_mysitedb, $username_mysitedb , $password_mysitedb, $database_mysitedb)
    11.     or die("Ошибка " . mysqli_error($link));
    12. $link->set_charset("utf8");
    13. $query ="SELECT  * FROM comments WHERE $query_id = art_id";
    14. $result = mysqli_query($link, $query);
    15. ?>
    16. <h1><center>Комментарии</center></h1>
    17. <?php
    18. if ($result > 0) {
    19. while ($query = mysqli_fetch_array($result)){
    20. echo $query['id'], "<br>";
    21. ?>
    22. <a href="comments.php?query=<?php echo $query['id']; ?>">
    23. <?php echo $query ['comment'], "<br>";?></a>
    24. <?php
    25. echo $query ['created'], "<br>";
    26. echo $query ['author'], "<br>";
    27. }
    28. }else {echo "Эту запись еще не комментировали";}
    29. ?>
    30. <h1><a href="editnote.php?query=<?php echo $query_id; ?>">Исправить заметку</a>
    31. <p><a href="deletenote.php?query=<?php echo $query_id; ?>">Удалить заметку</a>
    32. </body>
    33. </html>
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Фигово сделали, вот и не выводит. Выше я писал, что обычно проверяют при такой проверке.

    Откуда берется id, дело десятое. Главное, чтобы он был и корректный. В моем примере числовые id статей в адресах не светятся вообще (вместо них используются слаги). Вам же нужно тщательно проверять id перед его использованием в запросах и т.п. Иначе могут подсунуть хз что. И в результате вместо выборки записи может быть грохнута вся таблица и т.п. Читайте про SQL-инъекции.
    --- Добавлено ---
    Демку видели к статье? Используемый каркас позволяет хранить в поле id «таблицы объектов» как числовые id, так и слаги.
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    P.S. Даже если бы я использовал числовые id в адресе, после выборки идентифицируемой сущности из БД я бы уже использовал поле этой сущности, например $article->id, а не параметр из адреса. Если бы мне понадобилось добавить к коду из статьи комменты, я бы использовал в запросах для их выборки $page['aid'] ($page['id'] занято под слаг).
     
  9. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Вот так работает.
    PHP:
    1. <?php $query_id = $_GET['query']; require_once 'Connections/mysitedb.php';
    2. include ("menu.html");
    3. $link = mysqli_connect($hostname_mysitedb, $username_mysitedb , $password_mysitedb, $database_mysitedb)
    4.     or die("Ошибка " . mysqli_error($link));
    5. $link->set_charset("utf8");
    6. $query ="SELECT  * FROM comments WHERE $query_id = art_id";
    7. $result = mysqli_query($link, $query);
    8. ?>
    9. <h1><center>Комментарии</center></h1>
    10. <?php
    11. $row_cnt = mysqli_num_rows($result);
    12. if ($row_cnt > 0) {
    13. while ($query = mysqli_fetch_array($result)){
    14. echo $query['id'], "<br>";
    15. ?>
    16. <a href="comments.php?query=<?php echo $query['id']; ?>">
    17. <?php echo $query ['comment'], "<br>";?></a>
    18. <?php
    19. echo $query ['created'], "<br>";
    20. echo $query ['author'], "<br>";
    21. }
    22. }
    23. else {echo "Эту запись еще не комментировали";}
    24. ?>
    25. <h1><a href="editnote.php?query=<?php echo $query_id; ?>">Исправить заметку</a>
    26. <p><a href="deletenote.php?query=<?php echo $query_id; ?>">Удалить заметку</a>
    27. </body>
    28. </html>
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Я плохого не посоветую :)
    --- Добавлено ---
    Нужно только слушать ;)
     
  11. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Спасибо, но с выводом все равно не понимаю:mad:
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Значит, пока еще не научились хорошо слушать.
     
  13. Dmitry123

    Dmitry123 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    14
    Симпатии:
    0
    Послушал и получилось, спасибо за помощь!
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Комментарий</title>
    6. </head>
    7.  
    8. <body>
    9. <?php $query_id = $_GET['query']; require_once 'Connections/mysitedb.php';
    10. include ("menu.html");
    11. $link = mysqli_connect($hostname_mysitedb, $username_mysitedb , $password_mysitedb, $database_mysitedb)
    12.     or die("Ошибка " . mysqli_error($link));
    13. $link->set_charset("utf8");
    14. $query ="SELECT  * FROM comments WHERE $query_id = art_id";
    15. $result = mysqli_query($link, $query);
    16. $querynotes = "SELECT * FROM notes WHERE $query_id = id";
    17. $resultnotes = mysqli_query($link, $querynotes);
    18. ?>
    19. <h1><center>Комментарии</center></h1>
    20. <?php
    21. while ($querynotes = mysqli_fetch_array($resultnotes)){
    22. echo $querynotes['id'], "<br>";
    23. echo $querynotes['article'], "<br>";
    24. echo $querynotes['created'], "<br>";
    25. echo $querynotes['content'], "<br>";
    26. }
    27. ?>
    28. <?php
    29. $row_cnt = mysqli_num_rows($result);
    30. if ($row_cnt > 0) {
    31. while ($query = mysqli_fetch_array($result)){
    32. echo $query['id'], "<br>";
    33. ?>
    34. <a href="comments.php?query=<?php echo $query['id']; ?>">
    35. <?php echo $query ['comment'], "<br>";?></a>
    36. <?php
    37. echo $query ['created'], "<br>";
    38. echo $query ['author'], "<br>";
    39. }
    40. }
    41. else {echo "Эту запись еще не комментировали";}
    42. ?>
    43. <h1><a href="editnote.php?query=<?php echo $query_id; ?>">Исправить заметку</a>
    44. <p><a href="deletenote.php?query=<?php echo $query_id; ?>">Удалить заметку</a>
    45. </body>
    46. </html>