Сторінка організації реєстрації на сайті

квітень 2015

registration

Питання розділу

  1. Вступ, навіщо необхідна реєстрація?
  2. Як створити форму для реєстрації учасника? Вимоги до форми реєстрації?
  3. Як виконати перевірку коректності вводу даних в форму реєстрації?
  4. Як виконати перевірку на унікальність логіну учасників?
  5. Як виконується шифрування паролю?


1. Вступ, навіщо необхідна реєстрація?

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

В даній статті розглянемо один з варіантів реалізації кодування для створення сторінки реєстрації.

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

- Які основні елементи застосовуються для створення веб-сторінки реєстрації?

  1. HTML-форма.
  2. PHP-обробник форми.
  3. Перевірка коректності введених даних (логін, пароль, пошта).
  4. Перевірка наявних логінів.
  5. Шифрування паролю.
  6. PHP-кодування для обміну інформацією з Базою Даних.

- Яким чином краще продемонструвати роботу форми реєстрації?

Давайте, переглянемо список зареєстрованих користувачів з таблиці "Users" Бази Даних, та введемо Логін та Пароль любого з користувачів, наприклад, логін -"QWER", пароль - "AAAA".

Демо зразок форми входу зареєстрованих учасників:

Приклад таблиці "Users" зареєстрованих користувачів веб-ресурсу:

ЛогінПароль
qwer123
SomeNickpass
QWERAAAA
Ekashpass123

Важливо!!! Поле "Пароль" таблиці користувачів зазвичай зашифровано, на зразок: b33aed8f3134996703dc39f9a7c95783.

Пароль даної таблиці відкритий лише задля зручності навчального матеріалу.

Один із варіантів збереження даних Логін та Пароль користувачів може бути ось така таблиця:

idlogin_namepasswordsaltemail
5QWERe721d9c93fd8e6ac118f4d6aa1400769b51cbaqwe@mail.com
6My_name2867c1b008e9a13d64cdf496e8660e2930cf7d6my_post@mail.com
7Vasyaaecfe3840da286e42a53b26ddccb2155d75eafexample@com.com
8AAAA8ffb601b4ded43eb2a1f48690c022027c373b04my_email@gmail

в даній таблиці:
id - id користувача веб-ресурсу,
login_name - Логін користувача веб-ресурсу,
password - Закодований Пароль користувача,
salt - Сіль, один із дієвих методів додаткового кодування паролю, детальніше "Авторизація",
email - пошта користувача веб-ресурсу.



2. Як створити форму для реєстрації учасника? Вимоги до форми реєстрації?

Зазвичай, елементарними вимогами до реєстрації учасника є потреба в реєстрації Логіну, Паролю, Ел. пошти.

Зразок форми реєстрації:

Рис.2. Форма реєстрації на основній сторінці.


HTML- код форми реєстрації матиме вигляд:

		
<form method="post" action="php-обробник форми">
<input name="login" required placeholder="login_name">
<input name="email" required placeholder="example@mail.com">
<input type="password" name="password" placeholder="password">
<input type="password" name="r_password" placeholder="repeat password">
<input type="submit" name="submit" value="Відправити">
</form>


3. Перевірка коректності вводу даних в форму

Перед відправленням даних на сервер, потрібно перевірити, чи всі поля форми містять інформацію і чи вся інформація заповнена правильно.

  1. Перевірку, чи не є поля форми пустими, можна зробити, додавши до тега поля атрибут - required
  2. Подальшу перевірку на коректність вводу даних можна зробити скриптом на PHP. Ось деякі основні види перевірок:
    • Перевірити, чи кількість символів в полі логіну не перевищує 10, або є не менше ніж 3;
    • Перевірити, чи кількість символів в полі паролю не перевищує 10, не є менше ніж 3;
    • Перевірити, чи співпадають паролі;
    • Перевірити, чи міститься символ собачки в полі електронної пошти;
  3. Перевірити унікальність Логіну.

Цю всю перевірку можна представити у вигляді блок-схеми:

flowchart

