Формуляр за регистър на аристокрацията php. PHP скриптове за обработка на HTML форми. Beispiel #1 Най-простата форма на HTML

Последна промяна на 23 юли 2019 г. от Винси.

Регистрацията или регистрацията на потребителя е неразделна част от много уеб приложения и е от решаващо значение да се направи правилно за успеха на приложението. Това е отправната точка за ангажиране на потребителите с вашето приложение.

Трябва да е възможно най-просто с най-добрия UI/UX. Внедряването на функционалност за регистрация на потребител с помощта на PHP е проста задача и аз ще ви преведа през стъпките с пример в тази статия.

Какво има вътре?

Как работи този пример за регистрация на потребител на PHP?

Този примерен код може да бъде разделен на 3 части.

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

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

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

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

Винаги е по-добре да имате валидиране от страна на сървъра. Можете да изберете да го имате от страна на клиента също за улесняване на употребата на потребителите. Но наличието на сървъра не е по избор и е минимално изискване.

файлова структура

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

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

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

Формуляр за регистрация на потребител на PHP

Регистрирай се
"; } ?>
">
">
">
Приемам общите условия


И стиловете са

Тяло ( семейство шрифтове: Arial; цвят: #333; размер на шрифта: 0,95em; ) .form-head ( цвят: #191919; тегло на шрифта: нормален; тегло на шрифта: 400; поле: 0; подравняване на текста : center; font-size: 1.8em; ) .error-message ( padding: 7px 10px; background: #fff1f2; border: #ffd5da 1px solid; color: #d6001c; border-radius: 4px; margin: 30px 0px 10px 0px ; ) .success-message ( padding: 7px 10px; background: #cae0c4; border: #c3d0b5 1px solid; color: #027506; border-radius: 4px; margin: 30px 0px 10px 0px; ) .demo-table ( background: #ffffff; разстояние между границите: начално; поле: 15px auto; word-break: break-word; table-layout: auto; line-height: 1.8em; цвят: #333; border-radius: 4px; padding: 20px 40px ;ширина: 380px;border: 1px плътен;border-color: #e5e6e9 #dfe0e4 #d0d1d5; ) .demo-table .label (цвят: #888888; ) .demo-table .field-column ( padding: 15px 0px; .demo-input-box ( padding: 13px; border: #CCC 1px solid; border-radius: 4px; ширина: 100%; ) .btnRegister ( padding: 13px; цвят на фона: #5d9cec; цвят: #f5f7fa; курсор: показалец; радиус на границата: 4px ширина: 100% граница: #5791da 1px плътна; размер на шрифта: 1.1em ) .response-text (max-width: 380px; font-size: 1.5em; text-align: center; background: #fff3de; padding: 42px; border-radius: 3px; border: #f5e9d4 1px solid; font-family : arial; височина на реда: 34px; поле: 15px auto; ) .terms ( margin-bottom: 5px; )

Как да потвърдите потребителската информация при изпращане на формуляр

Към този пример е добавен скрипт за валидиране на формуляр от страна на сървъра за валидиране на данните за регистрация на потребителя. Този скрипт за валидиране на PHP ще бъде извикан при изпращане на регистрационния формуляр.

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

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

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

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

Функция validateMember() ( $valid = true; $errorMessage = array(); foreach ($_POST като $key => $value) (if (empty($_POST[$key])) ( $valid = false; ) ) if($valid == true) (if ($_POST["password"] != $_POST["confirm_password"]) ($errorMessage = "Паролите трябва да са еднакви."; $valid = false; ) if (! isset ($error_message)) ( if (! filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL)) ( $errorMessage = "Невалиден имейл адрес."; $valid = false; ) ) if (! isset($ error_message)) ( if (! isset($_POST["terms"])) ( $errorMessage = "Приемам условия."; $valid = false; ) ) ) else ( $errorMessage = "Всички полета са задължителни." ; ) if ( $valid == false) ( връщане на $errorMessage; ) return; )

PHP MySQL код за достъп до база данни, за да запазите регистриран потребител

Проверка на потребителски формуляр от страна на сървъра

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

validateMember($username, $displayName, $password, $email); if (empty($errorMessage)) ( $memberCount = $member->isMemberExists($username, $email); if ($memberCount == 0) ( $insertId = $member->insertMemberRecord($username, $displayName, $ парола, $email); if (! prazno($insertId)) ( header("Location: thankyou.php"); ) ) else ( $errorMessage = "Потребителят вече съществува."; ) ) ) ?>

