- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 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