Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Движение шарика в эллиптическои параболоиде на Delphi [OpenGL] + Блок схемы
Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...
Моделирование процесса обеспечивающего надежность функционирования АСУ Т...

Подтверждение регистрации на РНР
Привет всем кто в данный момент находиться в этой воображаемой аудитории, и
сейчас будет слушать невыносимый бред старого профессора J



Что ж, коль начали так, то тема сегодняшней лекции будет такова - "Подтверждение
регистрации на РНР".



Да, это сейчас довольно популярный механизм, и хоть иногда он кажется
невообразимо сложным, он настолько же прост как ваш первый калькулятор на РНР.
Касательно технических требований от вашего сервера для воплощения всего того,
что мы будем сейчас делать, так вам потребуется ни много, ни мало сам РНР,
желательно не ниже 4.39 и конечно установленная СУБД (в этой лекции я буду
основываться на MySQL- приемлемом SQL коде).



Итак, небольшое лирическое вступление прошли, теперь давайте погрузимся в мир
программирования и этих чёртовых алгоритмов. Для начала нам нужно будет написать
функцию для регистрации пользователя на вашем сайте. После нужно будет послать
письма пользователю, с уведомлением о регистрации и предупреждение что коль
зарегистрировался то будь любезен, перейти по ссылки и подтвердить это, так, для
уверенности, что ты не "хацкер". Ну, и третьим нашим шагом будет проверке той
самой активации. И четвёртым шагом как вы уже догадались (ведь так?), будет
звонок J . Итак, давайте поподробнее поговорим про регистрацию. Эта часть
довольно не сложная, и если вы знаете, как её делать, не советую читать дальше,
а сразу переходить ко второму шагу.



Попрощаемся со всеми, кто пошёл на практику, пусть земля им будет пухом J , ну а
мы с вами будем сейчас делать первый шаг в функциональной базе проекта.



Но сначала давайте расставим все точки над "и". Для регистрации нам понадобиться
табличка в БД с именем, скажем, "users". Там должны быть следующие поля: id,
login, passwd, email, status. Это минимальный набор полей, и при желании можете
их дополнить. В поле пароля, мы будем записывать не просто текстовое значение
пароля, а его шифрованный вариант (MD5).



Ну, мне кажется, что на этом можно закончить это разглагольствование и перейти к
практической части:

<?



//Интерфейс пользователя



echo"<html>";



echo"<head>";



echo"<title>ShockStudio RegistrationModule</title>";



echo"<meta http-equiv=\"Content-Type\" Content=\"text/html;

charset=windows-1251\">";



echo"<meta name=\"Author\" Content=\"LoRd aka K.Karpenko\">";



echo"<meta name=\"owner\" Content=\"ShockStudio Team\">";



echo"</head>";



echo"<body onLoad=\"alert('All rights reserved !')\">";



echo"<form action=\"\" method=\"post\" name=\"reg\">";



echo"<table style=\"width:400px; height:50px;border:1px;\"

align=\"center\">";



echo"<tr><td colspan=\"2\" style=\"text-align:center\">

Регистрационная форма</td></tr>";



echo"<tr><td>Ваш логин:</td><td><input

type=\"text\" name=\"login\"></td></tr>";



echo"<tr><td>Ваш пароль:</td><td><input

type=\"password\" name=\"passwd\"></td></tr>";



echo"<tr><td>Ваш email:</td><td><input

type=\"email\" name=\"email\"></td></tr>";



echo"<tr><td>Ваш IP:</td><td>".$_SERVER['REMOTE_ADDR'].

"</td></tr>";



echo"<tr><Td colspan=\"2\"><input type=\"submit\" name=\"reg\"

value=\"Далее\"></td></tr>";



echo"</table>";



echo"</form>";



//Если кнопка была нажата то проверяем данные



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

$login=$_POST['login'];

$passwd=$_POST['passwd'];

$email=$_POST['email'];

$ip=$_SERVER['REMOTE_ADDR'];

if(trim($login)==''){

die("Вы не ввели логин !");

}



if(trim($passwd)=='') {

die("Вы не ввели пароль !");

}



