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

Из этого урока Вы узнаете как установить скрипт регистрации пользователей на сайте с использованием генератора шестизначного ключа (каптча), который необходимо будет ввести в поле при регистрации. Картинка выглядит следующим образом:

Скрипт основан на PHP + MySQL.

Скачайте папку с генератором и закачайте её в корень сайта или в какую нибудь другую папку, но при этом не забудьте прописать путь к ней в коде, приведённом ниже (место выделено красным цветом).

Естественно, Вы должны уметь пользоваться базой MySQL, знать, как к ней подключиться.

Первым делом скопируйте следующую таблицу users и импортируйте её в свою базу данных:

CREATE TABLE users (id int(11) NOT NULL auto_increment, username varchar(100) NOT NULL, password varchar(100) NOT NULL, email varchar(100) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

Как импортировать таблицу, можете прочитать здесь.

Далее надо установить форму для входа в аккаунт (для авторизации) посетителей сайта.

Применяя стили, Вы можете создать свой дизайн для формы. Когда клиент авторизуется (перед этим ему надо будет зарегистрироваться), форма исчезнет, а её место займёт блок приветствия посетителя.

Для этого установите в нужном месте страницы следующий код (чтобы Вам было легче разобраться в коде скрипта я поставил комментарии):

<?
/* если нажали кнопку "Войти" и вошли */
if($_SESSION["loged"] == "yes")
{
/* выводим блок приветствия посетителя */
?>
<div style="background:#EBEBEB; width:140px">
<p style="margin-bottom:0; text-align:center">Здравствуйте, <b><? echo $_SESSION["username"]; ?></b>!</p>
<p style="margin:4px auto 0; text-align:center">
<a href="member.php?do=editaccount">Редактировать профиль</a></p>
<p style="margin:0 auto; text-align:center">
<a href="member.php?do=changepass">Изменить пароль</a></p>
<p style="margin:0 auto 4px; text-align:center"><a href="member.php?do=logout">Завершить сеанс</a></p>
</div>
<?
}
/* если не нажимали кнопку "Войти", то выведем форму для входа в аккаунт. */
else
{
?>
<div style="background:#EBEBEB; width:140px">
<h3 style="text-align:center">Авторизация</h3>
<form action="member.php?do=login" method="post">
<table cellpadding="4" cellspacing="0" border="0" style="font:12px Verdana, Arial, Helvetica, sans-serif; margin-top:-35"><br>
<tr>
<td align="center">Ваш логин:
<input type="text" name="username" size="14"></td>
</tr>
<tr>
<td align="center">Пароль:
<input type="password" name="password" size="14"></td>
</tr>
<tr>
<td align="center"><input type="submit" value="Войти"></td>
</tr>
<tr>
<td align="center"><a href="member.php?do=lostpass">Забыли пароль?</a><br>
<a href="member.php?do=register">Регистрация</a></td>
</tr>
</table>
</form>
</div>
<?
}
?>


Далее создайте в корне сайта файл-обработчик форм member.php. Он будет состоять из шести блоков:

Скопируйте в этот файл следующий код:

<?
/* стартуем сессию */
session_start();
/* подключаем базу данных */
include ("blocks/bd.php");
if (!preg_match("|^[\D]+$|", $_GET['do']))
{
exit ("<p class='error'>Неверный формат запроса! Проверьте URL!");
}
/* сам документ */
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Регистрация пользователя.</title>
<style type="text/css">
.error{color:#c00; text-align:center}
</style>
</head>
<body>
<?
/* 1. Блок регистрации посетителя */

/* Если зашли на страницу регистрации, т. е. кликнули на ссылку регистрации */
if($_GET['do'] == "register")
{
/* Сразу же проверим, вошел ли польхователь или нет. */
if($_SESSION["loged"] == "yes")
{
echo "<p class='error'>Вы уже вошли. Для новой регистрации выйдите.</p>";
}
else
{
/* Генерируем шестизначный ключ для каптчи */
$_SESSION['uid'] = mt_rand(100000,999999);
/* форма регистрации, ссылающаяся на этот же файл, но со значением ?do=reg */
?>
<h2 align="center">Регистрация пользователя.</h2>
<p align='center'>Пожалуйста, заполните следующие поля для регистрации:</p>
<form action="member.php?do=reg" method="post">
<table width="95%" align="center" cellpadding="4" cellspacing="0" border="0">
<tr>
<td width="50%" align="right">Ваш логин:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td align="right">Пароль:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td align="right">Повторите пароль:</td>
<td><input type="password" name="password2"></td>
</tr>
<tr>
<td align="right">Ваш E-Mail:</td>
<td><input type="text" name="emaila"></td>
</tr>
<tr>
<td colspan=2><p style="text-align:center; font-size:11px; margin:0 auto">Введите в поле цифры с картинки:</p></td>
</tr>
<tr>
<td align="right"><img src="register/img/captcha.php?sid='.$_SESSION['uid'].'"></td>
<td><input name="sid" type="text"></td>
</tr>
<tr align="center">
<td colspan="2" style="padding-top:15px"><input type="submit" value="Зарегистрировать"></td>
</tr>
<tr style="font-size:11px">
<td colspan="2"style="padding-left:15px">Примечание:<br>логин и пароль может состоять из букв, цифр, знака подчеркивания и не менее трёх символов.</td>
</tr>
</table>
</form>
<?
}
}
/* заканчиваем регистрацию, если нажали на кнопку "Зарегистрировать" */
if($_GET['do'] == "reg")
{
/* Начинаем обрабатывать входящие данные */
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$password2 = trim($_POST["password2"]);
$emaila = trim($_POST["emaila"]);
$sid = trim($_POST["sid"]);
$username=stripslashes($username);
$password=stripslashes($password);
$password2=stripslashes($password2);
$emaila=stripslashes($emaila);
$sid=stripslashes($sid);
$username=htmlspecialchars($username);
$password=htmlspecialchars($password);
$password2=htmlspecialchars($password2);
$emaila=htmlspecialchars($emaila);
$sid=htmlspecialchars($sid);
/* проверим в базе, есть ли такой пользователь, какой надо зарегистрировать */
$result = mysql_query("SELECT * FROM users where username='$username'", $db);
if (mysql_num_rows($result) > 0)
{
echo "<p class='error'>Имя пользователя <b>$username</b> уже зарегистрировано, придумайте другой логин.</p>";
}
else
if ($username == '')
{
echo "<p class='error'>Поле 'Логин' не заполнено.</p>";
}
else
/* Проверяем введённые символы для логина */
if (!preg_match("/^\w{3,}$/", $username))
{
echo "<p class='error'>Указанный логин имеет недопустимый формат или менее трёх символов.</p>";
}
else
if ($emaila == '')
{
echo "<p class='error'>Поле 'E-mail' не заполнено.</p>";
}
else
/* Проверяем e-mail на корректность */
if (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $emaila))
{
echo "<p class='error'>Указанный 'E-mail' имеет недопустимый формат.</p>";
}
else
if ($password == '' || $password2 == '')
{
echo "<p class='error'>Поле 'Пароль' не заполнено.</p>";
}
else
/* Проверяем введённые символы для пароля */
if(!preg_match("/^\w{3,}$/", $password))
{
echo "<p class='error'>Указанный пароль имеет недопустимый формат или менее трёх символов.</p>";
}
else
if($password!=$password2)
{
echo "<p class='error'>Пароли не совпадают.</p>";
}
else
if($sid != $_SESSION['uid'])
{
echo "<p class='error'>Цифры на картинке не совпадают с введёнными в поле.</p>";
}
else
{
$mdPassword = md5($password);
/* если всё удачно, то внесем в базу пользователя */
$result = mysql_query("INSERT INTO users (username, password, email) VALUES ('$username', '$mdPassword', '$emaila')");
echo "<p class='error'>Спасибо за регистрацию!<br>Теперь вы можете войти в свой аккаунт, используя данные, указанные при регистрации!</p>";
}
}

/* 2. Блок восстановления пароля */

/* начнем воcстанавливать пароль, (если нажата ссылка "Забыли пароль?") */
if($_GET['do'] == "lostpass")
{
?>
<h2 align="center">Восстановление пароля.</h2>
<form action='member.php?do=lostpassword' method='post'>
<table width="95%" align="center" cellpadding="4" cellspacing="0" border="0">
<tr>
<td width="48%" align='right'>Ваш логин:</td><td><input type='text' name='user' size='16'></td>
</tr>
<tr align="center">
<td colspan="2" style="padding-top:15px"><input type='submit' value='Выслать пароль'></td>
</tr>
</table>
</form>
<?
}
/* восстанавливаем пароль (если нажата кнопка "Выслать пароль") */
if($_GET['do'] == "lostpassword")
{
if($_SESSION["loged"] == "yes")
{
echo "<p>Вы уже в системе!</p>";
}
else
{
/* запросим данные из базы */
$user = $_POST["user"];
$result = mysql_query("SELECT * FROM users where username=$user", $db);
$row=mysql_num_rows($result);
if ($user == "")
{
echo "<p class='error'>Введите имя пользователя.</p>";
}
else
{
if($row=='0')
{
echo "<p class='error'>Пользователь c таким логином не существует.</p>";
}
else
{
/* создаём письмо с паролем для отправки пользователю */
$subject = "Забытый Пароль";
$body = "Ваш пароль для сайта: ".$password."";
$result = mysql_query("SELECT email FROM users where username='$user'", $db);
$row = mysql_fetch_array($result);
$address = $row[0];
@mail($address ,$subject , $body);
echo "<p class='error'>Ваш пароль отправлен на E-mail, введенный при регистрации: ".$address."</p>";
}
}
}
}
/* 3. Блок смены пароля */ /* начинаем смену пароля (если нажата ссылка "Изменить пароль") */
if($_GET['do'] == "changepass")
{
if($_SESSION["loged"] == "yes")
{
?>
<h2 align="center">Изменение пароля.</h2>
<form action="member.php?do=changepassword" method="post">
<table width="95%" align="center" cellpadding="4" cellspacing="0" border="0" class="right">
<tr>
<td width="50%" align="right">Старый пароль:</td>
<td><input type="password" name="oldpass"></td>
</tr>
<tr>
<td align="right">Новый пароль:</td>
<td><input type="password" name="newpass"></td>
</tr>
<tr>
<td align="right">Повторите пароль:</td>
<td><input type="password name="newpassagain"></td>
</tr>
<tr align="center">
<td colspan="2" style="padding-top:15px"><input type="submit" value="Изменить"></td>
</tr>
</table>
</form>
<?
}
else
{
echo "<p class='error'>Вы должны войти в аккаунт.</p>";
}
}
/* Продолжаем смену пароля (если нажата кнопка "Изменить") */
if($_GET['do'] == "changepassword")
{
if($_SESSION["loged"] == "yes")
{
/* берем данные (пароль) по сессии пользователя */
$result = mysql_query("SELECT password FROM users where username='$_SESSION[username]'", $db);
$rows = mysql_fetch_array($result);
$pass = $rows['password'];
/* обрабатываем переменные */
$oldpass = trim($_POST["oldpass"]);
$newpass = trim($_POST["newpass"]);
$newpassagain = trim($_POST["newpassagain"]);
$oldpass=stripslashes($oldpass);
$newpass=stripslashes($newpass);
$newpassagain=stripslashes($newpassagain);
$oldpass=htmlspecialchars($oldpass);
$newpass=htmlspecialchars($newpass);
$newpassagain=htmlspecialchars($newpassagain);
if($oldpass=='' OR $newpass=='' OR $newpassagain=='')
{
echo "<p class='error'>Введены не все пароли.</p>";
}
else
if($pass != md5($oldpass))
{
echo "<p class='error'>Старый пароль неверный.</p>";
}
else
if (!preg_match("/^\w{3,}$/", $newpass))
{
echo "<p class='error'>Новый пароль имеет недопустимый формат или менее трёх символов.</p>";
}
else
if($newpass!=$newpassagain)
{
echo "<p class='error'>Новые пароли не совпадают.</p>";
}
else
{
$mdnewpass = md5($newpass);
mysql_query ("update users set password='$mdnewpass' where username='$_SESSION[username]'");
echo "<p class='error'>Пароль успешно изменён!</p>";
}
}
else
{
echo "<p class='error'>Вы должны войти в аккаунт.</p>";
}
}

/* 4. Блок редактирования профиля (смена email) */

/* Начинаем редактировать аккаунт (нажата ссылка "Редактировать профиль") */
if ($_GET['do'] == "editaccount")
{
if($_SESSION["loged"] == "yes")
{
$result = mysql_query("SELECT email FROM users where username='$_SESSION[username]'", $db);
$row = mysql_fetch_array($result);
$email = $row['email'];
?>
<h2 align="center">Редактирование профиля.</h2>
<form action="member.php?do=edit_account" method="post">
<table width="95%" align="center" cellpadding="4" cellspacing="0" border="0">
<tr>
<td align="right">Ваш логин:</td>
<td><input type="text" disabled name="username" value="<?php echo $_SESSION['username'] ?>"></td>
</tr>
<tr>
<td align="right">Ваш E-Mail:</td>
<td><input type="text" name="emaila" value="<?php echo $email ?>"></td>
</tr>
<tr align="center">
<td colspan="2" style="padding-top:15px"><input type="submit" value="Изменить данные"></td>
</tr>
</table>
</form>
<?
}
else
{
echo "<p class='error'>Вы должны войти в аккаунт!</p>";
}
}
/* Заканчиваем редактировать аккаунт (если нажата кнопка "Изменить данные") */
if($_GET['do'] == "edit_account")
{
if($_SESSION["loged"] == "yes")
{
if ($_POST['emaila'] =='')
{
echo "<p class='error'>Заполните поле email.</p>";
}
else
/* Проверяем e-mail на корректность */
if (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $_POST['emaila']))
{
echo "<p class='error'>Указанный 'E-mail' имеет недопустимый формат.</p>";
}
else
{
$emaila = trim($_POST["emaila"]);
$emaila=stripslashes($emaila);
$emaila=htmlspecialchars($emaila);
/* изменим данные в базе */
$$result = mysql_query("update users set email='$emaila' where username='$_SESSION[username]'");
echo "<p class='error'>Изменения внесены!</p>";
}
}
else
{
echo "<p class='error'>Вы должны войти в аккаунт!</p>";
}
}
/* 5. Блок входа в аккаунт */

