PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько
}
else
{
//в случае несоответствия формата, выдаем соответствующее сообщение
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев
}
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}
Скрипт создает и присваивает пользователю аватар из выбранной им картинки и загружает его под уникальным именем в папку avatars. Листинг подробнейший, мне кажется, здесь пояснения не нужны.
18. Работа с обычным пользователем
18.1 Скрипт работы с пользователем
Скрипт аналогичен коду использумому для работы с администратором в индексном файле папки «users» за исключением того, что пользователь видит и может редактировать только свои данные. Кроме того он не может поменять свой логин. За это отвечает свойство Readonly в поле ввода логина.
За обработку данных отвечает файл «edituser.php».
Листинг 32. edituser.php Путь: news/chat/admin/users/ edituser.php
<?php
error_reporting(E_ALL);
require_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/access.php';
/*.................Редактирование пользователя....................*/
if (isset($_POST['action']) and $_POST['action'] == 'Редактировать') {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';
try {
$sql = 'SELECT id, login, email, img FROM users WHERE id = :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();
}
$row = $s->fetch();
$pageTitle = 'Редактирование профиля';
$action = 'editform';
$login = $row['login'];
$email = $row['email'];
$id = $row['id'];
$avatar = $row['img'];
$button = 'Обновить профиль';
// список ролей, прав автора
try {
$sql = 'SELECT roleid FROM authorrole WHERE authorid = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':id', $id);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка выборки прав юзера.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
$selectedRoles = array();
foreach ($s as $row) {
$selectedRoles[] = $row['roleid'];
}
// построение списка ролей автора
try {
$result = $dsn->query('SELECT id, description FROM role');
} catch (pdoException $e) {
$error = 'Ошибка построения списка ролей юзера.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
foreach ($result as $row) {
$roles[] = array(
'id' => $row['id'],
'description' => $row['description'],
'selected' => in_array($row['id'], $selectedRoles)
);
}
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/form_edit_user.php';
exit();
}
if (isset($_GET['editform'])) {
include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/avatar.php';
/* 2.1 Проверяем все ли поля формы заполнены */
if (empty($_POST['login']) or empty($_POST['password']) or empty($_POST['email'])) {
exit("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
/* 2.2 Проверка корректности email */
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i", $_POST['email'])) {
exit("Неверно введен е-mail!");
}
try {
$sql = 'UPDATE users SET
login = :login,
email = :email,
img = :img
WHERE id = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':id', $_POST['id']);
$s->bindValue(':login', $_POST['login']);
$s->bindValue(':email', $_POST['email']);
$s->bindValue(':img', $avatar);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка добавления юзера.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
if ($_POST['password'] != '') {
$password = md5($_POST['password'] . 'swl');
try {
$sql = 'UPDATE users SET
password = :password
WHERE id = :id';
$s = $dsn->prepare($sql);
$s->bindValue(':password', $password);
$s->bindValue(':id', $_POST['id']);
$s->execute();
} catch (pdoException $e) {
$error = 'Ошибка обновления пароля.';
include $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/users/error.html.php';
exit();
}
}
header('Location: .');
exit();
}
/* Удаление 2…Результат работы формы, вызываемой кодом ниже(Удаление 1) */
if (isset($_POST['action']) and $_POST['action'] == 'ДА') {
// удаление ролей автора
include $_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 {
$sql = 'SELECT users.id,users.login, users.img, authorrole.roleid FROM `users` INNER JOIN authorrole ON users.id =authorrole.authorid
WHERE users.login = :login';
$s = $dsn->prepare($sql);
$s->execute(array('login' => $_SESSION['login']));
$result = $s->Fetchall();
} 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/list_edit_user.php';
Подключаемся к БД проверяем какие кнопки были нажаты, проверяем данные пользователя, обрабатываем результаты. Формируем запросы и создаем первичные массивы для дальнейшей их обработки в соответствующих формах. Обновляем, удаляем или оставляем без изменений данные пользователя в БД.
18.2 Страница пользователя
Файл страницы пользователя «list_edit_user.php»
Листинг 33. list_edit_user.php Путь: news/chat/admin/users/ list_edit_user.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/chat/admin/clean.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">
<h2>Редактировать профиль</h2>
<ul>
<?php foreach ($authors as $author) : ?>
<li style="list-style-type: none">
<form action="" method="post" class="chatform">
<div class="list_edituser">
<?php
$ava = $author['img'];
echo '<img src="' . $ava . '">';
htmlout($author['login']);
echo " ";
htmlout($author['roleid']);
?>
<input type="hidden" name="id" value="<?php echo $author['id']; ?>">
<input type="submit" name="action" value="Редактировать">
<input type="submit" name="action" value="Удалить">
</div>
</form>
</li>
<?php endforeach; ?>
</ul>
<a href=".." class="apreturn">Вернуться</a>
</body>
</html>
Выводит страницу содержащую данные пользователя и форму для выбора действий с этими данными: «Редактировать», «Удалить».
18.3 Форма редактирования пользователя
Файл формы «form_edit_user.php».
Листинг 34. form_edit_user.php Путь: news/chat/admin/users/ form_edit_user.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><?php htmlout($pageTitle); ?></title>
</head>
<body class="chatbody">
<h1><?php htmlout($pageTitle); ?></h1>
<p style='font-style:italic'>Здесь вы можете поменять аватар, пароль и email
<form action="?<?php htmlout($action); ?>" method="post" enctype="multipart/form-data" class="chatform">
<div>
<label for="name">Имя:      
<input type="text " READONLY name="login"
id="login" value="<?php if (isset($login)){
htmlout($login);} ?>">
</label>
</div>
<br/>
<div>
<label for="email">Email:    
<input type="email" name="email"
id="email" value="<?php htmlout($email); ?>"></label>
</div>
<br/>
<div>
<label for="password">Пароль: <input type="password"
name="password" id="password"></label>
</div>
<label>Выберите аватар. Изображение должно быть формата jpg, gif или png:<br></label>
<input type="FILE" name="fupload">
<div>
<input type="hidden" name="id" value="<?php
htmlout($id); ?>">
<input type="submit" value="<?php htmlout($button); ?>">
</div>
</form>
<a href=".." class="apreturn">Вернуться</a>
</body>
</html>
Выводится