Пишем скрипт регистрации и авторизации пользователей для сайта на PHP
Добавлено (15.08.2010): Новая версия скрипта доступна по ссылке: SUM — Simple User Management
Сегодня я продолжу пополнять недавно рожденную рубрику моего блога «Web-мастер — ломастер» . Напишу как сделать авторизацию на сайте с помощью моего простого скрипта.
Скрипт написан на PHP, для хранения информации о пользователях я использовал базу данных MySQL.
Для удобства создадим файл в котором будет осуществляться подключение к БД. Этот файл мы будем инклудить ко всем остальным скриптам где требуется связь с БД.
Содержимое файла «connectdb.php»:
1 2 3 4 5 6 7 8 9 10 11 12 13 | < ? //данные о хосте, пользователе и базе данных $host = 'localhost'; $user = 'root'; $pass = 'pass'; $dbname = 'test'; // подключаемся и выбираем бд, которую указали выше if(!mysql_connect($host,$user,$pass)) die('Не удалось подключиться к серверу MySql!'); elseif(!mysql_select_db($dbname)) die('Не удалось выбрать БД!'); ?> |
Теперь напишем скрипт инсталяции, который будет создавать таблицу необходимую для хранения информации о пользователях.
Содержимое файла со скриптом инсталяции «install.php»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | < ? include('connectdb.php');// подключение к серверу MySql и выбор БД // sql-скрипт для создания таблицы $sql='CREATE TABLE users( id INT NOT NULL AUTO_INCREMENT, login VARCHAR(15), pass TEXT, email VARCHAR(150), PRIMARY KEY(id) );'; //выполняем sql-запрос if(!mysql_query($sql)){ echo 'Ошибка при создании таблицы в БД!'; } else { echo 'Всё прошло отлично, таблица создана!'; } ?> |
Пользователей нужно регистрировать — напишем для этого скрипт! Сразу скажу, что все вводимые данные не проверяются на правильность и скрипт уязвим для взломов, поэтому вам придётся самим доработать его как нужно.
Регистрация заключается в добавлении информации о пользователе (Логин, пароль…) в базу данных.
Создадим файл «register.php» и добавим в него следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | < ? include('connectdb.php');// подключение к серверу MySql и выбор БД if (($_POST['login']!='') || ($_POST['pass1']!='') || ($_POST['pass2']!='') || ($_POST['email']!='')) { // если все данные для регистрации введены, то продолжаем $pass1 = $_POST['pass1']; $pass2 = $_POST['pass2']; if (strcmp($pass1, $pass2) == 0) {// если пароли совпадают, то продолжаем $login = $_POST['login']; $email = $_POST['email']; //проверяем наличие в БД пользователя с логином $login $sql='SELECT * FROM users WHERE login='.$login; // скрипт для поиска по логину в таблице users if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) { // если количество найденых записей ноль, то продолжаем // sql-скрипт для добавления даных в таблицу $sql = 'INSERT INTO users(login, pass, email) VALUES("'.$login.'", "'.$pass1.'", "'.$email.'")'; if(mysql_query($sql)) {// выполняем скрипт echo 'Пользователь '.$_POST['login'].' успешно зарегистрирован! <a href="/index.php">Форма для входа.'; } else { echo 'При регистрации произошла ошибка, <a href="/register.php">повторите попытку</a>.'; } } else echo 'Пользователь с таким логином уже зарегистрирован!'; } else echo 'Введенные пароли не совпадают, <a href="/register.php">повторите попытку</a>.'; } else { ?> <form method='post' action='/register.php'> Введите Логин: <input type='text' size='30' name='login' /><br /> Введите e-mail: <input type=text size=30 name='email' /><br /> Пароль: <input type='password' name='pass1' size='30' /><br /> Повторите пароль: <input type='password' name='pass2' size='30' /><br /> <input type='submit' value='Регистрация' /> < ? } ?> </form> |
Далее нам нужно создать форму для авторизации и скрипт управления авторизацией.
Всё это будет находиться в файле «index.php»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | < ? /*!!!Чтобы не повредить работоспособности скрипта выше этого комментария не размещайте вообще ничего!!!*/ include('connectdb.php');// подключение к серверу MySql и выбор БД $userinfo=''; $state='0'; if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {// если в куках лежит логин и зашифрованый пароля if (!isset($_GET['exit'])) {// если кнопка выход не была нажата $login=$_COOKIE['login']; $pass=$_COOKIE['pass']; // проверяем наличие пользователя в БД и достаём оттуда пароль $sql="SELECT id, pass FROM users WHERE login='$login'"; $res=mysql_query($sql); if(mysql_num_rows($res)>0){// если пользователь есть в БД $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД if(strcmp($pass,md5($userinfo['pass'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков // достаём все данные из БД $sql="SELECT * FROM users WHERE login='$login'"; $res=mysql_query($sql); $userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД $time=time(); // устанавливаем куки для запоминания статуса пользователя setcookie("login",$login,$time+1800); setcookie("pass",$pass,$time+1800); $state = 1;// статус, если 1, тогда пользователь авторизован } } } else { //обнуляем куки, если была нажата кнопка выход setcookie("login"); setcookie("pass"); } } if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){ // если пользователь ввёл логин и пароль $login = $_POST['login']; // проверяем наличие пользователя в БД и достаём оттуда пароль $sql = "SELECT id, pass FROM users WHERE login='$login'"; $res = mysql_query($sql); if(mysql_num_rows($res)>0) {// если пользователь есть в БД $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя $pass = $_POST['pass']; if(strcmp($pass,$userinfo['pass'])==0){ // достаём все данные из БД $sql="SELECT * FROM users WHERE login='$login'"; $res=mysql_query($sql); $userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД $time=time(); // устанавливаем куки для запоминания статуса пользователя, пароль шифруем setcookie("login", $login, $time+1800); setcookie("pass", md5($pass), $time+1800); $state = 1;// статус, если 1, тогда пользователь авторизован } } } } if($state != 1) { ?> <form method="post" action="/index.php"> Логин: <input type="text" size="30" name="login"/><br /> Пароль: <input type="password" name="pass" size="30"/><br /> <input type="submit" value="Войти"/> </form> <br /><a href="/register.php">Регистрация</a> < ? } else { echo 'Вы вошли на сайт!<br /> Ваш Логин: '.$userinfo["login"].'<br />Выш E-mail: '.$userinfo["email"].'<br /> <a href="/index.php?exit=y">Выход</a>'; } ?> |
Если нужно проверить авторизован пользователь или нет, то проверяем переменную $state, она должна быть ровна 1. В массиве $userinfo содержится вся информация из БД об авторизованном пользователе.
Теперь проверим как это всё работает. В файле «connectdb.php» укажите свои настройки БД.
После этого нужно создать таблицу, для этого следуем в браузере «http://вашсайт.com/install.php» и смотрим результат выполнения скрипта.

Далее отправляемся на стартовую страницу «index.php».

Идём по ссылке «Регистрация», заполняем форму и жмём на кнопку «Регистрация».


Наконец идём по ссылке «Форма для входа», вводим логин и пароль и наслаждаемся=)

Скачать все файлы скрипта в одном архиве.
Регистрация доменов в зоне RU всего за 99 рублей в год.
Отличный хостинг всего за 30 рублей в месяц.


Спасибо за статью. Долго искал в своей литературе по PHP что-то подобное, так и не нашёл. Сохраняю в закладки.
Ответить