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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 12 13 14 15 16 17 18 19 20 ... 23
форма, в которой пользователь может поменять свои аватар, пароль и email.

19. Регистрация пользователей

https://ruseller.com/lessons.php?rub_id=37&id=350

Для регистрации пользователей используются файлы:

• Страница с формой регистрации «form_registration.html».

• Страница сохранения пользователя «save_user.php».

• Страница активации пользователя «activation.php».

• Капча

Листинг 35. form_registration.html Путь: news/chat/admin/users/ form_registration.html

<!DOCTYPE html>

<html>

<head>

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

<title>Регистрация на сайте</title>

</head>

<body class="chatbody">

<h2>Регистрация на сайте</h2>

<form

class="chatform"

action="save_user.php"

method="post"

enctype="multipart/form-data"

id="reg"

>

<fieldset class="chatfieldset">

<legend>Данные для авторизации</legend>

<label

>Ваш логин *: <input name="login" type="text" size="15" maxlength="15"

/></label>

<hr />

<label

>Ваш пароль *:

<input name="password" type="password" size="15" maxlength="15"

/></label>

<hr />

<label

>Ваш E-mail *:

<input name="email" type="email" size="15" maxlength="100"

/></label>

<br />

</fieldset>

<br />

<fieldset class="chatfieldset">

<legend>Выберите аватар</legend>

<label>

Изображение должно быть квадратной формы<br />

и иметь расширение jpg, gif или png:<br />

<br />

<input type="FILE" name="fupload"

/></label>

</fieldset>

<br />

<!– В переменную fupload отправится изображение, которое выбрал пользователь. –>

<fieldset class="chatfieldset">

<legend>Введите код с картинки *:</legend>

<input type="text" name="capcha" />

<div><img src="/chat/capcha/captcha.php" /></div>

</fieldset>

<p>

<input type="submit" name="submit" value="Зарегистрироваться" />

<!– Кнопочка (type="submit") отправляет данные на страничку save_user.php –>

</p>

</form>

Звездочками (*) обозначены поля, обязательные для заполнения.

<p><a href="/../">Вернуться</a></p>

</body>

</html>

Выводит страницу «Регистрация на сайте» и форму регистрации. В форме предусмотрена защита при помощи «капчи» и предлагается отправка для регистрации следующих данных: «Логин», «email», «Пароль», «Аватар».

20. Капча

Файлы капчи: обработчик и папка с шрифтами, выводят на форме регистрации проверочный код, который пользователь должен будет ввести.

Листинг 36. captcha.php Путь:chatcapchacaptcha.php

<?php

if (session_id() == '') {

session_start();

}

$string = "";

for ($i = 0; $i < 5; $i++) {

$string .= chr(rand(97, 122));

}

$_SESSION['rand_code'] = $string;

$dir = $_SERVER['DOCUMENT_ROOT'] . '/chat/capcha/fonts/verdana.ttf';

$image = @imagecreatetruecolor(170, 60) or die('Невозможно инициализировать GD поток'); // Создаём изображение

$black = imagecolorallocate($image, 0, 0, 0);

$color = imagecolorallocate($image, 200, 100, 90);

$white = imagecolorallocate($image, 255, 255, 255);

imagefilledrectangle($image, 0, 0, 399, 99, $white);

imagettftext($image, 30, 0, 10, 40, $color, $dir, $_SESSION['rand_code']);

header("Content-type: image/png");

imagepng($image);

Здесь в цикле генерируется строка из случайных чисел, при этом числа сразу преобразуются в символьные эквиваленты. Диапазон чисел 97-122 соответствует буквам латинского алфавита в диапазоне a-z по ASCII http://www.asciitable.com/ . Полученный набор букв в виде строки сохраняется в переменную сессии, а затем оформляется в виде изображения.

21. Страница сохранения пользователя

За сохранение и обработку полученных при регистрации данных пользователя отвечает файл «save_user.php»

Листинг 37. save_user.php Путь: news/chat/admin/users/ save_user.php

<?php

error_reporting(E_ALL);

if (session_id() == '') {

session_start();

}

/* заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную */

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

$login = $_POST['login'];

if (mb_strlen($login) < 2 or mb_strlen($login) > 15) { //проверяем длину логина

exit("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев

}

if ($login == '') {

unset($login);

}

}

/* заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную */

if (isset($_POST['password'])) {

$password = $_POST['password'];

if (mb_strlen($password) < 3 or mb_strlen($password) > 15) { //проверяем длину пароля

exit("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев

}

if ($password == '') {

unset($password);

}

}

/* заносим введенный пользователем код в переменную $capcha, если он пустой, то уничтожаем переменную */

if (isset($_POST['capcha'])) {

$capcha = $_POST['capcha'];

if ($capcha == '') {

unset($capcha);

}

}

/* заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную */

if (isset($_POST['email'])) {

$email = $_POST['email'];

if ($email == '') {

unset($email);

}

}

$capcha = stripslashes($capcha); //sequrity чистим капчу

$capcha = htmlspecialchars($capcha);

$capcha = trim($capcha); //удаляем лишние пробелы

if (($capcha == $_SESSION["rand_code"]) && ($capcha != "")) { //проверяем капчу

} else {

exit("Капча введена неправильно");

}

if (empty($login) or empty($password) or empty($email) or empty($capcha)) { //если пользователь не ввел данные, то выдаем ошибку и останавливаем скрипт

exit("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");

}

if (!preg_match("/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i", $email)) { //проверка е-mail адреса регулярными выражениями на корректность

exit("Неверно введен е-mail!");

}

$login = stripslashes($login); //если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести

$login = htmlspecialchars($login);

$password = stripslashes($password);

$password = htmlspecialchars($password);

$login = trim($login); //удаляем лишние пробелы

$password = trim($password);

/*......................Шифруем пароль...........................*/

//можно добавить несколько своих символов по вкусу, например, вписав "she".

//Если этот пароль будут взламывать методом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет.

//Но советую ставить другие символы, можно в начале строки или в середине.

//При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.

$password = md5($_POST['password'] . 'swl'); //шифруем пароль

include $_SERVER['DOCUMENT_ROOT'] . '/chat/dsn.php'; // подключаемся к базе

$sth = $dsn->prepare("SELECT id FROM users WHERE login=:login"); // проверка на существование пользователя с таким же логином

$sth->execute(array(':login' => $login));

if (!empty($sth->fetch(PDO::FETCH_ASSOC))) {

exit("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");

}

/*....................avatar................................*/

if (empty($_FILES['fupload']['name'])) {

//если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"

$avatar = "avatars/noavatar.png"; //можете нарисовать net-avatara.jpg или взять в исходниках

} else {

//иначе – загружаем изображение пользователя

$path_to_90_directory = 'avatars/'; //папка, куда будет загружаться начальная картинка и ее сжатая копия

/* проверка формата исходного изображения */

if (preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/', $_FILES['fupload']['name'])) {

$filename = $_FILES['fupload']['name'];

$source = $_FILES['fupload']['tmp_name'];

$target = $path_to_90_directory . $filename;

move_uploaded_file($source, $target); //загрузка оригинала в папку $path_to_90_directory

if (preg_match('/[.](GIF)|(gif)$/', $filename)) {

$im = imagecreatefromgif($path_to_90_directory . $filename); //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия

}

if (preg_match('/[.](PNG)|(png)$/', $filename)) {

$im = imagecreatefrompng($path_to_90_directory . $filename); //если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия

}

if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {

$im = imagecreatefromjpeg($path_to_90_directory . $filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия

}

// Создание квадрата 90x90

// dest – результирующее изображение

//

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

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