- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
PHP. Разработка модуля комментариев для сайта - Дмитрий Приходько
Шрифт:
Интервал:
Закладка:
Страница получает массив authors от страницы index.php обрабатывает и выводит на печать.
14. Форма добавления пользователя
Для добавления пользователя служит файл формы «form_add_user.php»
Листинг 29. form_add_user.php Путь: news/chat/admin/users/ form_add_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>
<h1><?php htmlout($pageTitle); ?></h1>
<form action="?<?php htmlout($action); ?>" method="post" enctype="multipart/form-data">
<fieldset class="usernames">
<div class="username">
<label for="name">Имя:      
<input type="text" name="login"
id="login" value="<?php if (isset($login)){
htmlout($login);} ?>" >
</label>
</div> <!– end.username –>
<div class="username">
<label for="email">Email:    
<input type="email" name="email"
id="email" value="<?php htmlout($email); ?>"></label>
</div><!– end.username –>
<div class="username">
<label for="password">Пароль: 
<input type="password"
name="password" id="password"></label>
</div><!– end.username –>
</fieldset><!– end.fieldset usernames–>
<br/>
<fieldset class="ava">
<legend>Загружаем аватар:</legend>
<p>
<label><p>Выберите аватар. Изображение должно быть формата jpg, gif или png:</p>
<p>Загружаем готовые аватары или картинки только квадратной формы</p><br>
</label>
<input type="FILE" name="fupload">
</p>
</fieldset><!– end.fieldset ava –>
<fieldset class="level">
<legend>Уровень доступа пользователя:</legend>
<?php for ($i = 0; $i < count($roles); $i++): ?>
<div>
<label for="role<?php echo $i; ?>">
<input type="checkbox"
name="roles[]" id="role<?php echo $i; ?>"
value="<?php htmlout($roles[$i]['id']);?>"<?php
if ($roles[$i]['selected']) {
echo ' checked';
} ?>
>
<?php htmlout($roles[$i]['id']); ?></label>:
<?php htmlout($roles[$i]['description']); ?>
<?php endfor; ?>
</fieldset><!– end.fieldset level –>
<div>
<input type="hidden" name="id" value="<?php
htmlout($id); ?>">
<input type="submit" value="<?php htmlout($button); ?>">
</div>
</form>
<a href="/chat/admin/">Вернуться</a>
</body>
</html>
Форма принимает данные для создания нового пользователя «Имя», «Электронная почта», «Пароль», «Аватар», «Роль пользователя» и передает их обработчику на той же странице index.php форма вставляется при нажатии ссылки «Добавить нового пользователя», которое обновляет страницу и создает переменную $_GET['add'], являющуюся условием вставки формы.
Поскольку в форме будет передаваться картинка аватар, то необходимо указать атрибут формы enctype="multipart/form-data".
15. Форма удаления пользователя
Для удаления выбранного пользователя служит форма «form_delete.php»
Листинг 29. form_delete.php Путь: news/chat/admin/users/ form_delete.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 class="chatbody">
<h1>Удаление</h1>
<ul>
<?php foreach ($authors as $author) : ?>
<li style="list-style-type: none">
<form action="" method="post" class="chatform">
<div>
<p>Вы действительно хотите удалить этого пользователя?</p>
<hr>
<p>
<input type="hidden" name="id" value="<?php echo $author['id']; ?>">
<input type="submit" name="action" value="ДА">
<input type="submit" name="action" value="НЕТ">
</p>
<?php
$ava = $author['img'];
echo '<img src="' . $ava . ' ">'.'<p>';
htmlout($author['login']);
echo ' ';
htmlout($author['roleid']);
echo '<p>';
?>
</div>
</form>
</li>
<?php endforeach; ?>
</ul>
<p><a href="..">Вернуться</a></p>
</body>
</html>
Форма выводит кнопки «Да» и «Нет», по нажатии которых страница обновляется и если была нажата «Да» происходит удаление пользователя.
Логика работы следующая: если нажата кнопка «Удалить» вставляется файл обработчик «delete.php», который делает выборку данных пользователя и вставляет форму подтверждения удаления, если удаление подтверждено, нажата кнопка «Да», то страница перегружается и само удаление происходит уже в файле «index.php».
16. Скрипт подготовки удаления пользователя
Подготовку удаления пользователя выполняет файл «delete.php»
Листинг 30. delete.php Путь: news/chat/admin/users/delete.php
<?php
error_reporting(E_ALL);
//require_once $_SERVER['DOCUMENT_ROOT'] . '/admin/access.php';
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.id = :id';
$s =$dsn->prepare($sql);
$s->execute(array('id' => $_POST['id']));
$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/form_delete.php';
Готовит данные для идентификации удаляемого пользователя и передает их на печать в форме form_delete.php.
Запрос как обычно, в таблицы «users» и «authorrole». Выводит форму «Вы действительно хотите удалить этого пользователя?». Удаление происходит на странице chat/admin/users/index.php в зависимости от ответа, выбранного в форме form_delete.php' (Листинг 29).
17. Вывод аватара
Для вывода аватаров пользователей я воспользовался готовым решением https://ruseller.com/lessons.php?rub_id=37&id=350. За вывод аватаров пользователей отвечает файл «avatar.php».
Листинг 31. avatar.php Путь: news/chat/admin/users/ avatar.php
<?php
error_reporting(E_ALL);
/*....................avatar................................*/
if (empty($_FILES['fupload']['name']))
{
//если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = 'avatars/noavatar.png'; //картинка в исходниках
}
else {
//иначе – загружаем изображение пользователя
$path = 'avatars/'; //папка, куда будет загружаться начальная картинка и ее сжатая копия
if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
{
$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$target = $path.$filename;
move_uploaded_file($source, $target);//загрузка оригинала в папку $path
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
}
// Создание квадрата 90x90
// dest – результирующее изображение
// w – ширина изображения
// ratio – коэффициент пропорциональности
$w = 90; // квадрат 90x90
$h = 90;
// создаём исходное изображение на основе исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения
if ($w_src !== $h_src) {
exit ('<h4>Стороны изображения для загрузки должны быть равны. Квадрат. Например 256*256.<br>Рекомендую использовать готовые аватары со специализированных сайтов.<br>
Или подготовьте картинку в графическом редакторе</h4><br><i>p.s. грузим аватары, а не картины</i>');
}
// создаём пустую квадратную картинку именно truecolor!, иначе будет 8-битный результат
$dest = imagecreatetruecolor($w,$w);
$white = imagecolorallocate($dest, 255, 255, 255);
imagefill($dest, 0, 0, $white);
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $h_src);
$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
$avatar = $path.$date.'.jpg';//заносим в переменную путь до аватара.
$delfull = $path.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не

