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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 9 10 11 12 13 14 15 16 17 ... 23
$_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.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>

На этой странице выводится список пользователей и предоставляется возможность

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

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