PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько
Шрифт:
Интервал:
Закладка:
try {
$sql = 'DELETE FROM authorrole WHERE authorid = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка удаления роли пользователя.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
// Удаляем пользователя
try {
$sql = 'DELETE FROM users WHERE id = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка удаления пользователя индекс.';
$e->getMessage();
$e->getLine();
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
header('Location: .');
exit();
}
/*…Первичный запрос на удаление. Выводит форму выбора ДА или НЕТ. Удаление 1…*/
if (isset($_POST['action']) and $_POST['action'] == 'Удалить') {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/delete.php';
exit();
}
//Готовим лист с данными пользователей
include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';
try {
$result = $dsn->query('SELECT users.id,users.login, users.img, authorrole.roleid FROM `users` INNER JOIN authorrole ON users.id =authorrole.authorid');
} catch (pdoException $e) {
$error = 'Ошибка при получении пользователей из базы данных!';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
foreach ($result as $row) {
$authors[] = array('id' => $row['id'], 'login' => $row['login'], 'roleid' => $row['roleid'], 'img' => $row['img']);
}
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/authors.html.php'; //вставляем листинг авторов
}
//Закончили основной цикл для администратора
/*............. END admin.........................*/
/*............ Start user........................ */
//Работа с простым пользователем
if (userHasRole('user')) {
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/edituser.php';
}
//Закончили работу простым пользователем
/*.............. END user........................ */
/* Удаляем неактивных пользователей.
Удаление происходит из двух таблиц при обновлении страницы */
try {
$sql = "SELECT * FROM users INNER JOIN authorrole ON users.id = authorrole.authorid WHERE users.activation IS NULL OR users.activation !='1' ";
$s = $dsn->query($sql);
$no_active = $s->Fetchall();
} catch (pdoException $e) {
exit('Ошибка при выборке неактивных пользователей');
}
foreach ($no_active as $nouser) {
$r = time() – $nouser["date"];
$id = $nouser['id'];
if ($r > 3600) {
try {
$sql = "DELETE FROM users WHERE id = :id AND activation IS NULL OR users.activation !='1'";
$s = $dsn->prepare($sql);
$s->bindValue(':id', $id);
$s->execute();
} catch (pdoException $e) {
exit('Ошибка при выборке неактивных пользователей0');
}
try {
$sql = "DELETE FROM authorrole WHERE authorid = :id";
$s = $dsn->prepare($sql);
foreach ($no_active as $nouser) {
$authorid = $nouser['id'];
$s->bindValue(':id', $authorid);
$s->execute();
}
} catch (pdoException $e) {
exit('Ошибка при выборке неактивных пользователей');
}
}
}
Файл состоит из трех частей. В первой обрабатываются данные администратора. Во второй части подключается файл edituser.php и в нем обрабатываются данные обычного пользователя. Вторая часть начинается с комментария /* Start user */. В третьей части идет проверка неактивных пользователей и их удаление.
Скрипты, которые обрабатывает файл index.php:
– /chat/admin/access.php';
– /chat/admin/users/authors.html.php;
– /chat/admin/users/edituser.php;
– /chat/admin/users/error.html.php';
– /chat/admin/users/form_add_user.php';
– /chat/admin/users/avatar.php';
– /chat/admin/users/form_add_user.php';
– /chat/admin/users/delete.php';
Обработка данных администратора заключается в следующем:
1. Сквозной вариант без нажатия ссылок и кнопок
1.1 Проверяются полномочия пользователя для захода на страницу, если пользователь не «admin» и не «user» доступ к странице закрывается.
1.2 Если права «admin», то проверяются нажатия ссылок «Добавить нового пользователя», кнопок «Редактировать» и «Удалить».
1.3 Если кнопки не нажимались идем дальше и проверяем пользователя на права «user».
1.4 Если права не «user», переходим к последней, третьей части в которой идет удаление неактивных пользователей.
1.5 Удаление не активных пользователей сделано для тех пользователей, которые активируются самостоятельно, а не добавлены администратором. Принцип удаления таков: если пользователь начал регистрацию на сайте, получил письмо на свою электронную почту и в течении часа не ответил на него, перейдя по указанной в письме активации ссылке, то его данные удаляются из БД. Сам алгоритм определения неактивных пользователей следующий:
Делается SQL запрос к таблице «users» и связанной с ней таблицей «authorrole», в котором выбираются все пользователи, у которых значение activation не равно 1. Полученный массив обрабатывается построчно в цикле foreach по условию:
$r = time() – $nouser["date"];
где:
time() – текущее время;
$nouser["date"]– время регистрации пользователя (соответствует значению «date» таблицы «users»).
За время активации отвечает параметр $r. Если у пользователя $r > 3600 идет удаление значений данного пользователя из таблиц «users» и «authorrole».
Внимание! В файле много sql запросов, если некоторые не очень понятны, можно перейти в phpMyAdmin зайти в базу beseder выбрать вкладку sql и самостоятельно посмотреть, что выдают запросы в коде. при вставке не забудьте заменить переменные их значениями.
2. Нажата ссылка «Добавить нового пользователя»
2.1. Страница перегружается и появляется переменная $_GET['add'].
2.2 Инициализируем переменные добавления пользователя, вставляем форму добавления пользователя form_add_user.php. После заполнения формы проверяются переданные ею данные и устанавливается «аватар» в подключаемом скрипте avatar.php.
2.3 Данные заносятся в БД.
2.4 Проверяются и удаляются не активированные пользователи.
3. Нажата кнопка «Редактировать».
3.1 Появляется $_POST['action'] == 'Редактировать'
3.2. Также вставляется form_add_user.php, но в ней уже заранее установлены данные конкретного пользователя.
3.3 Данные изменяются администратором, проверяются и заносятся в БД.
3.4 Проверяются и удаляются не активированные пользователи.
4. Нажата кнопка «Удалить»
4.1. Появляется $_POST['action'] == 'Удалить', выполняется условие вставки скрипта подготовки удаления delete.php и формы удаления form_delete.php. Если в форме удаления соглашаемся и нажимаем «Да» то $_POST['action'] == 'Да' и запускается код удаления. Удаление происходит из таблицы «users» и связанной с ней таблицей «authorrole».
13. Управление пользователями
Попадаем при переходе по ссылке «Пользователи» на странице «Панель управления». За вывод страницы отвечает файл authors.html.php .
Листинг 28. authors.html.php Путь: news/chat/admin/users/ authors.html.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>
<h2 class="user">Управление пользователями</h2>
<div class="addusers"><a href="?add">Добавить нового пользователя</a></div>
<div class="ourwrapper" id="">
<!– <ul>–>
<?php foreach ($authors as $author) : ?>
<!– <li style="list-style-type: none">–>
<div class="formuser">
<form action="" method="post" class="formusers">
<div class="wrapuser">
<div class="topuser" id="">
<p class="login_art">
<span class="number"># <?php htmlout($author['id']); ?></span>
<?php htmlout($author['login']); ?>
</p>
</div><!– end topuser –>
<?php
$ava = $author['img'];
echo '<img class="imgava" src="' . $ava . '">' . ' ';
echo '<p>';
htmlout($author['roleid']); //выводим уровень доступа пользователя
echo '</p>' . '<br>';
?>
<input type="hidden" name="id" value="<?php echo $author['id']; ?>">
<input type="submit" name="action" value="Редактировать">
<input type="submit" name="action" value="Удалить" onclick="">
</div><!– end wrapuser –>
</form>
</div><!– end formuser –>
<!–</li>–>
<?php endforeach; ?>
<!–</ul>–>
</div><!– end ourwrapper –>
<p><a href="..">Вернуться</a></p>
</body>
</html>
На этой странице выводится список пользователей и предоставляется возможность