- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько
Шрифт:
Интервал:
Закладка:
Проверяем работу контроллера. Вставляем в файл index.html т.е. главную страницу сайта «news» код:
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/createbase.php'?>
Вставляем в самый верх. Получится:
Листинг 11. Тестируем контроллер 1
<?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>
<p>Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует
подготовке и реализации новых предложений!
<br>
Значимость этих проблем настолько очевидна, что повышение уровня гражданского сознания влечет за собой процесс
внедрения и модернизации модели развития.
<br> Практический опыт показывает, что рамки и место обучения кадров способствует повышению актуальности
соответствующих условий активизации.</p>
</body>
</html>
Запускаем сайт, в случае с Open Server просто кликаем по его названию в выпадающем меню. Должно получиться следующее
Рис. 14. Вывод формы создания администратора
Появляются сообщения о том, что БД и таблицы созданы и затем выводится форма для задания логина и пароля администратора модуля.
Вводим свой логин и пароль, отправляем. Получается:
Рис. 15. Работа сайта
Мы видим содержание сайта, значит все прошло успешно и контроллер 1 свою функцию выполнил. Можете войти в phpMyAdmin и проверить таблицы и записи.
9. Контроллер 2. описание
Контроллер 2 будет заниматься администрированием пользователей: регистрацией, авторизацией и распределением прав. Исходя из этого он должен предоставить пользователю необходимый интерфейс. В состав интерфейса будут входить управляющие кнопки:
• Авторизация – отвечает за вход в модуль для возможности оставления комментариев ;
• Регистрация – установка параметров авторизации нового пользователя;
• Кабинет – отвечает за вход в личный кабинет пользователя;
• Выход.
Контроллер должен обеспечивать вход в личный кабинет пользователя и предоставлять ему возможности для изменения и управления данными.
В данном случае достаточно двух основных ролей пользователя: «admin» и «user». «admin» может управлять добавлением, редактированием и удалением любых пользователей, имеет доступ для редактирования и удаления всех комментариев и ответов на них, «user» имеет те же возможности, но только для себя.
Есть также дополнительный резервный профиль «Site Administrator» он не активирован.
Перед написанием кода контроллера необходимо создать файлы его окружения.
9.1 Файлы окружения контроллера 2
9.1.1 Личный кабинет
Создаем в папке «admin» файл «index.php». Это будет страница администрирования модуля, на которой будут располагаться ссылки на соответственные разделы.
Листинг 12. index.php Путь: /news/chat/admin/index.php
<?php
/* Проверяем уровень доступа к странице */
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')) {
$error = 'Вход только для администратора';
include $_SERVER['DOCUMENT_ROOT'].'/chat/admin/accessdenied.html.php';
exit();
}
?>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/style.css" />
<title>Панель управления</title>
</head>
<body class="chatbody">
<?php include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/button_logout.html'; ?>
<div class="wrap_apanel">
<div class="blockapanel">
<h2>Панель управления</h2>
<ul>
<li><a href="/chat/admin/comment.php" class="apanel">Комментарии</a></li>
<li><a href="/chat/admin/users/index.php" class="apanel">Пользователи</a></li>
</ul>
</div>
<p><a href="/" class="apreturn">Вернуться на главную страницу</a></p>
</div>
</body>
</html>
В самом начале файла проверяем данные пользователя, если пользователь авторизован и имеет статус «admin» или «user» открываем страницу, если нет, выводим страницу запрета доступа accessdenied.html.php. Если пользователь не авторизован, выводим форму авторизации form_login.php.
На самой странице панели управления выводим:
• форму выхода пользователя из сессии button_logout.html с кнопкой «Выйти»;
• ссылки для перехода на страницы «Комментарии», «Пользователи»;
• ссылку «Вернуться на главную страницу» для перехода на начальную страницу сайта.
9.1.2 Управление доступом
Для управления доступом не будем изобретать велосипед, а воспользуемся уже проверенным решением из шуточной CMS [1] и создаем файл «access.php» листинг которого за некоторыми доработками аналогичен, приведенному в данной книге.
В исходный листинг [1.C.233] добавлены проверка активации и установление «id» пользователя.
Листинг 13. access.php Путь: /news/chat/admin/access.php
<?php
error_reporting(E_ALL);
/* Проверяем пароль и логин стартуем или удаляем сессию */
/* Функция возвращает true или false в зависимости от результатов проверки */
function userIsLoggedIn()
{
if (isset($_POST['action']) and $_POST['action'] == 'out')
{
if (!isset($_POST['login']) or $_POST['login'] == '' or
!isset($_POST['password']) or $_POST['password'] == '')
{
$GLOBALS['loginError'] = 'Пожалуйста, заполните оба поля';
return FALSE;
}
$password = md5($_POST['password'] . 'swl');
if (databaseContainsAuthor($_POST['login'], $password))
{
/* Если пользователь существует в БД, то проверяем его активацию */
try {
include $_SERVER['DOCUMENT_ROOT'].'/chat/dsn.php';
$activation ='';
$login = $_POST['login'];
$password = md5($_POST['password'] . 'swl');
$sql = 'SELECT activation FROM users WHERE login = :login AND password = :password';
$s = $dsn->prepare($sql);
$s->bindValue(':login', $login);
$s->bindValue(':password', $password);
$s->execute();
}
catch (PDOException $e) {
echo $e->getMessage();
exit();
}
$activation = $s->fetch(PDO::FETCH_COLUMN);
if ($activation !=1) {
include $_SERVER['DOCUMENT_ROOT'].'/chat/admin/erroractivation.html';
exit();
}
/* Если активирован задаем значения сессии */
if(session_id() == '') {session_start();}
$_SESSION['loggedIn'] = TRUE;
$_SESSION['login'] = $_POST['login'];
$_SESSION['password'] = $password;
return TRUE;
}
else
{
if(session_id() == '') {session_start();}
unset($_SESSION['loggedIn']);
unset($_SESSION['login']);
unset($_SESSION['password']);
$GLOBALS['loginError'] =
'Указанный логин или password не совпадают.';
return FALSE;
}
}
if (isset($_POST['action']) and $_POST['action'] == 'logout')
{
if(session_id() == '') {session_start();}
unset($_SESSION['loggedIn']);
unset($_SESSION['login']);
unset($_SESSION['password']);
unset($_SESSION['userid']);
header('Location: ' . $_POST['goto']);
exit();
}
if(session_id() == '') {session_start();}
if (isset($_SESSION['loggedIn']))
{
return databaseContainsAuthor($_SESSION['login'], $_SESSION['password']);
}
}
/* Функция проверяет наличие в БД пользователя с переданной парой логин – пароль */
function databaseContainsAuthor($login, $password)
{
include $_SERVER['DOCUMENT_ROOT'].'/chat/dsn.php';
try
{
$sql = 'SELECT COUNT(*) FROM users WHERE login = :login AND password = :password';
$s = $dsn->prepare($sql);
$s->bindValue(':login', $login);
$s->bindValue(':password', $password);
$s->execute();
}
catch (PDOException $e)
{
echo $e->getMessage();
exit();
}
$row = $s->fetch();
if ($row[0] > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
/* Права для пользователя */
function userHasRole($role)
{
include $_SERVER['DOCUMENT_ROOT'].'/chat/dsn.php';
if (isset($_SESSION['login'])) {
try
{
$sql = "SELECT COUNT(*) FROM users
INNER JOIN authorrole ON users.id = authorid
INNER JOIN role ON roleid = role.id
WHERE login = :login AND role.id = :roleId";
$s = $dsn->prepare($sql);
$s->bindValue(':login', $_SESSION['login']);
$s->bindValue(':roleId', $role);
$s->execute();
}
catch

