
Здравствуйте уважаемые читатели и подписчики сайта www.mzcoding.ru. Сегодня мы будем с вами делать форму регистрации + авторизации на PHP и MySQL.
И так давайте начинать, для начала мы с вами создадим Базу Данных чтобы нам было легче мы будем использовать phpmyadmin:
1.Откроем phpmyadmin










Первое что мы сделаем это создадим каталог с именем register в этом каталоге у нас будут 4 файла
+ каталоги js и auto
Вот так будет выглядеть примерная иерархия каталога register:
Теперь давайте создадим файл с именем 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>Для завершения регистрации ответьте на один вопрос: <font color="red">Сколько будет 5+3?</font></p>
<input type="radio" id="link"> <b>8</b> <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();
});
});
Все регистрация готова, приступим к написанию Авторизации!
<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));
}
}
?>
Вот и все наша аутентификация готова, вот так она будет выглядеть:
Хотелось бы узнать как все это реализовать с MD5 шифрованием..
У меня при авторизации, когда нажимаю вход пишет вот такие ошибки:
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
Ирина вероятнее всего у вас просто неправильно стоят кавычки, точнее стоят апострофы вместо кавычек! Скачайте скрипт и замените файл!
доброго времени, подскажите, какой код надо ставить вначале страничек ,которые должны быть доступны только зарегиным пользователям
А как этот скрипт с точки зрения безопасности?
C точки зрения безопасности, я бы его не ставил на свои проекты, самая большая дыра это то что пароль не шифруется! Пост писался для ознакомительных целей. Полную Аутентификацию, полностью безопасную я напишу позже)
А как запустить этот phpMyadmin? пожалуйста очень надо))),заранее спасибо!!!
Чтобы запустить PHPMyAdmin на локальном сервере (Например Denwer) следует в браузере ввести следующий Урл:
Если же на хостинг площадке, то это зависит от панели управления хостингом. Рекомендую обратится в Службу поддержки Хостинга
спасибо за статью, все работает!
Не работает одна картинка! После этого текста:
«5.После нажатия кнопки пошел у нас появилась следующая таблица:» Пожалуйста почините её в ближайшее время, спасибо. Буду пробывать взять за основу вашу регистрацию =)
kolyanissimo: Спасибо вам что сообщили об ошибке на сайте. Исправил)
Большое спасибо. Появилась еще одна мысль, но она требует сильной реорганизации старой мысли, займусь завтра. И сразу поделюсь информацией с читателями блога!
Здравствуйте!
Все сделал как вы сказали только открывается и требует скачать этот фаил.
Не понимаю почему?
Никита, можно подробнее что за файл?
Скачайте исходники и сверьте с тем что вы делали, может где-то допущена ошибка
Спасибо ОГРОМНОЕ!!! Очень помогло!!!)
Для подключения md5 юзайте что то типо
md5(‘».$pass.»‘)
Спасибо большое. Очень доходчиво написано. Хотелось бы узнать, как в базу данных внести время и дату регистрации.
Спасибо.
Евгений, просто добавте в таблице ещё одно поле, далее перед оператором INSERT добавьте:
$data=date('j.m.Y H:i:s');После чего немного измените запрос к БД
INSERT INTO user (name,email,sait,pass,data) VALUES('$name','$email'...'$data');Спасибо. Данная тема очень помогла)).
Неплохо. Есть что почитать. Побольшеб таких постов.
«неверные» пишется слитно, а так большое спасибо за статью.
Спасбо) полезная статья, но у меня почему-то один раз только может данные записать.
потом пишет «Извините произошла ошибка…»
А как это реализовать в MD8?
Кирилл: Сложно так сказать, нужно код видеть.. Возможно где-то нарушен цикл обработки данных из Бд.
Алексей: Вы наверное имели ввиду md5 шифрование) Для этого достаточно переменную где хранится пароль вставить в функцию md5():
$pass = md5($password);
В этом случае в переменной $pass хранится зашифрованный пароль.
Вообще у меня не получилось заставить работать этот скрипт((( вроде по инструкциям делал а он выдаёт набор не пойми какой набор букв
Фуф…разобрался. Денвер криво встал, и auto_increment не выставилась. но почему-то все значения по 2 раза записывает?
‘классный набор’ ошибок! вы во всех уроках так учите?
для Кирилла: потому, что он два раза записывает! посмотри в register.php — два раза подряд INSERT
для всех: набор букв потому, что везде надо кодировку страниц поставить (UTF8)
Евгений,где вы ошибки то увидели? Второе добавление действительно лишнее, не заметил
Что касается UTF8 только для тех у кого Linux.Данный скрипт НЕ РЕКОМЕНДОВАН для применения на каком либо работающем сайте он не безопасен! Он написан для ознакомления, чтобы человек имел представление как работает регистрация и как её писать
Я кстати об этом уже писал
не считая грамматических, полно ошибок в хтмл (тэги открываются и не закрываются), radio как выбор не работает (надо указать name одинаковый). зачем приделывать jQuery, если все равно выбор не работает? код сделан некрасиво. как будто надерган бессмысленно из разных примеров. на скорость, как говорится не влияет но, прошу без обид, если вы пишите «для начинающих», надо показывать грамотные и правильные примеры.
Евгений , да это одна из первых статей на данном блоге и она писалась в апреле прошлого года) Каюсь, тогда особо грамматические ошибки в статьях не проверял, поэтому не исключаю их наличие. Обязательно на днях перепишу данный пост.
В остальном ваша критика не обоснованна. Если не закрытые теги вы имеете ввиду инпуты? Да они не закрыты просто в этом посту нет цели писать именно на XHTML, стандарт который уже почти вытеснил html обычный. Поэтому я одно парные теги не закрывал не все же на XHTML пишут)
Насчет радио кнопок, смотрите там два варианта два радио, первый содержащий правильный ответ обозначен id=link После нажатии на этом флажке, срабатывает функция анонимна, которая говорит:
jQuery('#link').click(function() { jQuery('#button').slideDown(); });Если был произведен щелчок по элементу с id=link то плавно отобразить плавно элемент с id=button — если вы посмотрите код то увидите что с таким id кнопка. Этакая защита от роботов)) Поэтому, имя им не нужно)
Что касательно кода он тоже неплохо разбит, не идеально но нормально (отступы присутствуют)!
input не закрываются, знаю, я имел в виду .
одинаковый name нужен, чтобы при выборе одного снимался выбор с другого
…center… имел в виду
center тоже тег не обязательный к закрыванию
Впрочем данный тег уже устарел, лучше использовать:
<div align=’center’>Text</div>
Нормальный у тебя блогик. Добавляю в букмарклет.
Здравствуйте. Кто нить помогите мне пожалуйста, у меня проблема в PhpMyAdmin, коротко я когда создаю новую БД у меня пишет » #1044 — Access denied for user ‘user’@'localhost’ to database ‘register’ »
- я в инете поискал как нибудь исправить эту ошибку НО у меня так не че не получился, кто нибудь знает как исправить эту ошибку? ?? D:
Дык она и не создастся)) У пользователя user под которым ты пытаешся войти нет прав.. Поэтому ты даже к БД подключится не можешь) Установи права все пользователю user… Или используй пользователя root если это локалка)
Здравствуйте. А как привязать к локальному сайту БД и эту же регистрацию?
Захожу в phpmyadmin, а там все на английском тексте.Подскажите , что делать.
Заранее благодарен.
«Станислав (mzcoding)» — спасибо большое за совет!!!
Здравствуйте. у меня после регистрации в phpmyadmin заносится две записи вместо одной?
Ярослав удалите в обработчике вот этот код:
$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).»‘)»);
А вообще рекомендую использовать регистрацию от сюда она более новая и безопасная)
Спасибо, Станислав (mzcoding).
Все получилось)
А вот тут еще один вопросик, в архиве есть часть кода «Проверяем, не существует ли пользователя с таким мылом», что-то не получается его задействовать??
Я уже было обрадовалась,когда хотела посмотреть как работает регистрация, но тут же расстроилась…После того,как я нажимаю кнопку ЗАРЕГИСТРИРОВАТЬСЯ, вылазит тупо код php((( В чем дело не пойму,помогите…
а кто можеть создать форму регистрации. пример:
(
имя: ……
фамилия: ……
емаил: …….
логин: …….
пароль: ……
)
а как сделать авторизацию с сессиями?
Почитайте эту статью
Там все написано
Наконец то нашел решение!
Скачка не работает…