Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

  Раздел: Компьютерная документация -> Интернет технологии -> PHP

 

Подтверждение регистрации на РНР

Скачать исходник (2.75Kb)

Привет всем кто в данный момент находиться в этой воображаемой аудитории, и сейчас будет слушать невыносимый бред старого профессора 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

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

Автор: Карпенко Кирилл
Источник: www.codenet.ru

Ссылки по теме
Внутренние функции
Обработка строк в РНР
PHP и всё такое...
Пишем PHP код, устойчивый к ошибкам
Полезные скрипты на PHP
Почтовые функции в РНР
Полезные функции для работы с файловой системой

Вся документация PHP

 

Компьютерная документация от А до Я - Главная

 
Популярные книги

Photoshop CS2 для пользователя

Подробнее

Общая информатика. Универсальный курс

Подробнее

Ремонт и обслуживание компьютера дома

Подробнее


 
Новости ИТ
04.12.2008  В Windows 7 запуск приложений Direct3D 10/10.1 будет возможен на CPU
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с зашитой данных
04.12.2008  A-DATA выпускает двух- и трёхканальные наборы памяти DDR3-1800+ в серии XPG Plus
04.12.2008  MOTOROKR EM35
04.12.2008  Шведский производитель ковриков для мышей выпустил игровую гарнитуру
04.12.2008  eGo BlackBelt и Encrypt - пара новых портативных HDD Iomega с защитой данных
04.12.2008  Вышла вторая бета-версия Windows Vista SP2
04.12.2008  Внешний SSD-накопитель с поддержкой eSATA и USB
04.12.2008  Флэшка OCZ со встроенным кард-ридером
04.12.2008  Весрия «ПАУ» 1.8.2 будет содержать новый функционал
04.12.2008  Компания «Русские Информационные Технологии» подготовила бета-версию программы «Печать конвертов!»
04.12.2008  Телефон премиум-класса с двумя SIM-картами
04.12.2008  High-end десктопы Asus Eee Box
04.12.2008  Видеокарта NVIDIA Quadro FX 4800 для профессионалов
04.12.2008  Экстремальные внешние HDD от Iomega
04.12.2008  MSI EX300 - 13.3 дюйма для развлечения
04.12.2008  SATA 3.0 появится в следующем году
04.12.2008  Mini-ITX-плата Zotac на основе логики NVIDIA и с поддержкой Wi-Fi
04.12.2008  Корпус NZXT Zero 2: улучшенное охлаждение и строгий дизайн
04.12.2008  Конвертеры: Xilisoft Video Converter v.5.1.7.1128
 
Полезно

интернет магазин продажа сотовых телефонов
Желаете совершить покупку выставочные стенды от специалистов? Всегда готовы помочь!
 
Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100