Блок схема перевірки Логіну та Паролю користувача.


Перевірка коректності введення логіну, паролю та пошти

Зазвичай Логін, так само як і Пароль, варто перевірити на кількість символів, доречно було б щоб кількість була більше 3 символів та менше, скажімо 10 символів. Та все це на розсуд адміністратора ресурсу й за необхідності умова легко змінюється.

Варто сказати декілька слів про перевірку на правильність вводу email адреси. Справа в тому, що багато веб розробників стараються чим побільше впихнути методів провірки адреси і використовують величезні коди регулярних виразів чим створюють страшний, заплутаний код, який дуже важко зрозуміти людині. Та й код такий - не ідеальний, так як переважно провірку email на регулярних виразах можна обійти додавши в адрес лапки.

- Який вихід з цієї ситуації? Дуже простий. Електронний лист не буде надіслано самим сервером, якщо адреса буде невірною, а значить достатьо не робити жодних перевірок, ну, або в крайному випадку - перевірити на присутність символу '@'

Реалізувати таку перевірку можна кодом, поданим нижче:


// PHP-кодування Блоку перевірки коректності введення даних
if ((strlen($login_name)>10) || (strlen($login_name)<3)){
   if ((strlen($password)>10) || (strlen($password)<3)){
     if ($password!=$r_password){
        if ((strpos($email,'@')===false)||($pos<2)){
          // вивести повідомлення про помилку введення даних       
        }     
     }   
   }
}

Перевірка на унікальність логінів

Далі нам потрібно перевірити, чи немає в таблиці Бази Даних такого самого login_name, щоб не зареєструвати двох однакових користувачів.

Перевірити на наявність користувача можна, наприклад, таким чином: отримати id запису з login_name. Якщо запит поверне id - відповідно такий логін вже зареєстрований. Якщо ж буде повернуто 0 рядків - логін вільний.

Реалізація коду перевірки:


/* SQL-запит до Бази Даних */	
$sql = "SELECT id FROM `users` WHERE login_name='$login_name'";	
$result = $conn->query($sql);

if ($result->num_rows > 0) {
	return "Користувач вже зареєстрований!";
} else 
	return "Успіх! Продовжуємо реєстрацію!";

Внесення даних до таблиці "Users" Бази Даних

За умови, що всі поля форми реєстрації коректно заповненні, отримані дані заносяться до таблиці "Users" Бази Даних.

Частина php-обробника відправлення даних може мати вигляд:

$conn = new mysqli("host","user","password","database");
	
$hash=md5($password);

if ($registration===true) {

$conn->query("INSERT INTO Users (`login_name`,`password`,`hash`,`email`) 
	      VALUES ('$login_name','$password','$hash','$email')");	 
};


5. Шифрування паролю

Деякі дані, як правило - пароль, бажано шифрувати, звісно зрозуміло чому.

Розглянемо один з варіантів шифрування паролю, наприклад, застосовуючи функцію md5(). Зараз вже цей метод шифрування не рекомендований, але для наглядності і для того, аби показати, як шифруються дані md5 чудово підходить.

Демонстрація роботи шифрування, введіть довільний набір символів, та перевірте його шифроване значення:


Реалізація шифрування досить проста:

$password = md5($password);

І у випадку що дані паролю таблиць все ж дістались стороннім, вони будуть мати закодований символами пароль. Хоча є таблиці, що досить легко дозволять провести зворотню операцію перетворення захешованого md5 паролю в зрозумілий набір символів паролю. Тому задля додатково захисту в хеш паролю адміністратор ресурсу може добавити "сіль", додатковий рядок символів, що значно збільшують складність розгадати пароль.

Варіант застосування солі:

$password = 'password';        // Пароль
$hash1 = md5($password);       // Хеш Пароля
$salt = 'sflprt49fhi2';        // Гереруємо рядок довільних символів
$hash2 = md5($hash1 . $salt);  // Хеш Паролю та солі функцією md5()


The End

April 2015 / редакція лютий 2016

Продовження теми за навчальною статтею "Авторизація"