Оценить:
 Рейтинг: 0

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

Год написания книги
2021
Теги
<< 1 ... 21 22 23 24 25 26 27 28 29 ... 78 >>
На страницу:
25 из 78
Настройки чтения
Размер шрифта
Высота строк
Поля

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

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'].

Чтобы получить значение параметризированной переменной для оператора LIKE, содержимое $_POST['text'] размещено между двумя знаками процента (%). LIKE воспринимает этот знак как групповой символ, поэтому при поиске строки $_POST['text'] в поле text формы search.html.php в расчет будут приниматься также строки, где до и после этого значения находится другой текст.

Запускаем. Если все сделано без ошибок, то при запущенном на «Open Server» тестовом сайте при переходе по адресу: news/chat/admin/comment.php видим страницу статистики комментариев (см. рис. 15)

Рис. 18. Вид страницы статистики комментариев

На этом этапе необходимо заняться контроллером 2 и кнопками авторизации, так как опробовать работу страницы в деле пока нельзя в связи с отсутствием комментариев и ответов на них.
<< 1 ... 21 22 23 24 25 26 27 28 29 ... 78 >>
На страницу:
25 из 78