logo

Пишем свою регистрацию + авторизацию

logo

Исходники


Здравствуйте уважаемые читатели и подписчики сайта www.mzcoding.ru. Сегодня мы будем с вами делать форму регистрации + авторизации на PHP и MySQL.


Создание БД

И так давайте начинать, для начала мы с вами создадим Базу Данных чтобы нам было легче мы будем использовать phpmyadmin:
1.Откроем phpmyadmin



2.Создадим новую БД и назовем её register

3. После регистрации у вас появится следующее окно:

4.Заполняем его следующим образом:

Таким образом мы в базе данных register создали БД user в которых прописали пока пять пустых полей.
5.После нажатия кнопки пошел у нас появилась следующая таблица:

Теперь по порядку так как нам нужно както опознавать зарегистрированного человека мы в первое поле напишем id -Это будет специальный идентификатор который будет присваиваться человеку. Тип у нашего идентификатора будет цифровой (т.е целое число) 1 Человек зашел присвоили ему 1, второй зашел 2, третий присвоили 3 и так далее. Поэтому в колонке тип выбираем тип INT. Далее в длине значения мы ставим цифру 10 то есть 10 значное число, при всем уважении к вашему сайту я думаю более (1000000000)человек у вас на сайте зарегистрированно не будет, поэтому смело пишем 10 и идем далее. А далее нам в поле дополнительно выбрать пункт auto_increment это чтобы наша таблица автоматически людям идентификатор присваивала. После этого ставим переключатель на пункт первичный ключ и переходим ко второму полю.
Далее все вообще намного проще, теперь мы будем прописывать только имя поля и его длину. Второе поле у нас называется name длину ставим 40 (Не думаю что есть именна которые содержут более 40 символов. В третье поле пишем email длина 40. Четвертое поле заполняем как sait и тоже длинна 40 символов. Ну и наконец пятое поле это у нас будет пароль поэтому заполняем как pass и тоже ставим 40 символов.
В итоге у вас должно выйти вот так:

Жмем кнопку сохранить.
6.После нажатия кнопки сохранить у нас получится следующее:

Если у вас также значит вы сделали все верно.
Так ну все базу данных мы создали теперь мы её обязательно сразу экспортируем в SQL документ и сохраним к себе на компьютер.
Для этого нажимаем вкладку экспорт:

После чего у нас появляется следующее окно:

В котором мы просто нажимаем на кнопку пошел.
В результате мы увидим окно со SQL кодом, код нужно скопировать и сохранить в файле с расширением .SQL

Все База данных унас готова и зарезервированна, теперь приступим к написанию PHP Кода.

Пишем PHP код формы регистрации

Первое что мы сделаем это создадим каталог с именем register в этом каталоге у нас будут 4 файла
+ каталоги js и auto

Вот так будет выглядеть примерная иерархия каталога register:

    register>
  • config.php — Конфигурационный файл
  • registration.php — Форма регистрации
  • register.php — Обработчик формы регистрации
  • register.SQL — Собственно наша БД которую мы делали выше
    • js
  • Библиотека JQuery (последнюю врсию можно скачать с сайта ).На момент написания данного скрипта последней являлась jquery-1.4.2.min.js
  • mymootol.js — Файл нашей защиты от спама
    • auto
  • aut.php — Файл формы авторизации
  • auth.php-Обработчик нашей формы авторизации
  • Теперь давайте создадим файл с именем registration.php
    Это будет наша форма ввода данных:

    <html>
    <head>
      <title>Регистрация</title>
    <style>
    #button
    {
    display:none;
    }
    </style>
    <!-- Подключаем библиотеку jquery-->
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/mymootol.js"> </script>
    </head>
    
    <body>
    <center><font color="navy"><h1> Пожалуйста зарегистрируйтесь!</font></h1>
    <p><font color="red">Поля отмеченные * (звездочкой), обязательные для регистрации!</font></p>
    <form action="register.php" method="POST">
    <table border=0><tr>
    <td>Введите ваше имя:</td></tr><tr>
    <td><input type="text" name="name" value=""><font color="red">*</font> </td></tr>
    <tr>
    <td>Введите E-mail адресс:</td>
    </tr>
    <tr>
    <td><input type="text" name="email"><font color="red">*</font></td>
    </tr>
    <tr>
    <td>Ваш сайт:</td>
    </tr>
    <tr>
    <td><input type="text" name="sait" value="http://"></td>
    </tr><tr>
    <td>Ваш пароль:</td>
    </tr>
    <tr>
    <td><input type="password" name="pass"><font color="red">*</font></td>
     </tr>
     </table>
    
     <p>Для завершения регистрации ответьте на один вопрос: &nbsp;&nbsp;&nbsp;&nbsp;<font color="red">Сколько будет 5+3?</font></p>
    
    <input type="radio" id="link"> <b>8</b> &nbsp;&nbsp;&nbsp;  <input type="radio"><b>9</b></a>
    <br>
    <label>
    <input type="submit" name="button" id="button" value="Зарегистрироваться">
    </label>
    </form>
    </body>
    </html>
    

    Сразу наверное брасаются в глаза строки:

    <!-- Подключаем библиотеку jquery-->
    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/mymootol.js"> </script>
    [/code
    
    На самом деле я объясню библиотека JQuery понадобится нам для создания Антиспам защиты..Да, да именно для той выезжающей кнопки после ответа на вопрос!
    Далее мы будем писать обработчик вышеуказанной формы, делается это очень просто создаем файл <b>register.php</b> и помещаем в него следующий код:
    [code]
    <?php
    //Отключим вывод системных ошибок
    error_reporting(0);
    //Начинаем обработку формы регистрации
    //Проверяем не пусты ли наши поля
    
    if (!$_POST['name'])
    {
        echo "Вы не заполнили форму имя!";
    }
    else
    {
    	$name =($_POST['name']);
    }
     echo "<br>";
    if	(!$_POST['email'])
    {
    	echo "Вы не заполнели форму E-mail";
    	//Предлагаем пользователю заполнить имя
    	echo "<input type='button' value=Вернутся к редактированию данных
    	onClick='history.go(-1)'>";
    	//Если все успешно продолжаем проверять данные
    }
    else
    {
     $email=($_POST['email']);
    }
    echo "<br>";
    if($_POST["email"]&& !ereg("^[^@]+@([a-z\-]+\.)+[a-z]{2,4}$",$_POST["email"]))
    {
    	echo "Введите корректный формат электронной почты";
    	//Предлагаем пользователю заполнить имя
    	echo "<input type='button' value=Вернутся к редактированию данных
    	onClick='history.go(-1)'>";
    }
    echo "<br>";
    if ($_POST['sait'])
    {
    	$sait= ($_POST['sait']);
    }
    echo "<br>";
    if(!$_POST['pass'])
    {
        echo "Вы не заполнили форму Пароль";
    }
    else
    {
    	$pass =($_POST['pass']);
    
     echo "<br>";
    //Подключаем конфигурационный файл
    include ('config.php');
    
    //Если все вышеописанные проверки прошли успешно, добавляем пользователя в нашу БД
    $result = mysql_query("INSERT INTO user(name,email,sait,pass)
                           VALUES ('$name','$email','$sait','$pass')");
    //Проверяем заполнились ли введенные данные в БД
    if ($result == 'true')
    {
    
    //Устанавливаем кодировку СР-1251 по умолчанию
    mysql_query("SET NAMES cp1251");
    //Обрабатуем корректность данных
    $qresult=mysql_query("INSERT INTO user (name,email,sait,pass)
                          VALUES
                          ('".mysql_real_escape_string($name)."',
                           '".mysql_real_escape_string($email)."',
                           '".mysql_real_escape_string($sait)."',
                           '".mysql_real_escape_string($pass)."')");
         //Выводим сообщение после регистрации
    
    	echo "Спасибо регистрация прошла успешно!<br><font color=red><a href=autoriz/aut.php>Нажмите</a> для продолжения.</font>";
    }
    else
    {
    	echo "<b><font color=red>Извините произошла ошибка при добавлении БД!</b>";
    }
    }
    ?>
    

    Теперь напишим конфигурационный файл для соединения с сервером и БД. Назовем его config.php

    <?php
    //Базовое соединение
    $dbserver="localhost";
    $dbname="root";
    $dbpassword="";
    if(mysql_connect ($dbserver,$dbname,$dbpassword));
    else
    {
    	echo "Извините имя пользователя, пароль или сервер указанны не верно!";
    }
    //Соединяемся с Базой Данных
    if (!mysql_select_db ("register")) die ("База данных не найдена! Проверьте правильность БД");
    ?>
    

    Далее создаем папочку js и первым делом загрузим в неё последнюю версию библиотеки JQuery, скачать её можно отсюда
    и создаем еще один файл в этойже папке с именем mymootol.js со следующим кодом:

    jQuery(function()
    {
    //Отображаем элемент, с которым мы будем работать (создаем обертку) и событие, на которое мы будем совершать действие
    jQuery('#link').click(function()
    {
    
    //Отбираем элемент с которым мы будем совершать действие и прописываем, что именно будет с ним происходить
    jQuery('#button').slideDown();
    
    });
    });
    

    Все регистрация готова, приступим к написанию Авторизации!


    Авторизация


    Для начала мы в главной папке создадим папку autoriz, и в этой папочке создаем следующий файл aut.php. Это будет форма нашей авторизации:

    <center><h1><font color="red">Авторизируйтесь пожалуста!</font></h1>
    <!-- Создаем Фому авторизации-->
    <form method="POST" action="auth.php">
    <input type="text" name="email" value="Введите email">
    <input type="text" name="pass" value="Введите пароль"> <br>
    Запомнить меня <input type="checkbox">
    <input type="submit" value="Войти" >
    

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

    <?php
    //Скрипт проверки авторизации
    //Соединение с БД
    include('../config.php');
    //Проверяем заполнены ли поля
    $email = $_POST['email'];
    $pass = $_POST['pass'];
    //Проверяем правильностьввода пароля
    $query= "SELECT * FROM user WHERE email = '$email'";
    //Проверяем пароль
    $auth = mysql_query($query);
    if($auth)
    {
    	$ath = mysql_fetch_array($auth);
    	if($ath['pass'] != $pass)
    	{
    		echo "Вы ввели не верные данные";
    	}
    else
    {
    	//Если пользователь зашел верно устанавливаем Куки
    	//setallcookie($email['email'],$pass['pass']);
    	//Обновляем дату последнего входа
    	//settime($ath['email'], true);
    	//Подключаем резерв если не инклудится конфиг
        //$db=mysql_connect("localhost","root","");
        //mysql_select_db("first_bd",$db);
        echo "<center><H1>Просмотр всех зарегистрированных</H1></h1>";
    	$result=mysql_query("SELECT * FROM user");
    	$myrow=mysql_fetch_array($result);
    	//Выводим всех пользователей по иду начиная с 1(первого)
    	do
    	{
    		printf("Пользователи: %s<br>%s<br>%s<br>%s<br>",$myrow['id'],$myrow['name'],$myrow['email'],$myrow['sait']);
    	}
    	while ($myrow =mysql_fetch_array($result));
    
    }
    }
    ?>
    

    Вот и все наша аутентификация готова, вот так она будет выглядеть:

    Скачать исходники

    Google Bookmarks Digg Reddit Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru МоёМесто.ru





    Предыдущие статьи:


    Следующие статьи:



    Комментарии (48) к статье «Пишем свою регистрацию + авторизацию»

    1. hunty:

      Хотелось бы узнать как все это реализовать с MD5 шифрованием..

    2. Ирина:

      У меня при авторизации, когда нажимаю вход пишет вот такие ошибки:
      Warning: include(register/config.php) [function.include]: failed to open stream: No such file or directory in Z:\home\localhost\www\register\auth.php on line 4

      Warning: include() [function.include]: Failed opening ‘register/config.php’ for inclusion (include_path=’.;/usr/local/php5/PEAR’) in Z:\home\localhost\www\register\auth.php on line 4

      Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in Z:\home\localhost\www\register\auth.php on line 11

      Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in Z:\home\localhost\www\register\auth.php on line 11

    3. admin:

      Ирина вероятнее всего у вас просто неправильно стоят кавычки, точнее стоят апострофы вместо кавычек! Скачайте скрипт и замените файл!

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

    5. А как этот скрипт с точки зрения безопасности?

    6. admin:

      C точки зрения безопасности, я бы его не ставил на свои проекты, самая большая дыра это то что пароль не шифруется! Пост писался для ознакомительных целей. Полную Аутентификацию, полностью безопасную я напишу позже)

    7. Федя:

      А как запустить этот phpMyadmin? пожалуйста очень надо))),заранее спасибо!!!

    8. admin:

      Чтобы запустить PHPMyAdmin на локальном сервере (Например Denwer) следует в браузере ввести следующий Урл:
      http://localhost/Tools/phpMyAdmin/
      Если же на хостинг площадке, то это зависит от панели управления хостингом. Рекомендую обратится в Службу поддержки Хостинга

    9. Сергей:

      спасибо за статью, все работает!

    10. kolyanissimo:

      Не работает одна картинка! После этого текста:
      «5.После нажатия кнопки пошел у нас появилась следующая таблица:» Пожалуйста почините её в ближайшее время, спасибо. Буду пробывать взять за основу вашу регистрацию =)

    11. admin:

      kolyanissimo: Спасибо вам что сообщили об ошибке на сайте. Исправил)

    12. Большое спасибо. Появилась еще одна мысль, но она требует сильной реорганизации старой мысли, займусь завтра. И сразу поделюсь информацией с читателями блога!

    13. Никита:

      Здравствуйте!
      Все сделал как вы сказали только открывается и требует скачать этот фаил.
      Не понимаю почему?

    14. admin:

      Никита, можно подробнее что за файл?
      Скачайте исходники и сверьте с тем что вы делали, может где-то допущена ошибка :)
      http://narod.ru/disk/19899601000/Register.zip.html

    15. Илья:

      Спасибо ОГРОМНОЕ!!! Очень помогло!!!)

    16. Invision:

      Для подключения md5 юзайте что то типо

      md5(‘».$pass.»‘)

    17. Спасибо большое. Очень доходчиво написано. Хотелось бы узнать, как в базу данных внести время и дату регистрации.
      Спасибо.

    18. admin:

      Евгений, просто добавте в таблице ещё одно поле, далее перед оператором INSERT добавьте:

      $data=date('j.m.Y  H:i:s'); 

      После чего немного измените запрос к БД

      INSERT INTO user (name,email,sait,pass,data)
           VALUES('$name','$email'...'$data');
    19. Анатолий:

      Спасибо. Данная тема очень помогла)).

    20. Неплохо. Есть что почитать. Побольшеб таких постов.

    21. philipp:

      «неверные» пишется слитно, а так большое спасибо за статью.

    22. Кирилл:

      Спасбо) полезная статья, но у меня почему-то один раз только может данные записать.
      потом пишет «Извините произошла ошибка…»

    23. Алексей:

      А как это реализовать в MD8?

    24. Станислав:

      Кирилл: Сложно так сказать, нужно код видеть.. Возможно где-то нарушен цикл обработки данных из Бд.
      Алексей: Вы наверное имели ввиду md5 шифрование) Для этого достаточно переменную где хранится пароль вставить в функцию md5():
      $pass = md5($password);
      В этом случае в переменной $pass хранится зашифрованный пароль.

    25. Алексей:

      Вообще у меня не получилось заставить работать этот скрипт((( вроде по инструкциям делал а он выдаёт набор не пойми какой набор букв

    26. Кирилл:

      Фуф…разобрался. Денвер криво встал, и auto_increment не выставилась. но почему-то все значения по 2 раза записывает?

    27. Evgeny97:

      ‘классный набор’ ошибок! вы во всех уроках так учите?
      для Кирилла: потому, что он два раза записывает! посмотри в register.php — два раза подряд INSERT
      для всех: набор букв потому, что везде надо кодировку страниц поставить (UTF8)

    28. Евгений,где вы ошибки то увидели? Второе добавление действительно лишнее, не заметил :)

      Что касается UTF8 только для тех у кого Linux.Данный скрипт НЕ РЕКОМЕНДОВАН для применения на каком либо работающем сайте он не безопасен! Он написан для ознакомления, чтобы человек имел представление как работает регистрация и как её писать :) Я кстати об этом уже писал :)

    29. Evgeny97:

      не считая грамматических, полно ошибок в хтмл (тэги открываются и не закрываются), radio как выбор не работает (надо указать name одинаковый). зачем приделывать jQuery, если все равно выбор не работает? код сделан некрасиво. как будто надерган бессмысленно из разных примеров. на скорость, как говорится не влияет но, прошу без обид, если вы пишите «для начинающих», надо показывать грамотные и правильные примеры.

    30. Евгений , да это одна из первых статей на данном блоге и она писалась в апреле прошлого года) Каюсь, тогда особо грамматические ошибки в статьях не проверял, поэтому не исключаю их наличие. Обязательно на днях перепишу данный пост.
      В остальном ваша критика не обоснованна. Если не закрытые теги вы имеете ввиду инпуты? Да они не закрыты просто в этом посту нет цели писать именно на XHTML, стандарт который уже почти вытеснил html обычный. Поэтому я одно парные теги не закрывал не все же на XHTML пишут)
      Насчет радио кнопок, смотрите там два варианта два радио, первый содержащий правильный ответ обозначен id=link После нажатии на этом флажке, срабатывает функция анонимна, которая говорит:

      jQuery('#link').click(function()
      {
      jQuery('#button').slideDown();
      });
      

      Если был произведен щелчок по элементу с id=link то плавно отобразить плавно элемент с id=button — если вы посмотрите код то увидите что с таким id кнопка. Этакая защита от роботов)) Поэтому, имя им не нужно)
      Что касательно кода он тоже неплохо разбит, не идеально но нормально (отступы присутствуют)!

    31. Evgeny97:

      input не закрываются, знаю, я имел в виду .
      одинаковый name нужен, чтобы при выборе одного снимался выбор с другого

    32. Evgeny97:

      …center… имел в виду

    33. center тоже тег не обязательный к закрыванию :) Впрочем данный тег уже устарел, лучше использовать:
      <div align=’center’>Text</div>

    34. Нормальный у тебя блогик. Добавляю в букмарклет.

    35. Relo:

      Здравствуйте. Кто нить помогите мне пожалуйста, у меня проблема в PhpMyAdmin, коротко я когда создаю новую БД у меня пишет » #1044 — Access denied for user ‘user’@'localhost’ to database ‘register’ »
      - я в инете поискал как нибудь исправить эту ошибку НО у меня так не че не получился, кто нибудь знает как исправить эту ошибку? ?? D:

    36. Дык она и не создастся)) У пользователя user под которым ты пытаешся войти нет прав.. Поэтому ты даже к БД подключится не можешь) Установи права все пользователю user… Или используй пользователя root если это локалка)

    37. dreams:

      Здравствуйте. А как привязать к локальному сайту БД и эту же регистрацию?

    38. Андрей:

      Захожу в phpmyadmin, а там все на английском тексте.Подскажите , что делать.
      Заранее благодарен.

    39. Relo:

      «Станислав (mzcoding)» — спасибо большое за совет!!!

    40. Ярослав:

      Здравствуйте. у меня после регистрации в phpmyadmin заносится две записи вместо одной?

    41. Ярослав удалите в обработчике вот этот код:
      $qresult=mysql_query(«INSERT INTO user (name,email,sait,pass)
      VALUES
      (‘».mysql_real_escape_string($name).»‘,
      ‘».mysql_real_escape_string($email).»‘,
      ‘».mysql_real_escape_string($sait).»‘,
      ‘».mysql_real_escape_string($pass).»‘)»);

      А вообще рекомендую использовать регистрацию от сюда http://mzcoding.ru/?p=821 она более новая и безопасная)

    42. Ярослав:

      Спасибо, Станислав (mzcoding).
      Все получилось)
      А вот тут еще один вопросик, в архиве есть часть кода «Проверяем, не существует ли пользователя с таким мылом», что-то не получается его задействовать??

    43. Ольга:

      Я уже было обрадовалась,когда хотела посмотреть как работает регистрация, но тут же расстроилась…После того,как я нажимаю кнопку ЗАРЕГИСТРИРОВАТЬСЯ, вылазит тупо код php((( В чем дело не пойму,помогите…

    44. дима:

      а кто можеть создать форму регистрации. пример:
      (
      имя: ……
      фамилия: ……
      емаил: …….
      логин: …….
      пароль: ……
      )

    45. а как сделать авторизацию с сессиями?

    46. Почитайте эту статью http://mzcoding.ru/?p=821

      Там все написано

    47. Наконец то нашел решение!

    48. Гошка:

      Скачка не работает…

    Комментарии

    Получать новые комментарии по электронной почте. Вы можете подписатьсяi без комментирования.

    logo

    logo

    Каталог@MAIL.RU - каталог ресурсов интернет Rambler's Top100
    Мир программирования· Все права защищенны © 2010 |  Связаться с автором | © mzcoding .