LoveRead.info » Книги » Разная литература » PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

Книгу PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

67 0 11:01, 24-03-2023

Книга PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько читать онлайн бесплатно без регистрации

В книге рассмотрен вариант разработки модуля комментариев для сайта на чистом языке php в процедурном стиле.

    1 ... 6 7 8 9 10 11 12 13 14 ... 23
    Перейти на страницу:

    9.2.2 Форма поиска

    Так как не исключена ситуация, что в комментариях нам надо будет, что-нибудь искать, поэтому создадим для страницы комментариев форму поиска «search.html.php»

    Листинг 19. search.html.php Путь: news/chat/admin/ search.html.php

    <form action="" method="post" class="stat">

    <center>

    <p>Панель информации:</p>

    </center>

    <fieldset>

    <div>

    <label for="author">Пользователь:</label>

    <select name="author" id="author">

    <option value="">Все пользователи</option>

    <?php foreach ($users as $user) : ?>

    <option value="<?php htmlout($user['id']); ?>"><?php

    htmlout($user['login']); ?></option>

    <?php endforeach; ?>

    </select>

    </div>

    <div>

    <p>

    <label for="category">Раздел:</label>

    <select name="category" id="category">

    <option value="all">Все разделы</option>

    <option value="say">Комментарии</option>

    <option value="reply">Ответы</option>

    </select>

    </p>

    </div>

    <div class="textsearch">

    <label for="text">Содержит текст:</label>

    <input type="text" name="text" id="text">

    </div>

    <div class="textsearch_button">

    <input type="hidden" name="action" value="search">

    <input type="submit" value="Искать">

    </div>

    </fieldset><!– END fieldset –>

    <fieldset>

    <legend>Выборка для: </legend>

    <h5 class="user"><?= $legend ?></h4>

    </fieldset>

    <fieldset>

    <legend>Список пользователей:</legend>

    <ul style="list-style-type:none;padding:0px;margin:5px;">

    <?php foreach ($users as $user): ?>

    <li style="border-bottom:1px solid lightgray; margin-bottom:5px;">

    <?php

                 htmlout($user['id']); echo '. &nbsp ';

    htmlout($user['login']);

                      ?>

    </li>

    <?php endforeach; ?>

    </ul>

    </fieldset>

    </form>

    Обычная HTML форма в полях <fieldset> которой, сгруппированы параметры для поиска и фильтрации данных. Поиск ведется по тексту. Результаты можно отфильтровать по логину пользователя и разделу.

    Форма сгруппирована из блоков:

    • Панель информации – общий контейнер для блоков.

    • Пользователи – выпадающий список  <select>  пользователей.

    • Раздел – выпадающий список <select> разделов, их всего три «Все разделы», «Комментарии» и «Ответы».

    • Поле ввода поискового запроса и кнопка для оправки этого запроса «Искать».

    Данные из формы отправляются на обработку в файл comment.php.

    9.2.3 Скрипт обработки страницы комментариев

    Обработкой данных на странице комментариев будет заниматься файл «comment.php».

    Листинг 20. comment.php Путь: news/chat/admin/ comment.php

    <?php

    error_reporting(E_ALL);

    include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

    include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/clean.php';

    //Пользователи для панели информации

    try {

    $result = $dsn->query('SELECT id, login FROM users');

    } catch (PDOException $e) {

    echo $e->getMessage();

    echo $e->getLine();

    exit('Ошибка поиска пользователя в базе комментариев');

    }

    foreach ($result as $row) {

    $users[] = array('id' => $row['id'], 'login' => $row['login']);

    }

    /* Получаем логин пользователя при запросе */

    if (isset($_POST['author']) and $_POST['author'] != '') {

    try {

    $sql = 'SELECT login FROM users WHERE id = :id';

    $s = $dsn->prepare($sql);

    $s->bindValue(':id', $_POST['author']);

    $s->execute();

    $legend = $s->fetchColumn(0);

    } catch (PDOException $e) {

    echo $e->getMessage();

    echo $e->getLine();

    exit('Ошибка поиска логина в базе комментариев');

    }

    } else {

    $legend = '';

    }

    /* Start. Работаем с комментариями */

    //если выбрано поле "ответы" выходим и ничего не делаем в разделе "комментарии"

    if (isset($_POST['category']) and $_POST['category'] == 'reply') {

    }

    /* иначе формируем запрос к базе */

    elseif (isset($_POST['action']) and $_POST['action'] == 'search' or !isset($_POST['action'])) {

    include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

    // Базовое выражение SELECT.

    $select = 'SELECT say.id, say.userid, say.saytext, say.saydate';

    $from = ' FROM say INNER JOIN users ON say.userid = users.id';

    $where = ' WHERE TRUE';

    $sequence = array();

    // Автор выбран

    if (isset($_POST['author']) and $_POST['author'] != '') {

    $where .= " AND userid = :userid";

    $sequence[':userid'] = $_POST['author'];

    }

    // Была указана какая-то искомая строка

    if (isset($_POST['text']) and $_POST['text'] != '') {

    $where .= " AND saytext LIKE :saytext";

    $sequence[':saytext'] = '%' . $_POST['text'] . '%';

    }

    try {

    $sql = $select . $from . $where;

    $s = $dsn->prepare($sql);

    $s->execute($sequence);

    } catch (PDOException $e) {

    echo $e->getMessage();

    echo $e->getLine();

    exit('Ошибка при извлечении комментариев');

    }

    foreach ($s as $row) {

    $says[] = array('id' => $row['id'], 'userid' => $row['userid'], 'text' => $row['saytext'], 'saydate' => $row['saydate']);

    }

    }

    /* End. Завершаем обработку комментариев */

    /* Start. Работаем с ответами на комментарии */

    //если выбрано поле "комментарии" выходим и ничего не делаем в разделе "ответы"

    if (isset($_POST['category']) and $_POST['category'] == 'say') {

    }

    /* иначе формируем запрос к базе */ elseif (isset($_POST['action']) and $_POST['action'] == 'search' or !isset($_POST['action'])) {

    include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';

    // Базовое выражение SELECT.

    $select = 'SELECT reply.userid, reply.replytext,reply.replyid, reply.replydate ';

    $from = ' FROM reply INNER JOIN users ON reply.userid = users.id ';

    $where = ' WHERE TRUE';

    $order = ' ORDER BY reply.replyid';

    $sequencer = array();

    if (isset($_POST['author']) and $_POST['author'] != '') { // Автор выбран

    $where .= " AND userid = :userid";

    $sequencer[':userid'] = $_POST['author'];

    }

    if (isset($_POST['text']) and $_POST['text'] != '') { // Была указана какая-то искомая строка

    $where .= " AND replytext LIKE :replytext";

    $sequencer[':replytext'] = '%' . $_POST['text'] . '%';

    }

    try {

    $sql = $select . $from . $where . $order;

    $s = $dsn->prepare($sql);

    $s->execute($sequencer);

    } catch (PDOException $e) {

    echo $e->getMessage();

    echo $e->getLine();

    exit('Ошибка при извлечении ответов на комментарии');

    }

    foreach ($s as $row) {

    $replys[] = array('replyid' => $row['replyid'], 'userid' => $row['userid'], 'replytext' => $row['replytext'], 'replydate' => $row['replydate']);

    }

    }

    include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/comment.html.php';

    Вывод информации производится в соответствии с условиями заданными в форме поиска: по имени пользователя, по разделу, по искомому тексту.

    В начале скрипта делаем выборку из БД всех пользователей. Затем получаем из БД логин пользователя, для которого выполняется поиск.

    Создаем запрос SELECT, зависящий от указанных в форме условий. Сначала определим строки, объединение которых формирует запрос SELECT в том случае, если не выбран ни один критерий, строки находятся в переменных:

    $select, $from и $where.

    Если кнопка «Искать» не нажималась, то $_POST['action'] будет отсутствовать и будут, отображены все комментарии и ответы них.

    Т.к. базовое выражение SELECT собирается из тех критериев, что выбраны в форме, то в запросе будут операторы FROM и WHERE. Если критерии не заданы (то есть нужно получить все данные из БД), WHERE будет ненужной. Добавлять выражения к несуществующему оператору проблематично, поэтому подставляем такую команду, которая никак не повлияет на результат, если ее опустить. Здесь подойдет выражение WHERE TRUE, которое всегда истинно.

    Для добавления новой строки к существующей используется оператор конкатенации (.=). В этом скрипте к оператору WHERE добавляется условие, по которому содержимое поля userid из таблицы say должно совпадать со значением псевдопеременной :userid. Вначале скрипта с помощью метода bindValue установить требуемое общее значение $_POST['author'] нельзя т.к. еще не подготовлен объект параметризированного запроса, из которого этот метод вызывается. Вследствие этого запрос разбросан по вышеперечисленным строкам ($select, $from и $where).

    Инициализируем массив $sequence для сохранения параметризированных переменных, используя их имена в качестве индексов. В массиве будет храниться id пользователя и текст поискового запроса. Содержимое массива:

    $sequence (

    :userid => "$_POST['author']",

    :saytext => "'%'.$_POST['text'].'%'"

    );

    где "$_POST['author']" = $user['id'].

    Чтобы получить

    1 ... 6 7 8 9 10 11 12 13 14 ... 23
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Лариса Лариса04 июнь 12:43 Да, просто до слез похоже на сериал ,,Даррел,,... Смерть в райском уголке - Эмили Салливан
    2. Stmara Stmara02 июнь 22:44 Приятная история, чтобы скоротать вечер. Любимая книга из последних "Любовь со смертью", также очень понравилась -"Суженная... Сердце космического дракона - Ольга Вадимовна Гусейнова
    3. Alex Alex01 июнь 17:12 💩💩💩🖕🖕🖕🖕🖕🖕🖕... Игровой момент II - Александр Андреевич Бодров
    Все комметарии
    Новинки бесплатной онлайн библиотеки