Аристократія register form php. PHP сценарії обробки HTML форм. Приклад #1 Найпростіша форма HTML

Last modified on July 23rd, 2019 by Vincy.

User registration або sign up is integrated part of many web applications and it critical to get it right for the success of the application. Це startpoint user engagement with your application.

Вона повинна бути якоюсь можливою з найбільшою UI / UX. Implementing user registration functionality using PHP is simple task and I will walk you через steps with example in this article.

What is inside? How this PHP user registration example works?

Цей код код може бути відокремлений до 3 частин.

  • Використовувати user information via a HTML form.
  • Validating user submitted information on form submit.
  • Database handling to save registered user to the database після validation.
  • Трьох щаблів буде виконано після того, як ви почуєте, що його користувач не може бути зроблений. Ця data uniqueness validation буде сформульована на основі їх електронної пошти та username entered by them.

    Під час registration we generally collect user information, whe are ready to register with our application. Один з них буде mandatory і деякий з них буде optional.

    Так, ця функціональність може також включати validation part для забезпечення про небезпеку і формат користувача для користувача. Зміна може бути спричинена будь-якою іншою стороною клієнта або серверною стороною.

    Having validation at server-side is always better. Ви можете виконати це в клієнта-ситі також для того, щоб користуватися користувачами. Однак, на сервері-ці не є опційним і minimum requirement.

    File structure

    HTML form to allow user to register

    У цьому прикладі, registration form contains the fields Username, Name(Display Name), Password and Email. Це також має Confirm Password полів до літа користувача, щоб зареєструвати його password для confirmation. Ці два passwords будуть compared later at the time of a .

    Будучи підміщеною цією формою, user expected до agree the terms and conditions. So checkbox field is added before Register button for ensuring it.

    PHP User Registration Form Sign Up Username

    Файл CONFIG.PHP

    less/reg/?mode=auth">Увійти

  • Цей файл 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), відкриваємо структуру таблиці usersі дивимось які поля нам потрібні. Отже, нам потрібні поля для введення імені та прізвища, поле для введення поштової адреси (Email) та поле для введення пароля. І ще з метою безпеки додамо поле для введення капчі.

    На сервері, в результаті обробки форми реєстрації можуть виникнути різні помилки, через які користувач не зможе зареєструватися. Тому для того, щоб користувач розумів чому не проходить реєстрація, необхідно вивести йому повідомлення про ці помилки.

    Перед виведенням форми додаємо блок для виведення повідомлень про помилки із сесії.

    І ще момент, якщо користувач вже авторизований, і він заради інтересу заходить на сторінку реєстрації безпосередньо, написавши в адресний рядок браузера адреса сайту/form_register.php, то ми в цьому випадку замість форми реєстрації виведемо йому заголовок про те, що він вже зареєстрований.

    Загалом код файлу form_register.phpу нас вийшов таким:

    Ви вже зареєстровані

    У браузері сторінка з формою реєстрації виглядає так:


    За допомогою атрибуту required ми зробили всі поля обов'язковими до заповнення.

    Зверніть увагу на код форми реєстрації де виводиться капча:


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

    Подивимося на код файлу captcha.php:

    Код добре закоментований, тому я зупинюся лише на одному моменті.

    Усередині функції imageTtfText(), вказано шлях до шрифту verdana.ttf. Так ось для коректної роботи капчі, ми маємо створити папку fonts, і помістити туди файл шрифту verdana.ttf. Його Ви можете знайти та скачати з інтернету, або взяти з архіву з матеріалами цієї статті.

    З HTML структурою ми закінчили, настав час рухатися далі.

    Перевірка email на валідність за допомогою jQuery

    Будь-яка форма потребує перевірки на валідність введених даних як на стороні клієнта (за допомогою JavaScript, jQuery), так і на стороні сервера.

    Особливу увагу ми повинні приділити полю Email. Дуже важливо, щоб введена поштова адреса була валідною.

    Для даного поля input ми задали тип email (type="email"), це нас трошки застерігає від неправильних форматів. Але цього недостатньо, тому що через інспектор коду, якого надає нам браузер, можна легко змінити значення атрибуту typeз emailна text, і все, наша перевірка буде вже недійсною.


    І в такому разі, ми маємо зробити більш надійну перевірку. Для цього скористаємося бібліотекою jQuery від JavaScript.

    Для підключення бібліотеки jQuery у файлі header.phpміж тегами , перед закриває тега , додаємо цей рядок:

    Відразу після цього рядка додамо код перевірки валідації email. Тут додамо код перевірки довжини введеного пароля. Його довжина має бути не менше 6 символів.

    За допомогою цього скрипту ми перевіряємо введену поштову адресу на валідність. Якщо користувач ввів неправильний Email, ми виводимо йому помилку про це і дезактивуємо кнопку відправки форми. Якщо все добре, то ми прибираємо помилку та активуємо кнопку відправлення форми.

    І так, із перевіркою форми на клієнтській частині ми закінчили. Тепер ми можемо відправити її на сервер, де також зробимо пару перевірок та додамо дані до БД.

    Реєстрація користувача

    Форму ми надсилаємо на обробку файлу register.phpчерез метод POST. Назва файлу обробника, вказано в значення атрибута action. А метод відправлення вказано у значення атрибуту метод.

    Відкриваємо цей файл register.phpі перше, що нам потрібно зробити, це написати функцію запуску сесії та підключити створений нами раніше файл dbconnect.php(У цьому файлі ми зробили підключення до БД). І ще, відразу оголосимо осередки error_messagesі success_messagesу глобальному масиві сесії. У error_mesagesбудемо записувати всі повідомлення про помилки, що виникають при обробці форми, а в succes_messages, будемо записувати радісні повідомлення.

    Перед тим, як продовжити, ми повинні перевірити, чи взагалі була відправлена ​​форма . Зловмисник може подивитися на значення атрибуту actionз форми, і дізнатися який файл займається обробкою цієї форми. І йому може спасти на думку перейти безпосередньо в цей файл, набираючи в адресному рядку браузера таку адресу: http://арес_сайту/register.php

    Тому нам потрібно перевірити наявність осередку у глобальному масиві POST, ім'я якого відповідає імені нашої кнопки "Зареєструватися" з форми. Таким чином ми перевіряємо чи була натиснута кнопка "Зареєструватися" чи ні.

    Якщо зловмисник спробує перейти безпосередньо до цього файлу, він отримує повідомлення про помилку. Нагадую, що змінна $address_site містить назву сайту і вона була оголошена у файлі dbconnect.php.

    Значення капчі в сесії було додано під час її генерації, у файлі captcha.php. Для нагадування ще раз покажу цей шматок коду з файлу captcha.php, де додається значення капчі в сесію:

    Тепер приступимо до самої перевірки. У файлі register.php, всередині блоку if, де перевіряємо, чи була натиснута кнопка "Зареєструватися", а точніше де вказано коментар " // (1) Місце для наступного шматка кодупишемо:

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

    Помилка! Ви ввели неправильну капчу

    // Зберігаємо в сесію повідомлення про помилку. $_SESSION["error_messages"] = $error_message; //Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); ."/form_register.php"); //Зупиняємо скрипт exit(); ) // (2) Місце для наступного шматка коду )else( //Якщо капча не передана або воно є порожнім exit("

    Помилка! Відсутній код перевірки, тобто код капчі. Ви можете перейти на головну сторінку.

    "); }

    Далі нам потрібно обробляти отримані дані з масиву POST. Насамперед, нам потрібно перевірити вміст глобального масиву POST, тобто чи є там осередки, імена яких відповідають іменам полів input з нашої форми.

    Якщо осередок існує, то обрізаємо прогалини з початку і з кінця рядка з цього осередку, інакше перенаправляємо користувача назад на сторінку з формою реєстрації.

    Далі, після того як обрізали пробіли, додаємо рядок у змінну та перевіряємо цю змінну на порожнечу, якщо вона не є порожньою, то йдемо далі, інакше перенаправляємо користувача назад на сторінку з формою реєстрації.

    Цей код вставляємо у вказане місце " // (2) Місце для наступного шматка коду".

    /* Перевіряємо якщо в глобальному масиві $_POST існують дані відправлені з форми і укладаємо передані дані в звичайні змінні. = 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("Location: ".$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("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); ) )else ( // Зберігаємо у сесію повідомлення про помилку. $_SESSION["error_messages"] .= "

    Немає поля з прізвищем

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$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"] .= "

    Вкажіть Ваш email

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); ) )else ( // Зберігаємо у сесію повідомлення про помилку. $_SESSION["error_messages"] .= "

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$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("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); ) )else ( // Зберігаємо у сесію повідомлення про помилку. $_SESSION["error_messages"] .= "

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); ) // (4) Місце для коду додавання користувача до БД

    Особливу важливість має поле email. Ми повинні перевірити формат отриманої поштової адреси та її унікальність у БД. Тобто чи не зареєстрований вже якийсь користувач із такою самою поштовою адресою.

    У вказаному місці // (3) Місце коду для перевірки формату поштової адреси та її унікальності" додаємо наступний код:

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

    Ви ввели неправильний email

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); ) // Перевіряємо чи немає вже такої адреси в БД. рядків рівно одиниці, значить користувач з такою поштовою адресою вже зареєстрований if($result_query->num_rows == 1)( //Якщо отриманий результат не дорівнює false if(($row = $result_query->fetch_assoc()) != false) ( // Зберігаємо в сесію повідомлення про помилку. $_SESSION["error_messages"] .= "

    Користувач із такою поштовою адресою вже зареєстрований

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_register.php"); )else( // Зберігаємо в сесію повідомлення про помилку . $_SESSION["error_messages"] .= "

    Помилка у запиті до БД

    // Повертаємо користувача на сторінку реєстрації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$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("Location: ".$address_site."/form_register.php"); //Зупиняємо скрипт exit(); )else( $_SESSION["success_messages"] = "

    Реєстрація пройшла успішно!
    Тепер Ви можете авторизуватися використовуючи Ваш логін та пароль.

    // Відправляємо користувача на сторінку авторизації header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$address_site."/form_auth.php"); ) /* Завершення запиту */ $result_query_insert-> close(); //Закриваємо підключення до БД $mysqli->close();

    Якщо у запиті на додавання користувача до БД виникла помилка, ми додаємо повідомлення про цю помилку в сесію та повертаємо користувача на сторінку реєстрації.

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

    Скрипт для перевірки формату поштової адреси та довжини пароля знаходиться у файлі header.phpТому він буде діяти і на поля з цієї форми.

    Запуск сесії також відбувається у файлі header.phpтому у файлі form_auth.phpсесію запускати не потрібно, бо отримаємо помилку.


    Як я вже сказав, скрипт перевірки формату поштової адреси та довжини пароля тут також діє. Тому якщо користувач введе неправильну поштову адресу або короткий пароль, він відразу ж отримає повідомлення про помилку. А кнопка увійтистане не активною.

    Після усунення помилок кнопка увійтистає активною, і користувач зможе відправити форму на сервер, де вона оброблятиметься.

    Авторизація користувача

    У значення атрибуту actionу фори авторизації вказаний файл auth.phpЦе означає, що форма буде оброблятися саме в цьому файлі.

    І так, відкриваємо файл auth.phpта пишемо код для обробки форми авторизації. Перше, що потрібно зробити це запустити сесію і підключити файл dbconnect.phpдля з'єднання з БД.

    При натисканні на посилання виходу з сайту ми потрапляємо у файл logout.php, де просто знищуємо осередки з поштовою адресою та паролем із сесії. Після цього повертаємо користувача назад на ту сторінку, на якій було натиснуто посилання вихід.

    Код файлу logout.php:

    На цьому все. Тепер Ви знаєте як реалізувати та обробляти форми реєстрації та авторизації користувача на своєму сайті. Ці форми зустрічаються майже кожному сайті, тому кожен програміст повинен знати, як їх створювати.

    Ще ми навчилися перевіряти дані, що вводяться, як на стороні клієнта (в браузері, за допомогою JavaScript, jQuery) так і на стороні сервера (за допомогою мови PHP). Також ми навчилися реалізувати процедуру виходу із сайту.

    Усі скрипти перевірені та робітники. Архів з файлами цього маленького сайту Ви можете завантажити за цим посиланням.

    У майбутньому я напишу статтю де опишу. І ще планую написати статтю, де поясню, (без перезавантаження сторінки). Так що для того, щоб бути в курсі про вихід нових статей, можете підписатися на мій сайт.

    При виникненні питань звертайтеся також, якщо ви помітили, якусь помилку в статті прошу вас, повідомте мені про це.

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

  • Створюємо HTML структуру для форми авторизації
  • Обробляємо отримані дані
  • Виводимо вітання користувача до шапки сайту
  • Сподобалася стаття?

    Привіт! Зараз ми спробуємо реалізувати найпростішу реєстрацію на сайті за допомогою PHP+MySQL. Для цього на вашому комп'ютері потрібно встановити Apache. Нижче наведено принцип роботи нашого скрипта.

    1. Почнемо зі створення таблички users у базі . Вона міститиме дані користувача (логін та пароль). Зайдемо в phpmyadmin (якщо ви створюєте базу на своєму ПК http://localhost/phpmyadmin/). Створюємо таблицю users, у ній буде 3 поля.

    Я створюю її в базі mysql, ви можете створювати в іншій базі. Далі встановлюємо значення, як у малюнку:

    2. Необхідне з'єднання з цією таблицею. Давайте створимо файл bd.php. Його зміст:

    У моєму випадку це виглядає так:

    Зберігаємо bd.php.
    Чудово! Ми маємо таблицю в базі, з'єднання до неї. Тепер можна приступати до створення сторінки, на якій користувачі залишатимуть свої дані.

    3. Створюємо файл reg.php зі змістом (усі коментарі всередині):



    Реєстрація


    Реєстрація


    Ваш логін:




    Ваш пароль:








    4. Створюємо файл, який заноситиме дані в базу і зберігатиме користувача. save_user.php (коментарі всередині):

    5. Тепер наші користувачі можуть реєструватися! Далі необхідно зробити "двері" для входу на сайт вже зареєстрованим користувачам. index.php (коментарі всередині):




    Головна сторінка


    Головна сторінка


    Ваш логін:


    Ваш пароль:






    Зареєструватись



    От і все! Може урок і нудний, але дуже корисний. Тут показано лише ідею реєстрації, далі Ви можете вдосконалити її: додати захист, оформлення, поля з даними, завантаження аватарів, вихід з акаунту (для цього просто знищити змінні з сесії функцією unset) і так далі. Успіхів!

    Все перевірив, чи працює справно!

    Форми - неодмінна частина будь-якого веб-додатку. Ми використовуємо їх для авторизації та реєстрації нового користувача, на сторінці зворотного зв'язку, при надсиланні коментаря та для багатьох інших завдань. Однак їх створення та подальша перевірка може бути неприємним процесом – і тут на сцену виходить Laravel, який дає нам кілька акуратних класів для інтуїтивно зрозумілої роботи з формами та їх даними.

    Створення форм у Laravel

    Створювати форми у Laravel несподівано просто. Здебільшого нічого не заважає вам використовувати стандартні теги HTML, але Laravel може полегшити вам життя. Скажімо, клас PHP Form має метод PHP label () , що дозволяє вам зв'язати мітки з полями форми, використовуючи відповідні (автосгенеровані) ID. Давайте як приклад створимо просту форму:

    PHP Register!



    ?>

    Все очевидно, чи не так? Ми відкриваємо форму POST-запиту на маршруті register , створюємо кілька міток та полів введення та додаємо CSRF-ключ, після чого закриваємо форму. Якщо нам потрібний безпечний маршрут(з використанням HTTPS), то замінимо виклик PHP Form::open() на виклик PHP Form::open_secure(), а якщо нам потрібно створити форму для завантаження файлів, то стане в нагоді PHP Form::open_for_files().

    Ви напевно помітили деякі виклики PHP Input :: old () - про них ми поговоримо, а поки що просто запам'ятайте, що вони тут є.

    Клас Form містить безліч методів для простого створення форм - ви можете ознайомитися з ними в документації.

    Підробка міжсайтових запитів (CSRF)

    Я не буду вдаватися до подробиць про CSRF - Jeff Atwood написав дуже наочну статтю про те, що це таке і як цього уникнути.

    Метод Form::token() створює випадкову послідовність символів, зберігає їх у даних сесії (це означає, що вам потрібно включити їхню підтримку в 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-фільтра – просто переконається, що він вказаний у списку before.

    Перевірка введених даних

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

    Декілька людей помітили, що перевірка не повинна виконуватися в контролері. Зазвичай найкраще робити це в моделі – моя наступна стаття «Просунута перевірка введення в Laravel» описує саме цей спосіб розв'язання задачі.

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

    Route :: post ("register" , array("before" => "csrf" , function () (
    $rules = array(
    "username" => array("required" , "unique:users,username" ),
    "email" => array("required" , "email" , "unique:users,email" ),
    "password" => array("required" , "min:7" )
    );

    $validation = Validator :: make (Input :: all(), $rules);

    If ($validation -> fails ()) (
    // Перевірка не пройдено.
    return Redirect :: to ("register" )-> with_input()-> with_errors ($validation );
    }

    // дані пройшли перевірку – можемо створювати нового користувача.
    }));

  • Визначаємо масив правил - ключівідповідають іменам полів введення форми, значення- правилам, яким вони мають відповідати. У нашому випадку поле username («ім'я користувача») має бути заповнене (required) та унікально (unique).
  • Створюємо об'єкт PHP Validator - першим параметромвін приймає дані для перевірки (у нашому випадку дані форми, отримані через POST), другим- Набір правил.
  • Потім ми виконуємо перевірку – якщо вона не пройшла, переадресуємо користувача назад до маршруту register (використовуючи GET) зі старим введенням та повідомленнями про помилки.
  • Якщо всі поля заповнені правильно - реєструємо новий обліковий запис, авторизуємо користувача, або робимо щось ще.
  • Послідовність дій, які ми тут виконуємо, називають шаблоном «Post/Redirect/Get» (PRG) – це чудовий спосіб запобігти подвійному надсиланню форми.

    Тепер подивимося на правила, які ми визначили вище.

    required - означає, що поле має бути заповнене - іншими словами, воно має мати значення.

    unique - тут трохи складніший момент. Це правило приймає 3 параметри, 2 з яких можна опустити. Перший параметр – ім'я таблиці, в якому потрібно перевіряти значення на унікальність; другий - ім'я поля у таблиці, якщо воно відповідає імені поля у формі (у разі його можна пропустити); третій та останній параметр - значення ( id) для первинного ключа.

    Припустимо, що ми оновлюємо існуючий профіль користувача - ми так само хочемо, щоб його e-mail був унікальним, але якщо він вирішив не змінювати свою адресу, то нам не варто говорити, що введений e-mail вже зайнятий - ним самим. Для цього ми і передаємо ID користувача – Laravel виключить відповідний запис із перевірки.

    PHP $rules = array(
    "email" => array("required" , "email" , "unique:users,email," . $user -> id )
    );

    e-mail - перевіряє, чи введене значення схожена правильну e-mail адресу, але не перевіряє її на існування.

    min – встановлює мінімально допустиму довжину значення даного поля.

    Повний список доступних правил можна знайти у документації.

    Відображення помилок

    Властивість PHP $validation -> errors містить той самий об'єкт Messages з усіма помилками, знайденими у вхідних даних. Laravel визначить, що було виконано переадресацію з помилкамиі автоматично прив'яже цей об'єкт до подання. Ви скоро зрозумієте, що я маю на увазі.

    Пам'ятайте виклики PHP Input :: old () у ? Коли ми переадресовуємо запит із введеннямвони повернуть значення, які користувач запровадив у форму раніше. Тому якщо я сказав, що моє ім'я - "Jason", але реєстрація не відбулася, "Jason" залишиться введеним навіть після переадресації мене назад на форму. Чудово!

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

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

    Повернемося до нашої форми. Як ви пам'ятаєте, у нас є змінна $errors - об'єкт PHP Messages . Давайте зробимо нашу форму дружелюбнішою, відображаючи помилки, коли вона була невірно заповнена:

    PHP Register!

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

    echo Form:: label ("username", "Username"). Form::text("username", Input::old ("username"));

    if ($errors -> has ("username" )) (
    echo $errors -> first ("username");
    }

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

    if ($errors -> has ("email" )) (
    echo $errors -> first ("email");
    }

    echo Form :: label ("password", "Password"). Form :: password ("password");

    if ($errors -> has ("password" )) (
    echo $errors -> first ("password");
    }

    echo Form:: submit ("Register!");

    echo Form::token(). Form:: close ();

    ?>

    Повідомлення будуть показані лише у випадку, коли певне поле містить помилки.

    Ви можете відформатувати повідомлення в потрібний HTML, передавши його в другому параметрі:

    PHP echo $errors -> first ("username", ":message");

    Або якщо ви хочете відобразити перше повідомлення про помилку для будь-якого поля, а не тільки для username : )); ?>

    PHP $errors -> all () повертає масив відформатованих повідомлень, тому ми поєднуємо його в рядок.

    Власні правила та помилки

    Часто вам потрібно буде створювати власні правила для перевірки введення. До Laravel 3 це робилося успадкуванням класу Validator та додаванням до нього методів. За допомогою пакетів знадобилося більш надійне рішення, щоб не створювати безліч підкласів. Laravel 3дозволяє реєструвати довільні правила за допомогою PHP Validator :: register () :

    PHP // цей код може бути розміщений, наприклад, в application/start.php:
    Validator :: register ("starts_with" , function ($attribute , $value , $parameters ) (
    return starts_with ($value, $parameters [0]);
    });

    У цьому простому обробнику ми просто повертаємо true , якщо значення починається на вказаний рядок (переданий у першому та єдиному параметрі), і false в іншому випадку. Тут використовується одна з небагатьох глобальних функцій Laravel - PHP starts_with() .

    Використання нового правила:

    PHP $rules = array(
    "website" => array("required" , "starts_with:http://" )
    );

    Тут нам потрібно було визначити поле як обов'язкове(«Required»). Крім цього, нам також потрібно додати повідомлення про помилку у файл application/language/en/validation.php :

    PHP "custom" => array(
    "website_starts_with" => "Website must start with http://"
    )

    Або можна це зробити при створенні екземпляра Validator, передавши його в третій параметр:

    Отже, ми з вами створили форму, яка надсилає POST-Запит на наш маршрут, де відбувається перевірка введення контролером - який, у свою чергу, при виявленні помилок відправляє клієнта назад зі збереженням попереднього введення та виведенням відповідних повідомлень.



    Читайте також: