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

Рис. 18. Вид страницы статистики комментариев
На этом этапе необходимо заняться контроллером 2 и кнопками авторизации, так как опробовать работу страницы в деле пока нельзя в связи с отсутствием комментариев и ответов на них.
10. Контроллер 2
Контроллер 2 будет заниматься контролем авторизации пользователей и их возможностям для работы с комментариями.
Напишем код для входа на страницу личного кабинета и связанных с ней страниц. Контроллер 2 назовем «login_controller.php» и разместим в корне папки «chat», т.е. там же, где и контроллер 1 (createbase_controller.php)
Листинг 21. login_controller.php Путь: news/chat/ login_controller.php
<?php
error_reporting(E_ALL);
/* Проверяем данные пользователя, устанавливаем данные сессии */
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/access.php';
userIsLoggedIn();
userId();
if (isset($_SESSION['login'])) {
echo '<div class="welcom">Welcome '.$_SESSION['login'].'</div>'; //Выводим "Привет юзер"
/* Вставляем кнопки "Кабинет" и "Выход" */
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/button_cabinet.html';
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/button_logout.html';
} else {
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/input_button_block.html';
if (!empty($_GET['name'])) {
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/form_login.php';
}
}
В подключаемом файле access.php проверяем данные пользователя и устанавливаем данные сессии.
После проверки данных функциями userIsLoggedIn() и userId()если пользователь авторизован приветствуем его и вставляем кнопки «Кабинет» и «Выход». Если нет, выводим блок кнопок «Вход», «Регистрация», «На главную» и форму авторизации.
Напишем коды кнопок и опробуем его в деле, это можно будет сделать после добавления файлов рассматриваемых в следующем разделе.
11. Кнопки раздела администрирования
11.1 Кнопки вход и регистрация
Кнопки «Вход» «Регистрация» и «На главную» сгруппированы в одном файле «input_button_block.html»
Листинг 22. input_button_block.html Путь: news/chat/admin/ users/ input_button_block.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" type="text/css" href="/chat/style.css" />
</head>
<div class="inputbutton">
<div class="ingress">
<a href="?name=door">Вход</a>
</div>
<div class="ingress">
<a href="admin/users/reg.php">Регистрация</a>
</div>
<div class="ingress">
<a href="/">На главную</a>
</div>
</div>
</html>
Назначаем обработчик нажатия кнопки «Вход».
11.2 Обработчик кнопки вход
Для обработки нажатия кнопки вход используем метод GET передавая в нем переменную «door». При нажатии кнопки происходит перезагрузка страницы и если контроллер видит переменную door то вставляет файл form_login.php
Листинг 23. form_login.php Путь: news/chat/admin/ form_login.php
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/admin/clean.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/style.css" />
<title>Авторизация</title>
</head>
<body>
<?php if (isset($loginError)): ?>
<p><?php htmlout($loginError); ?></p>
<?php endif; ?>
<form action="" method="post">
<h4 class="formname">Авторизация</h4>
<hr>
<div>
<label for="email">Логин:
<input type="text" name="login" id="login" class="inputs">
</label>
</div>
<hr>
<div>
<label for="password">Пароль:
<input type="password" name="password" id="password">
</label>
</div>
<hr>
<div>
<input type="hidden" name="action" value="out">
<input type="submit" value="Отправить">
</div>
</form>
</body>
</html>
В эту форму пользователь вставляет свои логин и пароль и отправляет дальше на проверку.
11.3 Кнопки кабинет и выход
Страница опять перегрузилась. Если логин и пароль введены корректно, то выводим кнопки «Кабинет» и «Выход», а заодно напечатаем в контроллере 2 приветствие:«Welcome $user».
Кнопка «Кабинет» файл «button_cabinet.html».
Листинг 24. button_cabinet.html Путь: news/chat/admin/ button_cabinet.html
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="/chat/style.css" />
</head>
<div class="cabinets">
<form action="/chat/admin/index.php" method="post" class="cabinet">
<input type="submit" name="action" value="Кабинет" />
</form>
</div>
</html>
Кнопка «Выход» файл «button_logout.html» рассмотрена ранее в Листинге 16.
Обработчик события кнопки «Выйти» файл «logout.php»
Листинг 25. logout.php Путь: news/chat/admin/ logout.php
<?php
if (session_id() == '') {
session_start();
}
/* Проверяем была ли нажата кнопка "Выйти" если 'Да' уничтожаем сессию */
if (isset($_POST['action']) and $_POST['action'] == 'Выйти') {
unset($_SESSION['loggedIn']);
unset($_SESSION['login']);
unset($_SESSION['password']);
}
header("Location: " . $_SERVER["HTTP_REFERER"]);
При нажатии кнопки «Выйти» идет переход на страницу logout.php, где происходит сброс значений сессии, а затем делается редирект обратно на исходную страницу.
Для того чтобы вывести кнопки и формы необходимо в исходный текст стартовой страницы вставить (инклюдить) следующий код
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/login_controller.php'?>
Листинг 26. index.html
Вставка контроллера 2: login_controller.php в файл: news/index.html
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/createbase_controller.php'?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NEWS</title>
</head>
<body>
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/login_controller.php'?>
<p>Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует
подготовке и реализации новых предложений!
<br>
Значимость этих проблем настолько очевидна, что повышение уровня гражданского сознания влечет за собой процесс
внедрения и модернизации модели развития.
<br> Практический опыт показывает, что рамки и место обучения кадров способствует повышению актуальности
соответствующих условий активизации.</p>
</body>
</html>
Код строк вставок контроллера1 и контроллера 2 выделен цветом.
кнопки будут выведены в том месте документа, где вставлен код строки подключения login_controller.php.
Можете поэкспериментировать с местом размещения «инклюда» в документ. Далее приведены скриншоты, иллюстрирующие работу контроллеров 2 и 1.
Начинают появляться выводимые элементы, поэтому понемногу надо задавать им стили css. Дальнейшие скриншоты работы программы будут с использованием стилей, но сама итоговая страница стилей будет приведена в конце книги, чтобы не было лишней путаницы.

Рис. 19. Пользователь не авторизован

Рис. 20. Пользователь авторизовался
12. Страница панель управления
На страницу «Панель управления» попадаем при нажатии кнопки «Кабинет». За вывод страницы отвечает файл index.php в папке «users».
Листинг 27. index.php Путь: news/chat/admin/users/index.php
<?php
error_reporting(E_ALL);
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/access.php';
/*.........Проверяем полномочия пользователя..............*/
if (!userIsLoggedIn()) {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/form_login.php';
exit();
}
if (!userHasRole('admin') and !userHasRole('user')) {
exit('Доступ только для Администратора');
}
/*..........Если admin разрешаем все. Start admin..........*/
//Начинаем основной цикл для администратора
if (userHasRole('admin')) {
/*.....Подключение нового пользователя.................*/
if (isset($_GET['add'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';
$pageTitle = 'Подключение нового пользователя';
$action = 'addform';
$name = '';
$email = '';
$id = '';
$button = 'Добавить пользователя';
// Выводим уровни доступа
try {
$result = $dsn->query('SELECT id, description FROM role');
} catch (pdoException $e) {
$error = 'Ошибка при получении списка ролей.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();