Проверете дали потребител вече съществува

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

Това потвърждение ще уведоми, че „потребителят вече съществува“. кодът е,

Функция isMemberExists($username, $email) ( $query = "select * FROM registered_users WHERE user_name = ? OR email = ?"; $paramType = "ss"; $paramArray = array($username, $email); $memberCount = $this->ds->numRows($query, $paramType, $paramArray); върне $memberCount; )

Вмъкване на данни за членове в базата данни

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

Функция insertMemberRecord($username, $displayName, $password, $email) ( $passwordHash = md5($password); $query = "INSERT INTO registered_users (user_name, display_name, парола, имейл) СТОЙНОСТИ (?, ?, ?, ? )"; $paramType = "ssss"; $paramArray = array($username, $displayName, $passwordHash, $email); $insertId = $this->ds->insert($query, $paramType, $paramArray); върне $insertId;)

DataSource.php

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

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

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

conn = $this->getConnection(); ) /** * Ако е необходим обект за връзка, използвайте този метод и получете достъп до него. * В противен случай използвайте следните методи за вмъкване / актуализиране / и т.н. * * @return \mysqli */ публична функция getConnection() ( $conn = new \mysqli(self::HOST, self::USERNAME, self::PASSWORD, self::DATABASENAME); if (mysqli_connect_errno()) ( trigger_error ("Проблем с свързването с база данни."); ) $conn->set_charset("utf8"); връщане на $conn; ) /** * За да получите резултати от базата данни * @param string $query * @param string $paramType * @ параметър масив $paramArray * @return масив */ публична функция изберете($query, $paramType="", $paramArray=array()) ( $stmt = $this->conn->prepare($query); if(! prazno($paramType) && !empty($paramArray)) ( $this->bindQueryParams($sql, $paramType, $paramArray); ) $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) ( докато ($row = $result->fetch_assoc()) ( $resultset = $row; ) ) if (! prazno($resultset)) ( връщане на $resultset; ) ) / ** * За вмъкване * @param string $query * @param string $paramType * @param масив $paramArray * @return int */ public function insert($query, $paramType, $p aramArray) (отпечатайте $query; $stmt = $this->conn->prepare($query); $this->bindQueryParams($stmt, $paramType, $paramArray); $stmt->изпълни (); $insertId = $stmt->insert_id; връщане на $insertId; ) /** * За изпълнение на заявка * @param string $query * @param string $paramType * @param масив $paramArray */ публична функция execute($query, $paramType="", $paramArray=array()) ( $ stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) ( $this->bindQueryParams($stmt, $paramType="", $paramArray= array()); ) $stmt->execute(); ) /** * 1. Подготвя свързване на параметри * 2. Свържете параметри към sql оператора * @param string $stmt * @param string $paramType * @param array $ paramArray */ публична функция bindQueryParams($stmt, $paramType, $paramArray=array()) ( $paramValueReference = & $paramType; за ($i = 0; $i< count($paramArray); $i ++) { $paramValueReference = & $paramArray[$i]; } call_user_func_array(array($stmt, "bind_param"), $paramValueReference); } /** * To get database results * @param string $query * @param string $paramType * @param array $paramArray * @return array */ public function numRows($query, $paramType="", $paramArray=array()) { $stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) ( $this->bindQueryParams($stmt, $paramType, $paramArray); ) $stmt->execute(); $stmt->store_result(); $recordCount = $stmt->брой_редове; върнете $recordCount; ))

Скрипт за база данни

Този скрипт на база данни има израза create за таблицата registered_users. Импортирайте този скрипт във вашата среда за разработка, за да стартирате този код.

