Лош регистър на членове php. Изграждане на невероятно проста система за регистрация в PHP и MySQL

Създаването на сайт, базиран на членство, в началото изглежда като трудна задача. Ако някога сте искали да направите това сами, а след това просто сте се отказали, когато сте започнали да мислите как ще го сглобите, използвайки вашите PHP умения, тогава тази статия е за вас. Ще ви преведем през всеки аспект от създаването на сайт, базиран на членство, със защитена зона за членове, защитена с парола.

Целият процес се състои от две големи части: регистрация на потребител и удостоверяване на потребителя. В първата част ще разгледаме създаването на регистрационна формаи съхраняване на данните в MySQL база данни. Във втората част ще създадем формата за влизане и ще я използваме, за да позволим на потребителите достъп в защитената зона.

Изтеглете кода

Можете да изтеглите целия изходен код за системата за регистрация/вход от връзката по-долу:

Конфигуриране и качване
Файлът ReadMe съдържа подробни инструкции.

Отворете източник\include\membersite_config.phpфайл в текстов редактор и актуализирайте конфигурацията. (Влизане в база данни, име на уебсайта ви, имейл адрес и т.н.).

Качете цялото съдържание на директорията. Тествайте register.php, като изпратите формуляра.

Формата за регистрация

За да създадем потребителски акаунт, трябва да съберем минимално количество информация от потребителя. Имаме нужда от неговото име, неговия имейл адрес и желаното от него потребителско име и парола. Разбира се, можем да поискаме повече информация на този етап, но дългата форма винаги е отблъскваща. Така че нека се ограничим само до тези полета.

Ето формата за регистрация:

Регистрирайте се

И така, имаме текстови полета за име, имейл и парола. Обърнете внимание, че използваме за по-добра използваемост.

Валидиране на формуляр

На този етап е добра идея да поставите някакъв код за валидиране на формуляр, така че да сме сигурни, че разполагаме с всички данни, необходими за създаване на потребителски акаунт. Трябва да проверим дали името, имейлът и паролата са попълнени и дали имейлът е в правилния формат.

Обработка на подаването на формуляра

Сега трябва да обработваме данните от формуляра, които са изпратени.

Ето последователността (вижте файла fg_membersite.php в изтегления източник):