if(trim($email)=='') {

die("Вы не ввели ваш EMAIL !");

}



//Проверяем валидность электронного адреса пользователя



if (!preg_match("/^[a-zA-Z0-9_\-.]+@(?:[a-zA-Z0-9_]{1,3})

+\.[a-zA-Z0-9_]{1,3})+(\.[a-zA-Z0-9_]{1,3})*/",$email)){

die("Ошибочный формат EMAIL-адреса !");

}



//Пароль не должен быть менее 3-х символов

if(strlen($passwd)<3) {

die("Длина пароля должна быть не менее 3-х символов !");

}



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

$passwd=md5($passwd);



//Соединение с БД

$conn_id=@mysql_connect("localhost","root","") or die("Ошибка при подключении к
БД!");

@mysql_select_db($conn_id);



//А пользователь ещё не зарегистрирован ?



$q=@mysql_query("SELECT id FROM `users` WHERE login='".$login."' OR

email='".$email."'",$conn_id);



if(@mysql_error($conn_id)!='') {

die("Ошибка в запросе к БД !");

}



if(@mysql_num_rows($q)!=0) {

die("Данный пользователь уже зарегистрирован !");

}

else {

unset($q);

//Регистрируем пользователя

$q=@mysql_query("INSERT into `users` VALUES('','".$login."','".$passwd.

"','".$email."','".$ip."','off')",$conn_id);



if(@mysql_error($conn_id)!='') {

die("Ошибка в запросе к БД!");

}

}



/**



*Начинаем процесс составления ХЕШ-подписи, для подтверждения личности

*пользователя при активации



**/



//Получаем логин пользователя в EMAIL-сети



$email_cnx=explode("@",$email);



//Формируем подпись

$checkSum=base64_encode(substr($login,0,3).$email_cnx[0].

md5($_SERVER['REMOTE_ADDR']));



//Получаем временную метку



$date=time();

unset($q);



//Добавляем данные во временную таблицу



$q=@mysql_query("INSERT into `validate_temp` VALUES('','".$email."','".

$checkSum."','".$date."')",$conn_id);



if(@mysql_error($conn_id)!='') {

die("Ошибка в запросе к БД !");

}



//Сообщение зарегистрированному пользователю



$message="Сегодня в ".date("d.m.Y",$date)."на сайте ShockStudio.COM был

зарегистрирован

пользователь с вашим email'ом. Поэтому вы получили данное письмо. Если вы не

регистрировались на нашем сайте, то попросту удалите данное письмо, а если

же это были вы то перейдите по нижеприведённой ссылке.



Аккаунт будет действителен до

".date("d.m.Y",mktime(0,0,0,date("d",$date)+4,date("m",$date),date("Y",$date))).",


после чего аккаунт зарегистрировать будет невозможно !



Ссылка для активации:<a

href=\"activate.php?checkSum=".$checkSum."&email=".$email."\">Перейти</a>;



-----------------------------



С уважением администрация ShockStudio.COM

Email для контактов:<a href=\"mailto: Ik1990@list.ru\"> Ik1990@list.ru </a>";



//Посылаем сообщение пользователю



@mail($email,"Активация аккаунта",$message,"Content-Type: text/html;

charset=windows-1251","From: robot@shockstudio.com");



@mysql_close();



?>



Как видите, особо сложного здесь нет ничего, ну за исключением временных меток.
Мы формируем все эти метки с целью проверки времени активации. Ведь если
пользователь целенаправленно регистрируется, он не будет ждать дни и ночи, для
активации счета.



Ну, теперь мои дорогие студенты, мы перейдём к главному этапу нашей лекции, а
именно проверки и соответственно активации аккаунта.



Как вы уже поняли, вам нужно создать отдельный скрипт, который будет проверять
валидность данных переданным по ссылке, которую получит пользователь, Принцип
проверки в том, чтобы сформировать новую подпись в соответствии с теми данным,
которые получены от пользователя и через ссылку, по которой он пришёл. После,
если данные верны, мы активируем аккаунт пользователя и говорим "Хай", иначе
говорим "Бай" J .



Давайте посмотрим, как это выглядит:

<?



$checkSum=$_GET['checkSum'];



$email=$_GET['email'];



$ip=$_SERVER['REMOTE_ADDR'];



$conn_id=@mysql_connect("localhost","root","") or die("Ошибка при подключении к
БД!");

@mysql_select_db($conn_id);

$q=@mysql_query("SELECT id FROM `validate_temp` WHERE
email='".$email."'",$conn_id);



if(@mysql_error($conn_id)!='') {

die("Ошибка в запросе к БД !");

}



if(@mysql_num_rows($q)==0) {

die("Ошибка при проверке данных !");

}



$q=@mysql_query("SELECT login,date FROM `users` WHERE email='".$email."'");



$row=@mysql_fetch_array($q);



$login=$row['login'];

$date=$row['date'];



$time=time();



$total_date=$time-$date;



$date=$time+$total_date;



$end_time=date("d:m",$time);



$date_stamp=explode(":",$end_time);



if($date_stamp[1]!=date("m",$date) || ($date_stamp[0]-date("m",$date))>4) {

die("Просроченая активация аккаунта !");

}



$email_cnx=explode("@",$email);

$new_checkSum=base64_encode(substr($login,0,3).$email_cnx[0].md5($_SERVER['REMOTE_ADDR']));



if($checkSum!=$new_checkSum) {

die("Ошибка при проверке ключа !");

}

else {

unset($q);

$q=@mysql_query("UPDATE `users` SET status='on' WHERE
email='".$email."'",$conn_id);

if(@mysql_error($conn_id)!='') {

die("Ошибка в запросе к БД !");

}

}



$q=@mysql_query("DELETE FROM `validate_temp` WHERE email='".$email."'",
$conn_id);



if(@mysql_error($conn_id)!=''){

die("Ошибка в запросе к БД !");

}



@mysql_close($conn_id);



?>



Вот и всё. Как видите, ничего сложного здесь нет. Сначала мы проверяем,
присутствует ли аккаунт с подобным EMAIL в таблице для активации, и если нет то
мерси боку. После мы достаём значение логина и даты регистрации с таблицы. После
чего мы проверяем, не просрочена ли активация, заметьте весьма оригинальным
способом. То есть сначала мы получаем дату регистрации, и дату текущую. После
этого мы получаем разницу текущей временной метки, и временной метки во время
регистрации, после чего мы прибавляем разницу временных меток к временной метки
во время регистрации (J ), ну а в следствии мы получаем значение дня и месяца с
результирующей временной метки (прям скороговорка какая-то J ), и уже только
после этого проводим проверку дат. Она заключается в том, чтобы проверить, равны
ли месяцы во время регистрации или после, ну, то есть если нет, то она уж точно
непригодная к активации, если же они равны то проверяем значение разности дней,
и если разность больше 4-х, то прекращаем работу.



Видите, я ж говорил, всё чрезвычайно легко J



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



С вами был LoRd ака Кирилл Карпенко. Всем неравнодушным писать на
Ik1990@list.ru!
Опубликовал Kest November 05 2008 21:40:37 · 0 Комментариев · 11924 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
ATComponents
Win-Prolog 3.618
C++ : библиотека ...
SearchAndReplace
NetGraph [Исходни...
Библия хакера 2. ...
THttpScan v4.1
Анекдоты с ostrie.ru
index.php + мод ...
MiniChat
Язык программиров...
Indy in Depth Глу...
Технология .Net в VB
JanButtonsV
БД студентов
Расширенный загру...
Программирование ...
Применение жадног...
Программа для рис...
Основы программир...

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Работа с модулями ...
Использование моде...
Играйте в бесплатн...
Исходные положения...
Создать глобальный...
Убрать копирайт в ...
Официальный сайт ...
Оптимизация под MSN
Понижение цветовой...
Практика
Первое обновление ...
Синтаксис макросов...
Имитационное модел...
Микроконтроллер Ad...
7.6. Задачи
Разборка приставки...
Формат и типы сооб...
ОГП обладает приор...
Поиск в упорядочен...
6.3. Принципы
Свойства информаци...
PMCasino: выгодные...
Режим воспроизведе...
Пример списка из н...
На чем основан поиск
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?