Структура на таблицата за таблица `registered_users` -- СЪЗДАЙТЕ ТАБЛИЦА, АКО НЕ СЪЩЕСТВУВА `registered_users` (`id` int(8) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) NOT NULL, `first_name` varchar(255) НЕ NULL фамилно_име` varchar(255) НЕ НУЛЕВО, `парола` varchar(25) НЕ НУЛЕВО, `имейл` varchar(55) НЕ НУЛЕВО, `пол` varchar(20) НЕ НУЛЕВО, ПЪРВИЧЕН КЛЮЧ (`id`));

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

Коментари към „Формуляр за регистрация на потребител на PHP (регистрация) с MySQL база данни“

    Здравей Винси, получавам следните грешки при стартиране на кода на регистъра, моля, помогнете.

    ВЪВЕТЕ ВЪВ регистрирани_потребители (потребителско_име, екранно_име, парола, имейл) СТОИ (?, ?, ?, ?)
    Предупреждение: call_user_func_array() очаква параметър 1 да бъде валидно обратно извикване, първият член на масива не е валидно име на клас или обект в C:\xampp\htdocs\PHP\JAMII-CASH\DataSource.php на ред 136

    Фатална грешка: Неуловена грешка: Извикване на функция-член execute() на булева в C:\xampp\htdocs\PHP\JAMII-CASH\DataSource.php:99 Проследяване на стека: #0 C:\xampp\htdocs\PHP\JAMII -CASH\Member.php(83): Phppot\DataSource->insert('INSERT INTO reg...', 'ssss', Array) #1 C:\xampp\htdocs\PHP\JAMII-CASH\index.php(20 ): Phppot\Member->insertMemberRecord('chuki10', 'Ray', '202020', ' [защитен с имейл]…’) #2 (основен) хвърлен в C:\xampp\htdocs\PHP\JAMII-CASH\DataSource.php на ред 99

Добър ден приятели! Нека да разгледаме регистрацията на потребител в PHP. Първо, нека дефинираме условията за нашата регистрация на потребител:

  • Паролата е криптирана с помощта на алгоритъм MD5
  • Паролата ще бъде "сол"
  • Проверка за зает вход
  • Потребителско активиране с писмо.
  • Записване и съхранение на данни в СУБД MySQL

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

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

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

Нека да разгледаме структурата на директорията на скриптове, за да приложим нашето влизане с оторизация. Трябва да разделим скриптовете на логически части. Поставихме модулите за регистрация и оторизация в отделна директория. Ще поставим и връзката към базата данни в отделни директории. MySQL, файл с персонализирани функции, файл за стил cssи нашия шаблон HTML. Тази структура ви позволява бързо да навигирате през скриптове. Представете си, че имате голям сайт с куп модули и т.н. и ако няма ред, ще бъде много трудно да се намери нещо в такава каша.

Тъй като ще съхраняваме всички данни в СУБД MySQL, след това нека създадем малка таблица, в която ще съхраняваме регистрационните данни.

Първо трябва да създадете таблица в базата данни. Да извикаме масата без_регкъдето безе префиксът на таблицата и облиме на таблица.

Структура на таблицата: без_рег

-- -- структура на таблицата `bez_reg` -- СЪЗДАЙТЕ ТАБЛИЦА, АКО НЕ СЪЩЕСТВУВА `bez_reg` (`id` int(11) НЕ NULL AUTO_INCREMENT, `login` varchar(200) NOT NULL, `pass` varchar(32) NOT NULL , `salt` varchar(32) NOT NULL, `active_hex` varchar(32) NOT NULL, `status` int(1) НЕ NULL, ПЪРВИЧЕН КЛЮЧ (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

ИНДЕКС.PHP ФАЙЛ

CONFIG.PHP ФАЙЛ

"); ?>

Файл 404.HTML

Грешка 404

Грешка 404

Имаше грешка 404 на страницата

Връщане


BD.PHP файл

ИНДЕКС.HTML ФАЙЛ

Регистрация на потребител на PHP MySQL с имейл за активиране



FUNCT.PHP ФАЙЛ

"."\n"; if(is_array($data)) ( foreach($data като $val) $err .= "

  • ".$val."
  • "."\n"; ) иначе $err .= "
  • ".$data."
  • "."\n"; $err .= ""."\n"; върне $err; ) /**Проста обвивка на MySQL заявка * @param низ $sql */ функция mysqlQuery($sql) ( $res = mysql_query($sql); /* Проверете резултата Това показва действителната заявка, изпратена до MySQL, както и грешката.*/ if(!$res) ( $message = "Лоша заявка: " . mysql_error() . "\n"; $message .= "Цялата заявка: " . $ sql; die($message); ) return $res; ) /**Прост генератор на сол * @param низ $sql */ функция salt() ( $salt = substr(md5(uniqid()), - 8); return $сол ;)

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

    REG.PHP ФАЙЛ

    Успешно се регистрирахте! Моля, активирайте акаунта си!!"; //Активирайте акаунта if(isset($_GET["key"])) ( //Проверете ключа $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `active_hex` = "". escape_str ( $_GET["key"]) """; $res = mysqlQuery($sql); if(mysql_num_rows($res) == 0) $err = "Ключът за активиране е невалиден!"; //Проверка за грешки и показване на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( //Вземете адреса на потребителя $row = mysql_fetch_assoc($res); $email = $row["login"]; //Активирайте потребителя на акаунта $sql = "UPDATE `".BEZ_DBPREFIX ."reg` SET `status` = 1 WHERE `login` = "".$email ."""; $res = mysqlQuery($sql); / /Изпратете имейл за активиране $title = "(!LANG: Вашият акаунт в http://website е активиран успешно"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [защитен с имейл](+\.)+(2,6)$/i", $_POST["email"])) $err = "Имейл е въведен неправилно"."\n"; ) if(empty($_POST[ "pass") ])) $err = "Полето за парола не може да бъде празно"; if(empty($_POST["pass2"])) $err = "Полето за потвърждение на паролата не може да бъде празно"; //Проверете за грешки и покажете на потребителя, ако (count($err) > 0) echo showErrorMessage($err); else ( /*Продължаваме да проверяваме въведените данни Проверка за съвпадащи пароли*/ if($_POST["pass"] != $_POST["pass2" ]) $err = "Паролите не съвпадат"; //Проверете за грешки и покажете на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( /*Проверете дали имаме такъв потребител в базата данни* / $sql = "ИЗБЕРЕТЕ `вход` ОТ `".BEZ_DBPREFIX ."reg` WHERE `login` = "".escape_str($_POST["email"]) """; $res = mysqlQuery( $sql); if(mysql_num_rows($res) > 0) $err = "Съжалявам за влизане: ". $_POST["имейл"] ."зает!"; //Проверете за грешки и покажете на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( //Вземете HASH на солта $salt = salt(); // Посолете паролата $pass = md5(md5($_POST["pass"]).$salt); /*Ако всичко върви добре, запишете данни в базата данни*/ $sql = "INSERT INTO `". BEZ_DBPREFIX ."reg ` VALUES("", "" .escape_str($_POST["email"]) "", "". $pass ."", "". $salt ."", "". md5($salt) . "", 0)"; $ res = mysqlQuery($sql); //Изпращане на имейл за активиране $url = BEZ_HOST ."less/reg/?mode=reg&key=". md5($salt); $title = "(! LANG:Регистрация на http:// /уебсайт"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    REG_FORM.HTML ФАЙЛ

    Регистрация на потребител на PHP MySQL с имейл за активиране

    електронна поща *:
    парола *:
    Потвърждение на парола *:

    Полета с икона *задължително

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

    AUTH.PHP ФАЙЛ

    0) echo showErrorMessage($err); else ( /*Създайте заявка за извличане от базата данни за удостоверяване на потребителя*/ $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `login` = "". escape_str($_POST["email"]) ."" И `status` = 1"; $res = mysqlQuery($sql); //Ако влизането съвпада, проверете паролата if(mysql_num_rows($res) > 0) ( //Вземете данни от таблица $row = mysql_fetch_assoc( $res); if(md5(md5($_POST["pass"]).$row["salt"]) == $row["pass"]) ( $_SESSION["user"] = true; // Нулиране на параметрите header("Location:". BEZ_HOST ."less/reg/?mode=auth"); изход; ) else echo showErrorMessage("Грешна парола!"); ) else echo showErrorMessage("Вход ". $_POST["имейл"] ."не е намерено!"); ) ) ?>

    За тези, които имат най-новата версия на PHP, публикувам този скрипт, използвайки ЗНПзащото разширение MySQLе остарял и е премахнат от новата версия на PHP. Изтеглете регистрация и оторизация php mysql pdo

    Архивът е актуализиран на 24 февруари 2015 г.

    внимание:Ако използвате този скрипт на локален сървър като DENWER,XAMPP, тогава не трябва да чакате писма до пощенската си кутия. Писмата са в мъничето изпрати писмо. AT Денвърможете да ги намерите по пътя Z:\tmp\!sendmail\Можете да отворите тези файлове във всеки имейл клиент.

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

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

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

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

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

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

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

    • документ за самоличност- Идентификатор. Поле документ за самоличносттрябва да има във всяка таблица от базата данни.
    • първо име- За да запазите името.
    • фамилия- За да запазите фамилното име.
    • електронна поща- За да запазите пощенския адрес. Ще използваме електронната поща като вход, така че това поле трябва да е уникално, тоест да има УНИКАЛЕН индекс.
    • имейл_статус- Поле, което показва дали имейлът е потвърден или не. Ако имейлът е потвърден, тогава той ще има стойност 1, в противен случай ще има стойност 0. По подразбиране това поле ще има стойност 0.
    • парола- За да запазите паролата.

    Всички полета от тип "VARCHAR" трябва по подразбиране да са NULL.


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

    Проверка на имейл с jQuery

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

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

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


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

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

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

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

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

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

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

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

    Преди да продължим, трябва да проверим дали формулярът изобщо е подаден. Нападателят може да разгледа стойността на атрибут действиеот формуляра и разберете кой файл обработва този формуляр. И може да му хрумне идеята да отиде директно към този файл, като напише следния адрес в адресната лента на браузъра: http://site_site/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; // Връщане на потребителя към заглавката на страницата за регистрация("HTTP/1.1 301 преместен за постоянно"); header("Местоположение: " .$address_site ."/form_register.php"); //Спрете скрипта exit(); ) // (2) Място за следващото парче код )else( //Ако captcha не е предадена или е празен изход ("

    Грешка!Няма код за потвърждение, тоест 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"] .= "

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

    Липсва поле за име

    "; //Връщане на потребителя към заглавката на страницата за регистрация("HTTP/1.1 301 преместен за постоянно"); header("Местоположение: ".$address_site."/form_register.php"); //Спиране на изхода на скрипта(); ) 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"] .= "

    Въведете фамилното си име

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

    Липсва полето за име

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

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

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

    "; //Връщане на потребителя към заглавката на страницата за регистрация("HTTP/1.1 301 преместен за постоянно"); header("Местоположение: ".$address_site."/form_register.php"); //Спиране на изхода на скрипта(); ) 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"] .="

    Въведете паролата си

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

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

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

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

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

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

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

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

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

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

    "; //Връщане на потребителя към заглавката на страницата за регистрация("HTTP/1.1 301 преместен за постоянно"); 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"] .= "

    Заявка за грешка за добавяне на потребител към базата данни

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

    Регистрацията приключи успешно!!!
    Сега можете да влезете с вашето потребителско име и парола.

    "; //Изпращане на потребителя до заглавката на страницата за вход("HTTP/1.1 301 преместен за постоянно"); 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"] = "";

    /* Проверете дали формулярът е изпратен, тоест дали е щракнат бутонът Вход. Ако да, тогава отиваме по-далеч, ако не, тогава ще покажем съобщение за грешка на потребителя, в което се посочва, че е отишъл директно на тази страница. */ if(isset($_POST["btn_submit_auth"]) && !empty($_POST["btn_submit_auth"]))( //(1) Място за следващото парче код )else( exit("

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

    "); }

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

    Грешка!Въвели сте грешна captcha

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

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

    "; // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] = $error_message; // Връщане на потребителя към заглавката на страницата за оторизация("HTTP/1.1 301 преместен за постоянно"); 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"] .= "

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

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

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

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

    Няма поле за въвеждане на имейл

    "; //Връщане на потребителя към заглавката на страницата за оторизация("HTTP/1.1 301 преместен за постоянно"); header("Местоположение: ".$address_site."/form_auth.php"); //Спиране на изхода на скрипта(); ) // (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"] . = "

    Въведете паролата си

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

    Няма поле за въвеждане на парола

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

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

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

    //Запитване към базата данни при избора на потребителя. $result_query_select = $mysqli->query("SELECT * FROM `users` WHERE email = "".$email."" И парола = ".$password."""); if(!$result_query_select)( // Запазете съобщението за грешка в сесията. $_SESSION["error_messages"] .= "

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

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

    Грешно потребителско име и/или парола

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

    Изход от сайта

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

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

    Модифициран код от файл header.php:

    Регистрация

    Излезте

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

    Файлов код logout.php:

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

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

    Всички скриптове са тествани и работят. Можете да изтеглите архива с файловете на този малък сайт от този линк.

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

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

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

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

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

    Здравейте! Сега ще се опитаме да приложим най-простата регистрация на сайта с помощта на PHP + MySQL. За да направите това, Apache трябва да бъде инсталиран на вашия компютър. Как работи нашият скрипт е показано по-долу.

    1. Нека започнем със създаване на таблицата на потребителите в базата данни. Той ще съдържа потребителски данни (вход и парола). Да отидем на phpmyadmin (ако създавате база данни на вашия компютър http://localhost/phpmyadmin/). Създайте таблица потребители, ще има 3 полета.

    Аз го създавам в mysql база данни, вие можете да го създадете в друга база данни. След това задайте стойностите, както е показано на фигурата:

    2. Изисква се връзка с тази таблица.Нека създадем файл bd.php. Неговото съдържание:

    $db = mysql_connect("вашият MySQL сървър","влезте към този сървър","парола към този сървър");
    mysql_select_db ("име на базата данни за свързване", $db);
    ?>

    В моя случай изглежда така:

    $db = mysql_connect("localhost","user","1234");
    mysql_select_db("mysql",$db);
    ?>

    ние спестяваме bd.php.
    Отлично! Имаме таблица в базата данни, връзка с нея. Сега можете да започнете да създавате страница, където потребителите ще оставят своите данни.

    3. Създайте reg.php файл със съдържание (всички коментари вътре):



    Регистрация


    Регистрация


















    4. Създайте файл, който ще въведе данни в базата данни и ще запази потребителя. save_user.php(коментари вътре):



    {
    }
    //ако входът и паролата са въведени, тогава ги обработваме, така че таговете и скриптовете да не работят, никога не знаете какво могат да въвеждат хората


    // премахване на допълнителни интервали
    $login = trim($login);
    $password = trim($password);
    // свързване към базата данни
    // проверка за съществуването на потребител със същото потребителско име
    $result = mysql_query("ИЗБЕРЕТЕ идентификатор ОТ потребители WHERE вход = "$login"", $db);
    if (!empty($myrow["id"])) (
    exit("Съжаляваме, въведеното от вас потребителско име вече е регистрирано. Моля, въведете друго потребителско име.");
    }
    // ако няма такъв, запазете данните
    $result2 = mysql_query ("ВМЕСЕТЕ В потребители (вход, парола) VALUES("$login","$password")");
    // Проверете дали има грешки
    ако ($result2=="ВЯРНО")
    {
    echo "Успешно се регистрирахте! Сега можете да влезете в сайта. Главна страница";
    }
    друго(
    echo "Грешка! Не сте влезли.";
    }
    ?>

    5. Сега нашите потребители могат да се регистрират!След това трябва да направите "врата", за да влезете в сайта за вече регистрирани потребители. index.php(коментари вътре):

    // цялата процедура работи на сесии. Именно в него се съхраняват данните на потребителя, докато той е на сайта. Много е важно да ги стартирате в самото начало на страницата!!!
    сесия_старт();
    ?>


    Главна страница


    Главна страница











    Регистрирам



    // Проверете дали променливите за вход и потребителски идентификатор са празни
    ако (празен($_SESSION["вход"]) или празен($_SESSION["id"]))
    {
    // Ако е празен, не показваме връзката
    echo „Влезли сте като гост
    Тази връзка е достъпна само за регистрирани потребители“;
    }
    друго
    {

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

    6. Има файл с проверка на въведените потребителско име и парола. testreg.php (коментари вътре):

    session_start();// цялата процедура работи на сесии. Именно в него се съхраняват данните на потребителя, докато той е на сайта. Много е важно да ги стартирате в самото начало на страницата!!!
    if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //поставете данните за вход, въведени от потребителя в променливата $login, ако е празна, тогава унищожаваме променливата
    if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
    //поставяме въведената от потребителя парола в променливата $password, ако е празна, унищожи променливата
    if (empty($login) or empty($password)) //ако потребителят не е въвел потребителско име или парола, тогава хвърлете грешка и спрете скрипта
    {
    exit("Не сте въвели цялата информация, върнете се и попълнете всички полета!");
    }
    //ако входът и паролата са въведени, тогава ги обработваме, така че таговете и скриптовете да не работят, никога не знаете какво могат да въвеждат хората
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $password = stripslashes($парола);
    $парола = htmlspecialchars($парола);
    // премахване на допълнителни интервали
    $login = trim($login);
    $password = trim($password);
    // свързване към базата данни
    include("bd.php");// файлът bd.php трябва да е в същата папка като всички останали, ако не е, просто променете пътя

    $result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //извличане на всички данни за потребителя с въведения вход от базата данни
    $myrow = mysql_fetch_array($резултат);
    ако (празен($myrow["парола"]))
    {
    //ако потребителят с въведеното име не съществува
    }
    друго(
    //ако съществува, проверете паролите
    if ($myrow["password"]==$password) (
    //ако паролите съвпадат, тогава започваме сесията за потребителя! Можете да го поздравите, той влезе!
    $_SESSION["login"]=$myrow["login"];
    $_SESSION["id"]=$myrow["id"];//тези данни се използват много често, така че влезлият потребител ще ги "носи"
    echo "Успешно сте влезли в сайта! Главна страница";
    }
    друго(
    //ако паролите не съвпадат

    Exit("Съжаляваме, въведеното от вас потребителско име или парола е неправилно.");
    }
    }
    ?>

    Добре, всичко свърши сега! Може би урокът е скучен, но много полезен. Тук е показана само идеята за регистрация, допълнително можете да я подобрите: добавете защита, дизайн, полета за данни, качване на аватари, излезте от акаунта (за това просто унищожете променливите от сесията с функцията ненастроено) и така нататък. Късмет!

    Проверих всичко, работи добре!

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

    Създаване на формуляри в Laravel

    Създаването на формуляри в Laravel е изненадващо лесно. В по-голямата си част нищо не ви пречи да използвате стандартни HTML тагове, но Laravel може да улесни живота ви много. Да речем PHP клас Формулярима PHP метод етикет(), което ви позволява да свързвате етикети с полета на формуляра, като използвате съответните (автоматично генерирани) идентификатори. Нека създадем проста форма като пример:

    PHP

    Регистрирам!



    ?>

    Всичко е очевидно, нали? Отваряме формуляра ПУБЛИКАЦИЯ- заявка по маршрута регистрирам, създайте някои етикети и полета за въвеждане и добавете CSRF ключ, след което затворете формуляра. Ако имаме нужда безопасен маршрут(използвайки HTTPS), след което заменете извикването на PHP Форма::отворен()на PHP повикване Форма::open_secure(), и ако трябва да създадем формуляр за качване на файлове, PHP ще ни бъде полезен Форма::open_for_files() .

    Сигурно сте забелязали някои PHP повиквания Вход::стар()- ще говорим за тях, но засега не забравяйте, че те са тук.

    клас Формулярсъдържа много методи за лесно създаване на формуляри - можете да ги намерите в документацията.

    Фалшифициране на междусайтови заявки (CSRF)

    Няма да навлизам в подробности за CSRF - Джеф Атууд написа много описателна статия за това какво представлява и как да го избегнем.

    Метод Форма::токен()създава произволна последователност от знаци, съхранява я в данните за сесията (което означава, че трябва да активирате поддръжка за нея в application/config/session.php) и я извежда като скрито поле на формуляр. Когато обработваме заявка от формуляр, който използва CSRF ключ, можем да използваме вградения филтър csrfза да провери дали никой не е "работил" по заявката и дали наистина идва от потребителя.

    Ето как изглежда кодът на филтъра (файл application/routes.php):

    PHP Route::filter("csrf", function()(
    if (Request::forged()) return Response::error("500");
    });

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

    PHP Route :: post ("register" , array("before" => "csrf" , function () (
    // Регистрация на нов потребител.
    }));

    Това е всичко, от което се нуждаем, за да активираме CSRF филтъра - просто се уверете, че е в списъка преди.

    Проверка на въведените данни

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

    Няколко души посочиха, че валидирането не трябва да се извършва в контролера. Обикновено е най-добре да направите това в модела - следващата ми статия "Разширено валидиране на въвеждане в Laravel"описва точно този начин за решаване на проблема.

    PHP // файл application/routes.php.

    Route :: post ("register" , array("before" => "csrf" , function () (
    $rules = масив(
    "username" => array("задължително" , "unique:users,username" ),
    "email" => array("задължително" , "email" , "unique:users,email" ),
    "password" => array("задължително" , "мин:7" )
    );

    $validation = Валидатор :: make(Input :: all(), $rules );

    Ако ($validation -> fails()) (
    // валидирането не бе успешно.
    върнете Пренасочване :: към ("регистрация" )-> with_input ()-> with_errors($validation);
    }

    // данните преминаха проверка - можем да създадем нов потребител.
    }));

    1. Дефинирайте масив от правила - ключовесъвпадат с имената на полетата за въвеждане на формуляра, стойности- правилата, които трябва да спазват. В нашия случай полето потребителско име ("Потребителско име") би трябвало пълни(задължително) и единствен по рода си(единствен по рода си).
    2. Създайте PHP обект Валидатор - първи параметъризискват се данни за валидиране (в нашия случай данните от формуляра, получени чрез ПУБЛИКАЦИЯ), второ- набор от правила.
    3. Тогава ние извършете проверка- ако не успее, пренасочете потребителя обратно към маршрута регистрирам(използвайки ВЗЕМЕТЕ) със стари данни за въвеждане и грешки.
    4. Ако всички полета са попълнени правилно- регистрирайте нов акаунт, оторизирайте потребителя или направете нещо друго.

    Последователността от действия, които извършваме тук, се нарича шаблон. „Публикуване/Пренасочване/Вземи“(PRG) е чудесен начин да предотвратите двойното подаване на формуляр.

    Сега нека разгледаме правилата, които дефинирахме по-горе.

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

    единствен по рода си- това е малко по-сложно. Това правило приема 3 параметъра, 2 от които могат да бъдат пропуснати. Първи параметър- името на таблицата, в която искате да проверите стойността за уникалност; второ- име на полето в таблицата, ако не съвпада с името на полето във формуляра (в този случай може да се пропусне); третиа последният параметър е стойността ( документ за самоличност) за първичен ключ.

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

    PHP $rules = масив(
    "email" => array("задължителен" , "email" , "unique:users,email," . $user -> id )
    );

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

    мин- задава минималната допустима дължина на стойността на това поле.

    Пълен списък на наличните правила може да се намери в документацията.

    Показване на грешка

    PHP свойство $validation -> грешкисъдържа един и същ обект съобщенияс всички грешки, открити при въвеждането. Laravel ще открие, че е извършено пренасочване с грешкии автоматично свързване на този обект към подаване. Скоро ще разберете какво имам предвид.

    Запомнете PHP повикванията Вход::стар()в ? Когато препращаме заявка с входте ще върнат стойностите, които потребителят е въвел във формуляра по-рано. Така че, ако кажа, че името ми е „Джейсън“, но регистрацията не се случи, „Джейсън“ ще остане въведен дори след като бях пренасочен обратно към формуляра. Отлично!

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

    PHP echo Form :: password ("password" , array("value" => Input :: old ("password" )));

    Да се ​​върнем към нашата форма. Както си спомняте, имаме променлива $грешки- PHP обект съобщения. Нека направим нашия формуляр по-удобен, като показваме грешки, когато не е попълнен правилно:

    PHP

    Регистрирам!

    Echo Form::open("register" , "POST");

    echo Form :: label("потребителско име" , "Потребителско име") . Form::text("username" , Input::old("username" ));

    if ($errors -> has("username"))(
    echo $errors -> first("потребителско име");
    }

    echo Form :: label("email" , "E-mail" ) . Form::text("email" , Input::old("email" ));

    if ($errors -> has("email")) (
    echo $errors -> first("имейл");
    }

    echo Form :: label("парола" , "Парола") . Form::password("парола");

    if ($errors -> has("password")) (
    echo $errors -> first("парола");
    }

    echo Form::submit("Регистрация!");

    ехо Форма::токен(). форма::затвори();

    ?>

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

    Можете да форматирате съобщението в желания HTML, като го предадете във втория параметър:

    PHP echo $errors -> първо ("потребителско име" , " :съобщение");

    Или ако искате да покажете първото съобщение за грешка за всяко поле, не само потребителско име: )); ?>

    PHP $errors -> all()връща масив от форматирани съобщения, така че ние го конкатенираме в низ.

    Собствени правила и грешки

    Често ще трябва да създадете свои собствени правила за валидиране на въведените данни. Преди Laravel 3това беше направено чрез класово наследяване Валидатори добавяне на методи към него. С поддръжката на пакети беше необходимо по-стабилно решение, за да се избегне необходимостта от създаване на множество подкласове. Laravel 3позволява регистрирайте персонализирани правилаизползвайки PHP Валидатор::регистрация() :

    PHP // този код може да бъде поставен в application/start.php например:
    Валидатор :: регистър("starts_with" , функция ($атрибут, $стойност, $параметри) (
    връщане starts_with ($value, $parameters [0]);
    });

    В този прост манипулатор ние просто се връщаме вярноако стойността започва с посочения низ (предаден в първия и единствен параметър) и фалшивов противен случай. Ето един от малкото глобални функции Laravel - PHP започва с() .

    Използвайки новото правило:

    PHP $rules = масив(
    "website" => array("задължително" , "starts_with:http://")
    );

    Тук трябва да дефинираме полето като задължително(„задължително“). В допълнение към това, ние също трябва да добавим съобщение за грешка към файла application/language/en/validation.php:

    PHP "по избор" => масив(
    "website_starts_with" => „Уебсайтът трябва да започва с http://“
    )

    Или можете да го направите, когато създавате екземпляр Валидатор, предавайки го на трети параметър:

    И така, създадохме формуляр, който изпраща ПУБЛИКАЦИЯ- заявка към нашия маршрут, където входът се проверява от контролера - който от своя страна изпраща клиента обратно, когато бъдат открити грешки, запазвайки предишния вход и извеждайки съответните съобщения.

    Прочетете също: