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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 5 6 7 8 9 10 11 12 13 ... 23
(PDOException $e)

{

echo $e->getMessage();

echo $e->getLine();

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

}

$row = $s->fetch();

if ($row[0] > 0)

{

return TRUE;

}

else

{

return FALSE;

}

}

}

/* Определяем id пользователя */

function userId() {

if (isset($_SESSION['login'])) {

      try {

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

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

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

            $s->bindValue(':login',$_SESSION['login']);

            $s->execute();

            $rowid=$s->fetch();

            $_SESSION['userid'] = $rowid['id'];

      }

      catch (PDOException $e) {

            echo $e->getMessage();

            echo $e->getLine();

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

      }

}

}

Файл содержит функции для проверки данных пользователя.

Функция userIsLoggedIn()проверяет наличие и правильность данных переданных формой авторизации, активациию пользователя. В зависимости от результатов проверки этих данных устанавливает или уничтожает значения переменных сессии $_SESSION. Возвращает «true» или «false».

Для активации пользователя используется $activation. Пользователь считается активированным, если $activation = 1. Проверяем запросом к БД для указанного логина.

Функция databaseContainsAuthor() проверяет наличие в БД пользователя с переданной парой логин – пароль. Если пользователь существует возвращает «true» если нет «false».

Функция userHasRole($role)определяет уровень пользователя: «admin» или «user». В качестве параметра передается значение $role. Если $role равна значению «id» таблицы «role» установленному для данного логина при авторизации, то возвращает значение «true» иначе «false».

Функция userId() определяет «id» пользователя. Устанавливает значение переменной сессии $_SESSION['userid'].

9.1.3 Форма авторизации

Форма авторизации «form_login.php» служит для ввода логина и пароля пользователя.

Листинг 14. 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="/chat/style.css" />

<title>Авторизация</title>

</head>

<body>

<?php if (isset($loginError)): ?>

<p><?php htmlout($loginError); ?></p>

<?php endif; ?>

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

<h4 class="formname">Авторизация</h4>

<hr>

<div class="login_input">

<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>

В самом начале файла вставляем скрипт «clean.php», который будет чистить получаемые данные ($loginError).

Выводим форму. Заполняем, отправляем данные.

9.1.4 Страница ошибки активации

Страница ошибка активации erroractivation.html. Форма будет вставляться в случае ошибки активации, а именно, если переменная активации не равна 1:

$activation != 1;

проверка ведется в скрипте access.php.

Листинг 15. erroractivation.html Путь: /news/chat/admin/ erroractivation.html

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

<title>Ошибка активациии</title>

</head>

<body>

<div style="float:none; display:inline-block; ">

<h5 class="ingress" style="text-align:center;">

Вы не активировали аккаунт, <br>

проверьте сообщения в почтовом ящике,<br>

указанном вами при регистрации

</h5>

</div>

<div>

<h5 class="ingress"><a href="/">Вернуться на главную страницу</a></h5>

</div>

</body>

</html>

Здесь вопросов быть не должно. Обычная html страница без кода. Часть стилей CSS заданы непосредственно на странице.

9.1.5 Кнопка выхода из раздела администрирования

Кнопка выхода из раздела администрирования «button_logout.php»

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

<!DOCTYPE html>

<html lang="en">

<head>

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

</head>

<div class="logouts">

<form action="/chat/admin/logout.php" method="post" class="logout">

<input type="hidden" name="action" value="logout" />

<input type="hidden" name="goto" value="/admin/" />

<input type="submit" name="action" value="Выйти" />

</form>

</div>

</html>

Кнопка передает данные скрипту logout.php (Листинг 25) который обнуляет соответствующие переменные сессии.

После создания этих фалов пробуем зайти на страницу администрирования

news/chat/admin и посмотреть что получилось.

Рис. 16. Форма авторизации закрывает вход в личный кабинет

Заполняем поля формы и отправляем данные.

Рис. 17. Страница личного кабинета открыта

Если всё прошло нормально открывается страница доступа к личному кабинету в административном разделе. На этой странице имеется кнопка «Выход», ссылки на страницы «Комментарии» и «Пользователи», а также ссылка «Вернуться на главную страницу».

9.1.6 Страница доступ запрещен

Сами понимаете, без такой страницы никуда.

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

<?php

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

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

?>

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>Access Denied</title>

</head>

<body>

<h1>Доступ запрещен</h1>

<p><b><i><?php htmlout($error); ?></i></b></p>

<p><a href="/">Вернуться на главную страницу</a></p>

</body>

</html>

Страница будет выводиться, в случае если у пользователя нет прав для доступа к панели управления. Допустим, user захочет войти на страницу, доступную только пользователю с правами admin. «Доступ запрещен» будет выводиться по результатам проверки в файле access.php, на странице index раздела admin вместо основной страницы.

9.2. Статистика комментариев

9.2.1 Страница комментариев

Создаем страницу просмотра статистики комментариев «comment.html.php»

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

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<link rel="stylesheet" type="text/css" href="/chat/style.css" />

<title>Листинг комментариев</title>

</head>

<body class="chatbody">

<h1 class="user">Статистика комментариев</h1>

<div class="statwrap" id="">

<!– Вставляем блок формы поиска –>

<div class="statone" id="">

<?php include_once $_SERVER['DOCUMENT_ROOT'].'/chat/admin/search.html.php'; ?>

</div><!– END statone –>

<div class="stattwo" id="">

<h5 class="user">Комментарии</h5>

<?php

if (isset($says)) {

foreach ($says as $say) : ?>

<p class="stat">

<?php

echo '<span style="color:cadetblue;">' . ' ' . $say['id'] . ' ' . '</span>';

//убираем смайлы

$patterns = '/(:([^>]+):)/U';

$replace = ' smile* ';

$clean = $say['text'];

$text = preg_replace($patterns, $replace, $clean);

echo $text;

$t = time($say['saydate']);

echo '<span style="color:cadetblue;">' . ' ' . date("d.m.Y", "$t") . '</span>'; ?>

</p>

<?php endforeach;

} ?>

</div><!– END stattwo –>

<div class="statthree" id="">

<h5 class="user">Ответы на комментарии</h5>

<?php

if (isset($replys)) {

foreach ($replys as $reply) : ?>

<p class="stat"><?php

echo '<span style="color:cadetblue;">' . ' ' . $reply['replyid'] . ' ' . '<-' . ' ' . '</span>';

//убираем смайлы

$patterns = '/(:([^>]+):)/U';

$replace = ' smile* ';

$clean = $reply['replytext'];

$text = preg_replace($patterns, $replace, $clean);

echo $text;

//время

$t = time($reply['replydate']);

echo '<span style="color:cadetblue;">' . ' ' . date("d.m.Y", "$t") . '</span>'; ?>

</p>

<?php endforeach;

} ?>

</div><!– END statthree –>

</div><!– END statwrap –>

<br />

<div class="return"><a href="/chat/admin/">Вернуться</a></div>

</body>

</html>

Страница функционально состоит из трех блоков:

• Блок с данными пользователей и формой поиска.

• Блок, отображающий комментарии.

• Блок, отображающий ответы на комментарии.

Предусмотрена ссылка для возврата на предыдущую страницу «Вернуться».

Содержание блоков формируется в файле comment.php в соответствии с данными отправленными формой поиска search.html.php. По умолчанию отображаются все имеющиеся данные. Комментарии и ответы на них выводятся без картинок.

1 ... 5 6 7 8 9 10 11 12 13 ... 23
На этом сайте Вы можете читать книги онлайн бесплатно русская версия PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько.
Книги, аналогичгные PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько

Оставить комментарий