/* Вход (если нажата кнопка "Войти") */ if($_GET['do'] == "login")
{
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$username=stripslashes($username);
$password=stripslashes($password);
$username=htmlspecialchars($username);
$password=htmlspecialchars($password);
if($username=='' OR $password=='' OR ($username=='' AND $password==''))
{
echo "<p class='error'>Вход не осуществлён.<br>Вы не ввели логин или пароль.</p>";
}
else
{
if($_SESSION["loged"] == "yes")
{
echo "Вы уже в системе!";
}
else
{
$result = mysql_query("SELECT password FROM users where username='$username'", $db);
$rows = mysql_fetch_array($result);
$pass = $rows['password'];
/* Если пароли совпали то создадим переменные сессии (вход = да и имя пользователя) */
if($pass == md5($password))
{
$_SESSION["loged"] = "yes";
$_SESSION["username"] ="$username";
/* перенаправляем на страницу такую-то */
?>
<script type="text/javascript">
window.location.href='index.php'
</script>
<?
}
else
{
echo "<p class='error'>Неверный пароль или логин.</p>";
}
}
}
}

/* 6. Блок выхода из аккаунта */

/* Выход - если нажата ссылка "Завершить сеанс" */
if($_GET['do'] == "logout")
{
/* Для выхода вам всего лишь нужно уничтожить переменные. Уничтожаются также, как и обычные переменные */
unset($_SESSION["loged"]);
unset($_SESSION["username"]);
/* Обновим страничку автоматом для того, чтобы обновился блок входа */
?>
<script type="text/javascript">
window.location.href='index.php'
</script>
<?
}
?>
</body>
</html>


Теперь, если вам надо ограничить доступ к определённой части сайта, например, к форме добавления комментария, гостевой книге, ссылке для скачивания чего-либо, то для этого нужно тот кусок кода, который вам нужно защитить, поместить в следующую конструкцию:

<?
session_start();
if($_SESSION["loged"] == "yes")
{
?>
Здесь код защищённой информации, например, форма добавления комментария.
..................
<?
}
else
{
echo "<p>Зарегистрируйтесь, чтобы иметь возможность добавлять комментарии.</p>"
?>


Устанавливайте и пользуйтесь. ;)


Опубликовано: 11.10.2010 07:58

Просмотров всего: 6188



Добавить комментарий:

Для обновления картинки кликните по ней.

Комментарии:

Нет комментариев.