функция RegisterUser() ( if(!isset($_POST["submitted"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($) formvars);

Първо, ние валидираме подаването на формуляра. След това събираме и „дезинфекцираме“ данните за подаване на формуляр (винаги правете това, преди да изпратите имейл, да запазите в база данни и т.н.). След това подаването на формуляра се записва в таблицата на базата данни. Изпращаме имейл до потребителя с искане за потвърждение. След това съобщаваме на администратора, че даден потребител се е регистрирал.

Запазване на данните в базата данни

Сега, след като събрахме всички данни, трябва да ги съхраним в базата данни.
Ето как запазваме изпратения формуляр в базата данни.

функция SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Неуспешно влизане в базата данни!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Този имейл вече е регистриран"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Това потребителско име вече е използвано. Моля, опитайте с друго потребителско име"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Вмъкването в базата данни е неуспешно!"); return false;

Имайте предвид, че сте конфигурирали данните за вход в базата данни във файла membersite_config.php. В повечето случаи можете да използвате „localhost“ за хост на база данни.
След като влезем, се уверяваме, че таблицата съществува. (Ако не, скриптът ще създаде необходимата таблица).
След това се уверяваме, че потребителското име и имейлът са уникални. Ако не е уникален, връщаме грешката обратно на потребителя.

Структурата на таблицата на базата данни

Това е структурата на таблицата. Функцията CreateTable() във файла fg_membersite.php създава таблицата. Ето кода:

функция CreateTable() ( $qry = "Създаване на таблица $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT," "име VARCHAR(128) NOT NULL," "имейл VARCHAR(64) NOT NULL," " "phone_number VARCHAR(16) NOT NULL," "потребителско име VARCHAR(16) NOT NULL," "парола VARCHAR(32) NOT NULL," "потвърдете код VARCHAR(32)", " ")"; if(!mysql_query($qry,$ this->connection)) ( $this->HandleDBError("Грешка при създаването на таблицата \nquery беше\n $qry"); return false; ) return true )

Полето id_user ще съдържа уникалния идентификатор на потребителя и също така е първичният ключ на таблицата. Забележете, че допускаме 32 знака за полето за парола. Правим това, защото като допълнителна мярка за сигурност ще съхраним паролата в базата данни, шифрована с помощта на MD5. Моля, имайте предвид, че тъй като MD5 е еднопосочен метод за криптиране, няма да можем да възстановим паролата, в случай че потребителят я забрави.

Вмъкване на регистрацията в таблицата

Ето кода, който използваме за вмъкване на данни в базата данни. Ще разполагаме с всички наши данни в масива $formvars.

функция InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = " вмъкнете в".$this->tablename."(име, имейл, потребителско име, парола, код за потвърждение) стойности ("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this -> SanitizeForSQL($formvars["email"]) . $this->SanitizeForSQL($formvars["username"]) "," md5($formvars["password"]) ". ", "". $confirmcode. """; if(!mysql_query($insert_query,$this->connection)) ( $this->HandleDBError("Грешка при вмъкване на данни в таблицата\nquery:$insert_query"); return невярно; връща истина;

Забележете, че използваме PHP функцията md5() за шифроване на паролата, преди да я вмъкнем в базата данни.
Също така, ние правим уникалния код за потвърждение от имейл адреса на потребителя.

Изпращане на имейли

След като имаме регистрацията в нашата база данни, ще изпратим имейл за потвърждение на потребителя. Потребителят трябва да щракне върху връзка в имейла за потвърждение, за да завърши процеса на регистрация.

функция SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Вашата регистрация с ".$this->sitename; $this->GetFromAddress(); $this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Hello" n\r\n". "Благодарим ви за регистрацията с ".$this->sitename."\r\n". "Моля, щракнете върху връзката по-долу, за да потвърдите регистрацията си.\r\n." "$confirm_url\r \n". "\r\n". "Поздрави,\r\n". "Уеб администратор\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Неуспешно изпращане на имейл за потвърждение."); return false; return true)

Актуализации

9 януари 2012 г
Добавени са функции за нулиране на парола/промяна на парола
Кодът вече е споделен в GitHub.

Добре дошъл отновоПълно име на потребител (); ?>!

Лиценз


Кодът се споделя под лиценз LGPL. Можете свободно да го използвате на търговски или некомерсиални уебсайтове.

Няма свързани публикации.

Коментарите за този запис са затворени.

В тази статия ще научите как да създадете формуляр за регистрация и оторизацияизползвайки HTML, JavaScript, PHP и MySql. Такива форми се използват на почти всеки уебсайт, независимо от вида му. Създадени са и за форума, и за онлайн магазина, и за социалните мрежи(като Facebook, Twitter, Odnoklassniki) и за много други видове сайтове.

Ако имате уебсайт на вашия локален компютър, тогава се надявам, че вече имате инсталиран и работещ локален сървър. Без него нищо няма да работи.

Създаване на таблица в базата данни

За да осъществим регистрация на потребители, първо се нуждаем от база данни. Ако вече го имате, тогава е чудесно, в противен случай трябва да го създадете. В статията обяснявам подробно как да направите това.

И така, имаме база данни (съкратено DB), сега трябва да създадем таблица потребителив който ще добавим нашите регистрирани потребители.

Също така обясних как да създадете таблица в база данни в статията.

Преди да създадем таблица, трябва да определим какви полета ще съдържа. Тези полета ще съответстват на полетата от регистрационния формуляр. потребителиИ така, помислихме, представихме си какви полета ще има нашата форма и създадохме таблица

  • с тези полета: id с тези полета:- Идентификатор. Поле
  • Всяка таблица в базата данни трябва да го има. first_name
  • - За да запазите името.фамилно_име
  • - Да се ​​запази фамилията.- За да запазите пощенския адрес. Ще използваме имейл като вход, така че това поле трябва да е уникално, тоест да има индекс UNIQUE.
  • email_status- Поле за посочване дали имейлът е потвърден или не. Ако пощата е потвърдена, тогава тя ще има стойност 1, в противен случай стойността е 0.
  • парола- За да запазите паролата.


Ако искате вашата регистрационна форма да има други полета, можете също да ги добавите тук.

Това е нашата маса потребителиготов. Да преминем към следващия етап.

Връзка с база данни

Създадохме базата данни, сега трябва да се свържем с нея. Ще се свържем с използвайки PHP MySQLi разширения.

В папката на нашия сайт създайте файл с името dbconnect.phpи напишете следния скрипт в него:

Грешка при свързване с DB. Описание на грешката: ".mysqli_connect_error()."

"; exit(); ) // Задайте кодиране на връзката $mysqli->set_charset("utf8"); // За удобство добавете тук променлива, която ще съдържа името на нашия сайт $address_site = "http://testsite .local" ; ?>

Този файл dbconnect.phpще трябва да се свърже с манипулатори на формуляри.

Забележете променливата $address_site, тук посочих името на моя тестов сайт, върху който ще работя. Моля, посочете съответно името на вашия сайт.

Структура на сайта

Сега нека да разгледаме HTML структурата на нашия сайт.

Ще преместим горния и долния колонтитул на сайта в отделни файлове, header.phpИ долен колонтитул.php. Ще ги включим на всички страници. А именно на главната страница (файл index.php), към страницата с регистрационната форма (файл form_register.php) и към страницата с формуляра за оторизация (файл form_auth.php).

Блокирайте с нашите връзки, регистрацияИ упълномощаване, добавете ги към заглавката на сайта, така че да се показват на всички страници. Една връзка ще бъде въведена на страница с формуляр за регистрация(файл form_register.php), а другата към страницата с формуляр за оторизация(файл form_auth.php).

Съдържание на файла header.php:

Име на нашия сайт

В резултат нашата главна страница изглежда така:


Разбира се, вашият сайт може да има съвсем различна структура, но това не е важно за нас сега. Основното е, че има връзки (бутони) за регистрация и оторизация.

Сега да преминем към формата за регистрация. Както вече разбирате, ние го имаме в архива form_register.php.

Отидете в базата данни (в phpMyAdmin), отворете структурата на таблицата потребителии вижте какви полета имаме нужда. Това означава, че имаме нужда от полета за въвеждане на собствено и фамилно име, поле за въвеждане на пощенски адрес (Email) и поле за въвеждане на парола. И от съображения за сигурност ще добавим поле за въвеждане на captcha.

На сървъра, в резултат на обработката на регистрационната форма, могат да възникнат различни грешки, поради които потребителят няма да може да се регистрира. Следователно, за да може потребителят да разбере защо регистрацията е неуспешна, е необходимо да се показват съобщения за тези грешки.

Преди да покажете формуляра, добавете блок за показване на съобщения за грешка от сесията.

И още нещо, ако потребителят вече е оторизиран и от любопитство отива директно на страницата за регистрация, като пише в адресната лента на браузъра адрес_на_сайт/формуляр_регистр.php, тогава в този случай вместо формата за регистрация ще покажем заглавка, че той вече е регистриран.

Като цяло, кодът на файла form_register.phpполучихме това:

Вие вече сте регистрирани

В браузъра страницата с формуляра за регистрация изглежда така:


С помощта на задължителен атрибут, направихме всички полета задължителни.

Обърнете внимание на кода на регистрационния формуляр, където се показва captcha:


Ние посочихме пътя до файла в стойността на атрибута src за изображението captcha.php, който генерира този captcha.

Нека да разгледаме кода на файла captcha.php:

Кодът е добре коментиран, така че ще се спра само на една точка.

Вътре във функция imageTtfText(), пътят до шрифта е посочен verdana.ttf. Така че, за да работи правилно captcha, трябва да създадем папка шрифтовеи поставете файла с шрифта там verdana.ttf. Можете да го намерите и изтеглите от интернет или да го вземете от архива с материалите на тази статия.

Приключихме с HTML структурата, време е да продължим.

Проверка на валидността на имейл с помощта на jQuery

Всеки формуляр трябва да проверява валидността на въведените данни, както от страна на клиента (с използвайки JavaScript, jQuery) и от страната на сървъра.

Трябва да обърнем специално внимание на полето Email. Много е важно въведеният пощенски адрес да е валиден.

За това поле за въвеждане задаваме типа имейл (type="email"), това леко ни предупреждава срещу неправилни формати. Но това не е достатъчно, защото чрез инспектора на кода, който браузърът ни предоставя, можем лесно да променим стойността на атрибута типс - Да се ​​запази фамилията.на тексти това е, нашият чек вече няма да е валиден.


И в този случай трябва да направим по-надеждна проверка. За целта ще използваме библиотеката jQuery от JavaScript.

За да свържете библиотеката jQuery, във файла header.phpмежду етикети , преди затварящия етикет , добавете този ред:

Веднага след този ред ще добавим кода за валидиране на имейла. Тук ще добавим код за проверка на дължината на въведената парола. Дължината му трябва да бъде поне 6 знака.

Използвайки този скрипт, ние проверяваме въведения имейл адрес за валидност. Ако потребителят е въвел неправилен имейл, показваме съобщение за грешка за това и деактивираме бутона за изпращане на формуляр. Ако всичко е наред, тогава премахваме грешката и активираме бутона за изпращане на формуляр.

И така, приключихме с валидирането на формуляра от страна на клиента. Сега можем да го изпратим на сървъра, където също ще направим няколко проверки и ще добавим данни към базата данни.

Регистрация на потребител

Изпращаме формуляра във файла за обработка register.php, чрез метода POST. Името на този манипулатор файл е посочено в стойността на атрибута действие. И методът на изпращане е посочен в стойността на атрибута метод.

Отворете този файл register.phpи първото нещо, което трябва да направим, е да напишем функция за стартиране на сесия и да свържем файла, който създадохме по-рано dbconnect.php(В този файл направихме връзка с базата данни). И също така, нека веднага да декларираме клетките съобщения_за_грешкаИ успех_съобщенияв глобалния масив от сесии. IN съобщения_за_грешкание ще записваме всички съобщения за грешки, които се появяват по време на обработката на формуляра, и в succes_messages, ще записваме радостни съобщения.

Преди да продължим, трябва да проверим подаден ли е изобщо формулярът?. Нападателят може да погледне стойността на атрибута действиеот формуляра и разберете кой файл обработва този формуляр. И може да му хрумне да отиде директно до този файл, като напише следния адрес в адресната лента на браузъра: http://адрес_на_сайт/register.php

Така че трябва да проверим за клетка в глобалния POST масив, чието име съвпада с името на нашия бутон "Регистрация" от формата. По този начин проверяваме дали е натиснат бутона "Регистрация" или не.

Ако нападател се опита да отиде директно до този файл, той ще получи съобщение за грешка. Нека ви напомня, че променливата $address_site съдържа името на сайта и е декларирана във файла dbconnect.php.

грешка!главна страница.

"); } ?>

Стойността на captcha в сесията беше добавена при генерирането й във файла captcha.php. Като напомняне, ще ви покажа тази част от кода от файла отново captcha.php, където стойността на captcha се добавя към сесията:

Сега да преминем към самата проверка. Във файл register.php, вътре в блока if, където проверяваме дали е натиснат бутона "Регистрация" или по-скоро къде е посочен коментарът " // (1) Място за следващата част от кода"пишем:

//Проверка на получената captcha //Изрязване на интервалите от началото и края на реда $captcha = trim($_POST["captcha"]);

грешка! if(isset($_POST["captcha"]) && !empty($captcha))( //Сравнете получената стойност със стойността от сесията. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Ако captcha не е правилна, тогава връщаме потребителя на страницата за регистрация и там ще му покажем съобщение за грешка, че е въвел грешна captcha . $error_message = "

Въведохте грешен captcha

грешка!"; // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] = $error_message; // Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: " .$address_site."/form_register.php"); //Спиране на скрипта exit(); "

"); }

Няма код за потвърждение, т.е. captcha код. Можете да отидете на главната страница.

След това трябва да обработим получените данни от POST масива. На първо място, трябва да проверим съдържанието на глобалния POST масив, тоест дали там има клетки, чиито имена съответстват на имената на полетата за въвеждане от нашата форма.

Ако клетката съществува, тогава изрязваме интервалите от началото и края на реда от тази клетка, в противен случай пренасочваме потребителя обратно към страницата с формуляра за регистрация.

След това, след като сме изрязали интервалите, добавяме реда към променливата и проверяваме тази променлива за празнота, тогава продължаваме напред, в противен случай пренасочваме потребителя обратно към страницата с формуляра за регистрация. Поставете този код на посоченото място"".

// (2) Място за следващата част от кода

/* Проверете дали има изпратени данни от формуляра в глобалния масив $_POST и обвийте изпратените данни в обикновени променливи.*/ if(isset($_POST["first_name"]))( //Изрязване на интервалите от началото и край на низа $first_name = trim($_POST["first_name"]); //Проверете променливата за празнота if(!empty($first_name))( // За безопасност преобразувайте специални символи в HTML обекти $first_name = htmlspecialchars($first_name, ENT_QUOTES) )else( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Въведете вашето име

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) if( isset($_POST["last_name"]))( //Изрязване на интервали от началото и края на реда $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // За сигурност преобразувайте специални символи в HTML обекти $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Моля, въведете вашето фамилно име

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Полето за фамилия липсва

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) if( isset($_POST["email"]))( //Изрязване на интервали от началото и края на реда $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Местоположение на кода за проверка на формата на имейл адреса и неговата уникалност )else( // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Въведете своя имейл

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) if( isset($_POST["password"]))( //Изрязване на интервали от началото и края на низа $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Шифроване на паролата $password = md5($password."top_secret");else( //Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] . = "

Въведете вашата парола

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) // (4) Място за кода за добавяне на потребител към базата данни

От особено значение е полето - Да се ​​запази фамилията.. Трябва да проверим формата на получения пощенски адрес и неговата уникалност в базата данни. Тоест има ли вече регистриран потребител със същия имейл адрес?

На посоченото място" // (3) Местоположение на кода за проверка на формата на пощенския адрес и неговата уникалност" добавете следния код:

//Проверете формата на получения имейл адрес с помощта на регулярен израз $reg_email = "/^**@(+(*+)*\.)++/i";

//Ако форматът на получения имейл адрес не съответства на регулярния израз if(!preg_match($reg_email, $email))( // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Въведохте неправилен имейл

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) // Проверяваме дали такъв адрес вече е в базата данни. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email.""); са точно един ред, което означава, че потребителят с този имейл адрес вече е регистриран if($result_query->num_rows == 1)( //Ако полученият резултат не е грешен if(($row = $result_query->fetch_assoc() ) != false) ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Потребител с този имейл адрес вече е регистриран

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); )else( // Запазване на съобщението за грешка към сесията $_SESSION["error_messages"] .= "

Грешка в заявката за база данни

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); ) /* затваряне на селекцията */ $ result_query-> close(); //Спиране на скрипта exit(); /* затваряне на селекцията */ $result_query->close(); И така, приключихме с всички проверки, време е да добавим потребителя към базата данни. На посоченото място"" добавете следния код:

// (4) Място за кода за добавяне на потребител към базата данни

//Заявка за добавяне на потребител към базата данни $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, last_name, email, password) VALUES ("".$first_name."", "".$last_name ." ", "".$email.", "".$password."")");

if(!$result_query_insert)( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Грешка в заявката за добавяне на потребител към базата данни
Сега можете да влезете с вашето потребителско име и парола.

"; //Изпращане на потребителя до страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); ) /* Завършване на заявката */ $ result_query_insert-> close(); //Затваряне на връзката към базата данни $mysqli->close();

Ако възникне грешка в заявката за добавяне на потребител към базата данни, ние добавяме съобщение за тази грешка към сесията и връщаме потребителя на страницата за регистрация.

Иначе, ако всичко е минало добре, добавяме и съобщение към сесията, но този път е по-приятно, а именно казваме на потребителя, че регистрацията е успешна. И го пренасочваме към страницата с формуляра за оторизация.

Скриптът за проверка на формата на имейл адреса и дължината на паролата е във файла header.php, така че ще се прилага и за полета от този формуляр.

Сесията също се стартира във файла header.php, така че във файла form_auth.phpНяма нужда да започваме сесия, защото ще получим грешка.


Както вече казах, скриптът за проверка на формата на имейл адреса и дължината на паролата също работи тук. Следователно, ако потребителят въведе неправилен имейл адрес или кратка парола, той веднага ще получи съобщение за грешка. Бутон входще стане неактивен.

След коригиране на грешките бутонът входстане активен и потребителят ще може да изпрати формуляра на сървъра, където ще бъде обработен.

Упълномощаване на потребителя

За приписване на стойност действиехендикапът за оторизация има указан файл auth.php, това означава, че формулярът ще бъде обработен в този файл.

И така, отворете файла auth.phpи напишете код за обработка на формуляра за оторизация. Първото нещо, което трябва да направите, е да започнете сесия и да свържете файла dbconnect.phpза свързване към базата данни.

//Декларирайте клетка, за да добавите грешки, които могат да възникнат при обработката на формуляра.

$_SESSION["error_messages"] = "";

грешка!//Деклариране на клетка за добавяне на успешни съобщения $_SESSION["success_messages"] = "";

"); }

//Проверете получената captcha if(isset($_POST["captcha"]))( //Изрязване на интервалите от началото и края на реда $captcha = trim($_POST["captcha"]); if(! празен($captcha ))( //Сравнете получената стойност със стойността от сесията. if(($_SESSION["rand"] != $captcha) && ($_SESSION["rand"] != "")) ( // Ако captcha е неправилна, тогава връщаме потребителя на страницата за оторизация и там ще му покажем съобщение за грешка, че е въвел грешна captcha $error_message = ".

грешка! if(isset($_POST["captcha"]) && !empty($captcha))( //Сравнете получената стойност със стойността от сесията. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Ако captcha не е правилна, тогава връщаме потребителя на страницата за регистрация и там ще му покажем съобщение за грешка, че е въвел грешна captcha . $error_message = "

"; // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] = $error_message; // Връщане на потребителя към страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: " .$address_site ."/form_auth.php"); //Спрете скрипта exit(); )else( $error_message = "

грешка!Полето за въвеждане на captcha не трябва да е празно.

"; // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] = $error_message; // Връщане на потребителя към страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: " .$address_site ."/form_auth.php"); //Спиране на скрипта exit(); //(2) Място за обработка на имейл адреса //(3) Място за обработка на паролата //(4) Място за съставяне заявка към базата данни )else ( //Ако captcha не е предадена exit("

грешка!Няма код за потвърждение, т.е. captcha код. Можете да отидете на главната страница.

"); }

Ако потребителят е въвел правилно кода за потвърждение, тогава продължаваме, в противен случай го връщаме на страницата за оторизация.

Проверка на пощенския адрес

//Изрязване на интервали от началото и края на реда $email = trim($_POST["email"]);

if(isset($_POST["email"]))( if(!empty($email))( $email = htmlspecialchars($email, ENT_QUOTES); //Проверете формата на получения имейл адрес с помощта на регулярен израз $ reg_email = " /^**@(+(*+)*\.)++/i"; //Ако форматът на получения имейл адрес не съответства на регулярния израз if(!preg_match($reg_email, $email) ))( // Запазване в съобщението за грешка на сесията. $_SESSION["error_messages"] .= "

Въведохте неправилен имейл

"; //Връщане на потребителя към страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_register.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Полето за въвеждане на пощенски адрес (имейл) не трябва да е празно.

"; //Връщане на потребителя към страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); ) // (3) Област за обработка на пароли

Ако потребителят е въвел имейл адрес в грешен формат или стойността на полето за имейл адрес е празна, ние го връщаме на страницата за оторизация, където показваме съобщение за това.

Проверка на парола

Следващото поле за обработка е полето за парола. До посоченото място" //(3) Място за обработка на парола“, пишем:

If(isset($_POST["password"]))( //Изрязване на интервалите от началото и края на низа $password = trim($_POST["password"]); if(!empty($password))( $password = htmlspecialchars($password, ENT_QUOTES); //Шифроване на паролата $password = md5($password."top_secret");else( //Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Въведете вашата парола

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); ) )else ( // Запазване на съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Полето за парола липсва

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); )

Тук използваме функцията md5() за шифроване на получената парола, тъй като нашите пароли са в шифрована форма в базата данни. Допълнителна тайна дума в криптирането, в нашия случай " строго_секретно" трябва да е този, който е бил използван при регистриране на потребителя.

Сега трябва да направите заявка към базата данни, за да изберете потребител, чийто имейл адрес е равен на получения имейл адрес и чиято парола е равна на получената парола.

//Запитване в базата данни въз основа на избора на потребителя.

$result_query_select = $mysqli->query("SELECT * FROM `users` WHERE имейл = "".$email."" И парола = "".$password.""");

"; //Връщане на потребителя към страницата за регистрация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); )else( //Проверете дали няма потребител с такива данни в базата данни, след това изведете съобщение за грешка if($result_query_select->num_rows == 1)( // Ако въведените данни съвпадат с данните от базата данни, тогава запазете вход и парола за масива от сесии $_SESSION["email"] = $_SESSION["password"] = $password начална страницазаглавие ("HTTP/1.1 301 преместен за постоянно");

header("Местоположение: ".$address_site."/index.php");

)else( // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

Неправилно потребителско име и/или парола

"; //Връщане на потребителя към страницата за оторизация header("HTTP/1.1 301 Moved Permanently"); header("Местоположение: ".$address_site."/form_auth.php"); //Спрете скрипта exit(); ) ) Излезте от сайтаИ последното нещо, което прилагаме е

процедура за напускане на сайта header.php. В момента в заглавката показваме връзки към страницата за оторизация и страницата за регистрация. В заглавката на сайта (файл.

), с помощта на сесията проверяваме дали потребителят вече е оторизиран. Ако не, тогава показваме връзки за регистрация и оторизация, в противен случай (ако е упълномощен), тогава вместо връзки за регистрация и оторизация показваме връзка header.php:

Изход

Модифицирана част от кода от файла

Регистрация ИзходКогато щракнете върху връзката за изход от сайта, ще бъдем отведени до файл излизане.php.

, където просто унищожаваме клетките с имейл адреса и паролата от сесията. След това връщаме потребителя обратно на страницата, на която е кликнал връзката изход

Файлов код излизане.php:това е всичко Сега знаете как

прилагане и обработка на формуляри за регистрация и оторизация потребител на вашия уебсайт. Тези форми се намират на почти всеки уебсайт, така че всеки програмист трябва да знае как да ги създаде..

Научихме също как да валидираме входните данни, както от страна на клиента (в браузъра, използвайки JavaScript, jQuery), така и от страната на сървъра (използвайки PHP). Ние също научихме

прилагане на процедура за напускане на сайта

Ако имате въпроси, моля, свържете се с мен и ако забележите грешка в статията, моля, уведомете ме.

План на урока (част 5):

  1. Създаване на HTML структура за формата за оторизация
  2. Ние обработваме получените данни
  3. Показваме поздрава на потребителя в заглавката на сайта

Хареса ли ви статията?

Последна актуализация: вторник, 19 септември 2006 г

сесиен_регистр

(PHP 4, PHP 5)session_register -- Регистрирайте една или повече глобални променливи с текущата сесия

Описание

bool сесиен_регистр(смесено име [, смесено ...])
session_register()приема променлив брой аргументи, всеки от които може да бъде или низ, съдържащ името на променлива, или масив, състоящ се от имена на променливи или други масиви. За всяко име, session_register()регистрира глобалната променлива с това име в текущата сесия.
ВниманиеАко искате вашият скрипт да работи независимо от register_globals, трябва вместо това да използвате масива $_SESSION, тъй като записите $_SESSION се регистрират автоматично. Ако вашият скрипт използва session_register(), няма да работи в среди, където PHP директивата register_globals е деактивирана.
register_globals: важна забележка: От PHP 4.2.0, стойността по подразбиране за PHP директивата register_globals е изключенои е напълно премахнат от PHP 6.0.0. PHP общността насърчава всички да не разчитат на тази директива, а вместо това да използват други средства, като например суперглобалните.
ВниманиеТова регистрира a глобаленпроменлива. Ако искате да регистрирате променлива на сесия от функция, трябва да се уверите, че сте я направили глобална, като използвате глобаленключова дума или масива $GLOBALS, или използвайте специалните сесийни масиви, както е отбелязано по-долу.
Тази функция връща TRUE, когато всички променливи са успешно регистрирани в сесията. Ако session_start() Аконе е извикан преди тази функция да бъде извикана, имплицитно извикване на Акобез параметри ще бъдат направени. $_SESSION не имитира това поведение и изисква
преди употреба.

Днес ще разгледаме експлоатацията на критична 1-дневна уязвимост в популярната CMS Joomla, която избухна в интернет в края на октомври. Ще говорим за уязвимостите с числа CVE-2016-8869, CVE-2016-8870И CVE-2016-9081. И трите произлизат от едно парче код, който изнемогва в дълбините на рамката в продължение на пет дълги години, чакайки да изтече, само за да се освободи и да донесе със себе си хаос, хакнати сайтове и сълзите на невинни потребители на тази Joomla. Само най-храбрите и смели разработчици, чиито очи са червени от светлината на мониторите и чиито клавиатури са осеяни с трохи от хляб, успяха да предизвикат бушуващите зли духове и да положат главите си на олтара на поправките.

ПРЕДУПРЕЖДЕНИЕ

Цялата информация е предоставена само за информационни цели. Нито редакторите, нито авторът носят отговорност за евентуални вреди, причинени от материалите на тази статия.

Откъдето започна всичко

На 6 октомври 2016 г. Демис Палма създаде тема в Stack Exchange, в която попита: защо всъщност във версия 3.6 на Joomla има два метода за регистриране на потребители с едно и също име register()? Първият е в контролера UsersControllerRegistration, а вторият е в контролера UsersControllerUser. Деймис искаше да разбере дали методът UsersControllerUser::register() е използван някъде, или това е просто еволюционен анахронизъм, останал от старата логика. Неговата загриженост беше, че дори ако този метод не се използва от нито един изглед, той може да бъде извикан от изработена заявка. На което получих отговор от разработчик под псевдонима itoctopus, който потвърди: проблемът наистина съществува. И изпрати доклад до разработчиците на Joomla.

Тогава събитията се развиха най-бързо. На 18 октомври разработчиците на Joomla приеха доклада от Damis, който по това време беше изготвил PoC, който ще позволи регистрация на потребители. Той публикува бележка на своя уебсайт, където говори в общи линии за проблема, който е открил, и мислите си по този въпрос. На същия ден излиза нова версия на Joomla 3.6.3, която все още съдържа уязвим код.

След това Davide Tampellini завърта грешката до степен да регистрира не обикновен потребител, а администратор. И на 21 октомври нов случай пристига при екипа по сигурността на Joomla. Там вече се говори за увеличаване на привилегиите. В същия ден на уебсайта на Joomla се появява съобщение, че във вторник, 25 октомври, ще бъде пусната следващата версия със сериен номер 3.6.3, която коригира критична уязвимост в ядрото на системата.

25 октомври Joomla Security Strike Team открива последния проблем, създаден от парчето код, открито от Damis. След това ангажимент от 21 октомври с невзрачното име Prepare 3.6.4 Stable Release се вкарва в главния клон на официалното хранилище на Joomla, което поправя злополучния бъг.

След това излизане много заинтересовани лица се присъединяват към общността на разработчиците - те започват да популяризират уязвимостта и да подготвят експлойти.

На 27 октомври изследователят Хари Робъртс качва готов експлойт в хранилището на Xiphos Research, който може да качи PHP файл на сървър с уязвима CMS.

Подробности

Е, предисторията приключи, нека да преминем към най-интересната част - анализ на уязвимостта. Инсталирах Joomla 3.6.3 като тестова версия, така че всички номера на редове ще бъдат подходящи за тази версия. И всички пътища до файловете, които ще видите по-долу, ще бъдат посочени спрямо корена на инсталирания CMS.

Благодарение на откритието на Damis Palma знаем, че има два метода, които извършват регистрация на потребители в системата. Първият се използва от CMS и се намира във файла /components/com_users/controllers/registration.php:108. Вторият (този, който ще трябва да извикаме) живее в /components/com_users/controllers/user.php:293. Нека го разгледаме по-отблизо.

286: /** 287: * Метод за регистриране на потребител. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: public function register() 294: ( 295: JSession::checkToken("post") или jexit(JText::_ ("JINVALID_TOKEN")); // Получаване на данни от формуляра . 315: $return = $model->validate($form, $data); 316: 317: // Проверка за грешки 318: if ($return === false) 319: ( ... 345: / /. Завършете регистрацията 346: $return = $model->register($data);

Тук оставих само интересни редове. Пълната версия на уязвимия метод може да се види в хранилището на Joomla.

Нека да разберем какво се случва по време на нормална потребителска регистрация: какви данни се изпращат и как се обработват. Ако регистрацията на потребител е активирана в настройките, формулярът може да бъде намерен на http://joomla.local/index.php/component/users/?view=registration.


Законната заявка за регистрация на потребител изглежда като следната екранна снимка.


Компонентът com_users отговаря за работата с потребителите. Обърнете внимание на параметъра на задачата в заявката. Той има формат $controller.$method. Нека да разгледаме файловата структура.

Имената на скриптовете в папката контролерисъответстват на имената на извиканите контролери. Тъй като нашата заявка сега съдържа $controller = "registration", файлът ще бъде извикан регистрация.phpи неговия метод register().

Внимание, въпрос: как да прехвърлите обработката на регистрацията на уязвимо място в кода? Вероятно вече се досещате. Имената на уязвимите и реалните методи са еднакви (register), така че просто трябва да променим името на извикания контролер. Къде се намира нашият уязвим контролер? Точно така, във файла user.php. Оказва се, че $controller = "user" . Събирайки всичко заедно, получаваме task = user.register. Сега заявката за регистрация се обработва по метода, от който се нуждаем.


Второто нещо, което трябва да направим, е да изпратим данните в правилния формат. Тук всичко е просто. Legitimate register() очаква от нас масив, наречен jform, в който предаваме регистрационни данни - име, вход, парола, имейл (вижте екранната снимка със заявката).

  • /components/com_users/controllers/registration.php: 124: // Вземете потребителските данни.

125: $requestData = $this->input->post->get("jform", array(), "array");

  • Нашият клиент получава тези данни от масив, наречен потребител.

/components/com_users/controllers/user.php: 301: // Вземете данните от формуляра.

302: $data = $this->input->post->get("user", array(), "array");

  • Затова променяме имената на всички параметри в заявката от jfrom на потребител.

Нашата трета стъпка е да намерим валиден CSRF токен, тъй като без него няма да има регистрация.


/components/com_users/controllers/user.php: 296: JSession::checkToken("post") или jexit(JText::_("JINVALID_TOKEN")); CVE-2016-8870Изглежда като MD5 хеш и можете да го вземете например от формуляра за оторизация на сайта /index.php/component/users/?view=login.

Ето как изглежда в „работещия“ метод register() от контролера UsersControllerRegistration:

  • /components/com_users/controllers/registration.php: 113: // Ако регистрацията е деактивирана - Пренасочване към страницата за вход.

114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view=) вход", невярно)); 117: 118: връщане невярно; 119: )

  • И така в уязвими:

/components/com_users/controllers/user.php:

Да, няма начин.

За да разберем втория, много по-сериозен проблем, нека изпратим заявката, която създадохме, и да видим как се изпълнява в различни части на кода. Ето частта, която отговаря за валидирането на подадените от потребителя данни в работния метод:

Продължението е достъпно само за членове

Вариант 1. Присъединете се към общността на сайта, за да прочетете всички материали на сайта

Членството в общността в рамките на посочения период ще ви даде достъп до ВСИЧКИ хакерски материали, ще увеличи личната ви кумулативна отстъпка и ще ви позволи да натрупате професионален рейтинг на Xakep Score!

Урок за много начинаещи! Без значение къде отивате в Интернет, има основно нещо, което намирате почти навсякъде – регистрация на потребители. Независимо дали имате нужда потребителите ви да се регистрират за сигурност или просто за добавена функция, няма причина да не го направите с този лесен урок В този урок ще разгледаме основите на управлението на потребителите, завършвайки с проста зона за членове, която можете да внедрите на вашия собствен уебсайт.

Ако имате нужда от допълнителна помощ или искате пряк път, разгледайте набора от доставчици на PHP услуги в Envato Studio. Тези опитни разработчици могат да ви помогнат с всичко - от бързо отстраняване на грешки до разработване на цяло приложение от нулата. Така че просто прегледайте доставчиците, прочетете отзивите и оценките и изберете подходящия за вас.

Въведение

Този урок е предназначен като основно въведение в сесиите и използването на бази данни в PHP. Въпреки че крайният резултат от този урок може да не ви изглежда полезен веднага, уменията, които придобивате от този урок, ще ви позволят да продължите да създавате своя собствена система за членство; отговарящи на вашите собствени нужди.

Преди да започнете този урок, уверете се, че имате под ръка следната информация:

  • Име на хост на база данни- това е сървърът, на който се хоства вашата база данни, в повечето ситуации това ще бъде просто "localhost".
  • Име на база данни, потребителско име на база данни, парола на база данни- преди да започнете този урок, трябва да създадете MySQL база данни, ако имате възможност, или да имате под ръка информацията за свързване към съществуваща база данни. Тази информация е необходима в целия урок.

Ако не разполагате с тази информация, вашият хостинг доставчик трябва да може да ви я предостави.

След като приключихме с формалностите, нека да започнем с урока!

Стъпка 1 - Първоначална конфигурация

Настройка на базата данни

Както е посочено във въведението, имате нужда от база данни, за да продължите след тази точка в урока. Като начало ще направим таблица в тази база данни, за да съхраняваме нашата потребителска информация.

Таблицата, от която се нуждаем, ще съхранява нашата потребителска информация; за нашите цели ще използваме проста таблица, но би било лесно да съхраняваме повече информация в допълнителни колони, ако това е, което ви трябва. В нашата система имаме нужда от следните четири колони:

  • UserID (първичен ключ)
  • Потребителско име
  • Парола
  • Имейл адрес

По отношение на базата данни, a Първичен ключе полето, което уникално идентифицира реда. В този случай UserID ще бъде нашият първичен ключ. Тъй като искаме това да се увеличава всеки път, когато потребител се регистрира, ще използваме специалната MySQL опция - auto_increment.

SQL заявката за създаване на нашата таблица е включена по-долу и обикновено се изпълнява в раздела „SQL“ на phpMyAdmin.

CREATE TABLE `users` (`UserID` INT(25) NOT NULL AUTO_INCREMENT PRIMARY KEY , `Username` VARCHAR(65) NOT NULL , `Password` VARCHAR(32) NOT NULL , `EmailAddress` VARCHAR(255) NOT NULL );

Създаване на базов файл

За да опростим създаването на нашия проект, ще направим основен файл, който можем да включим във всеки от файловете, които създаваме. Този файл ще съдържа информация за връзката с базата данни, заедно с определени конфигурационни променливи, които ще ни помогнат по пътя.

Започнете, като създадете нов файл: base.php и въведете в него следния код:

Нека да разгледаме някои от тези редове, а? Тук има няколко функции, които сме използвали и все още не сме обяснили, така че нека да ги прегледаме бързо и да ги разберем - ако вече разбирате основите на PHP, може да искате да пропуснете това обяснение.

Session_start();

Тази функция стартира сесия за новия потребител и по-късно в този урок ще съхраняваме информация в тази сесия, за да ни позволи да разпознаем потребители, които вече са влезли. Ако вече е създадена сесия, тази функция ще я разпознае и ще я пренесе на следващата страница.

Mysql_connect($dbhost, $dbuser, $dbpass) или die("MySQL грешка: " . mysql_error()); mysql_select_db($dbname) или die("MySQL грешка: " . mysql_error());

Всяка от тези функции изпълнява отделна, но свързана задача. Функцията mysql_connect свързва нашия скрипт със сървъра на базата данни, използвайки информацията, която сме й дали по-горе, а функцията mysql_select_db след това избира коя база данни да използва със скрипта. Ако някоя от функциите не успее да завърши, функцията die автоматично ще се намеси и ще спре обработката на скрипта - оставяйки всички потребители със съобщението, че е имало MySQL грешка.

Стъпка 2 - Обратно към интерфейса

Какво трябва да направим първо?

Най-важният елемент на нашата страница е първият ред на PHP; този ред ще включва файла, който създадохме по-горе (base.php), и по същество ще ни позволи достъп до всичко от този файл в текущия ни файл. Ще направим това със следния ред PHP код. Създайте файл с име index.php и поставете този код най-отгоре.

Стартирайте HTML страницата

Първото нещо, което ще направим за нашия интерфейс, е да създадем страница, където потребителите могат да въвеждат своите данни, за да влязат, или ако вече са влезли в страница, където могат да избират какво искат да правят. В този урок предполагам, че потребителите имат основни познания за това как работи HTML/CSS и затова няма да обяснявам този код в подробности; в момента тези елементи няма да бъдат стилизирани, но ще можем да променим това по-късно, когато създадем нашия CSS стилов лист.

Използвайки файла, който току-що създадохме (index.php), въведете следния HTML код под реда на PHP, който вече сме създали.

Какво да им покажем?

Преди да изведем останалата част от страницата, трябва да си зададем няколко въпроса:

  1. Потребителят влязъл ли е вече?
  • да- трябва да им покажем страница с опции, които да изберат.
  • не
  • Потребителят вече изпрати ли данните си за вход?
    • да- трябва да проверим данните им и ако са верни, ще ги логнем в сайта.
    • не- продължаваме към следващия въпрос.
  • Ако беше отговорено и на двете по-горе не, сега можем да предположим, че трябва да покажем форма за влизане на потребителя.
  • Тези въпроси всъщност са същите въпроси, които ще внедрим в нашия PHP код. Ще направим това под формата на изрази if. Без да въвеждате нищо в някой от вашите нови файлове, нека да разгледаме логиката, която ще използваме първо.

    Изглежда объркващо, нали? Нека го разделим на по-малки секции и да ги прегледаме един по един.

    If(!empty($_SESSION["LoggedIn"]) && !empty($_SESSION["Username"])) ( // позволява на потребителя да има достъп до главната страница )

    Когато потребител влезе в нашия уебсайт, ние ще съхраним неговата информация в сесия - във всеки един момент след това имаме достъп до тази информация в специален глобален PHP масив - $_SESSION. Използваме празната функция, за да проверим дали променливата е празна с оператора ! пред него. Затова ние казваме:

    Ако променливата $_SESSION["LoggedIn"] не е празна и $_SESSION["Username"] не е празна, изпълнете тази част от кода.

    Следващият ред работи по същия начин, само че този път използва глобалния масив $_POST. Този масив съдържа всички данни, изпратени от формуляра за вход, който ще създадем по-късно в този урок. Последният ред ще се изпълни само ако нито един от предишните изрази не е изпълнен; в този случай ще покажем на потребителя форма за влизане.

    И така, сега, след като разбираме логиката, нека да получим малко съдържание между тези секции. Във вашия файл index.php въведете следното по-долу това, което вече имате.

    Зона за членове

    и вашият имейл адрес е .

    Успех"; ехо"

    Сега ви пренасочваме към зоната за членове.

    "; ехо" ";) else ( echo "

    Грешка

    "; ехо"

    Съжаляваме, вашият акаунт не може да бъде намерен. моля щракнете тук, за да опитате отново.

    "; ) ) иначе ( ?>

    Вход за членове

    Благодаря за посещението! Моля, или влезте по-долу, или щракнете тук, за да се регистрирате.



    Да се ​​надяваме, първото и последното кодови блоковеняма да ви обърка твърде много. Това, в което наистина трябва да се захванем, е това, за което всички сте дошли в този урок - PHP кода. Сега ще преминем през втория раздел ред по ред и ще обясня за какво е предназначен всеки бит код тук.

    $username = mysql_real_escape_string($_POST["username"]);

    Има две функции, които трябва да бъдат обяснени за това. Първо, mysql_real_escape_string - много полезна функция за почистване на входа на базата данни. Това не е безопасна мярка, но това ще предотврати по-голямата част от злонамерените хакери, като премахне нежеланите части от всичко, което е поставено в нашия формуляр за вход, md5 би било невъзможно да навлизаме в подробности тази функция просто криптира всичко, което й се предава - в този случай паролата на потребителя - за да предотврати любопитни очи да я прочетат.

    $checklogin = mysql_query("SELECT * FROM users WHERE Username = "".$username."" AND Password = "".$password.""");

    if(mysql_num_rows($checklogin) == 1) ( $row = mysql_fetch_array($checklogin); $email = $row["EmailAddress"]; $_SESSION["Username"] = $username; $_SESSION["EmailAddress"] = $email; $_SESSION["LoggedIn"] = 1;

    Тук имаме ядрото на нашия код за вход; първо, изпълняваме заявка в нашата база данни. В тази заявка търсим всичко, свързано с член, чието потребителско име и парола съответстват на стойностите на нашите $username и $password, които потребителят е предоставил. На следващия ред имаме оператор if, в който проверяваме колко резултата сме получили - ако няма резултати, тази секция няма да бъде обработена. Но ако има резултат, знаем, че потребителят съществува и затова ще го влезем.

    Следващите два реда са за получаване на имейл адреса на потребителя от заявката, която вече сме изпълнили, така че можем лесно да получим достъп до тази информация, която е извлечена от базата данни - в този случай използваме PHP функцията mysql_fetch_array След това присвоих стойността на полето EmailAddress на променлива, която да използваме по-късно.

    Сега задаваме сесията. Ние съхраняваме потребителското име и имейл адреса на потребителя в сесията, заедно със специална стойност, за да знаем, че той е влязъл с помощта на този формуляр META REFRESH в кода.

    И така, как изглежда нашият проект в момента за потребителя?

    Страхотно! Сега е време да продължите, за да се уверите, че хората наистина могат да влязат в сайта ви.

    Нека хората да се регистрират

    Всичко е добре, че имате формуляр за вход на сайта си, но сега трябва да позволим на потребителите да го използват - трябва да направим формуляр за вход. Направете файл с име register.php и поставете следния код в него.

    Грешка"; ехо"

    Съжаляваме, това потребителско име е заето. Моля, върнете се и опитайте отново.

    "; ) else ( $registerquery = mysql_query("INSERT INTO потребители (потребителско име, парола, имейл адрес) VALUES("".$username."", "".$password.", "".$email."") " ); if($registerquery) ( echo "

    Успех

    "; ехо"

    Вашият акаунт е създаден успешно. моля щракнете тук, за да влезете.

    ";) else ( echo "

    Грешка

    "; ехо"

    Съжаляваме, регистрацията ви е неуспешна. Моля, върнете се и опитайте отново.

    "; ) ) ) иначе ( ?>

    Регистрирайте се

    Моля, въведете вашите данни по-долу, за да се регистрирате.




    Така че няма много нов PHP, който все още не сме научили в този раздел. Нека просто хвърлим бърз поглед на тази SQL заявка и да видим дали можем да разберем какво прави.

    $registerquery = mysql_query("INSERT INTO потребители (потребителско име, парола, имейл адрес) VALUES("".$username.", "".$password.", "".$email."")");

    И така, тук добавяме потребителя към нашата база данни. Този път вместо да извличаме данни, ние ги вмъкваме; така че първо указваме в какви колони въвеждаме данни (не забравяйте, нашият потребителски идентификатор ще се покачи автоматично). В областта VALUES() ние отново кажете му какво да постави във всяка колона; в този случай нашите променливи, които идват от входа на потребителя. Така че, нека да опитаме; след като сте направили акаунт във вашия чисто нов регистрационен формуляр, ето какво ще видите за зоната на членовете.

    Уверете се, че могат да излязат

    Ние сме почти в края на този раздел, но има още едно нещо, от което се нуждаем, преди да приключим тук - начин потребителите да излизат от своите акаунти. Това се прави много лесно (за наше щастие); създайте нов файл с име logout.php и въведете следното в него.

    При това първо нулираме нашия глобален масив $_SESSION и след това унищожаваме изцяло сесията.

    И това е краят на този раздел и краят на PHP кода. Нека сега преминем към нашия последен раздел.

    Стъпка 3 – Оформете се

    Няма да обяснявам много в този раздел - ако не разбирате HTML/CSS, силно бих препоръчал някой от многото отлични уроци на този уебсайт, за да започнете. Създайте нов файл с име style.css и въведете следното в него; това ще стилизира всички страници, които сме създали досега.

    * ( margin: 0; padding: 0; ) body (font-family: Trebuchet MS; ) a ( color: #000; ) a:hover, a:active, a:visited ( text-decoration: none; ) #main (ширина: 780px; margin: 0 auto; margin-top: 50px; padding: 10px; border: 1px solid #CCC; background-color: #EEE; ) form fieldset ( border: 0; ) form fieldset p br ( clear: ляво; ) етикет ( margin-top: 5px; display: block; width: 100px; padding: 0; float: left; ) input (font-family: Trebuchet MS; border: 1px solid #CCC; margin-bottom: 5px; фонов цвят: #FFF; подложка: 2px; ) input:hover (контур: 1px плътен #222; фонов цвят: #EEE;)

    Сега нека да разгледаме няколко екранни снимки на това как трябва да изглежда нашият окончателен проект:

    Формата за вход.

    Членската зона.

    Формата за регистрация.

    И накрая...

    И това е! Вече имате зона за членове, която можете да използвате на вашия сайт. Виждам много хора да клатят глави и да крещят към мониторите си, че това не им е полезно - прав сте. Но това, което се надявам, че всички начинаещи в PHP са научили, са основите на това как да използват база данни и как да използват сесии за съхраняване на информация. Важните умения за създаване на всяко уеб приложение.

    • Абонирайте се за RSS канала на NETTUTS за повече ежедневни статии и статии за уеб разработка.
    Споделете