<Proger/> Про мене
ProProger

Цікаве > Авторизація і реєстрація на PHP

Автор: / Час публікації: 06/09/2017 23:19

Всім привіт! За проханням читача цього блогу(у чаті в Telegram. Ви також можете там пропонувати свої ідеї!), я напишу сьогодні статтю про реєстрацію і авторизацію на PHP. Ця тема є дуже популярна і практично необхідна на усіх динамічних сайтах! Реалізація не є дуже важкою. Але все-трішки подумати трішки потрібно.

Для початку потрібно продумати весь процес. Ось приблизно так це буде виглядати:

Схема входу і реєстрації | ProProger

Реєстрація

Отож, після того, як Ви отримали дані з форми на своєму сайті(Як їх надсилати в цій статті я розказувати не буду. Оскільки це не та тема, яку ми сьогодні розлядаємо!). Давайте створимо 3 змінні і запишимо в них ці дані(у моємо випадку це будуть змінні($login,$password,$repassword). Тепер потрібно створити таблицю(Наприклад, 'users') в базі даних даних з полями: login - VARCHAR(25), password - VARCHAR(32), id - INT AUTO_INCREMENT, access_token - VARCHAR(32). І підключаємось до бази даних за допомогою new mysqli() і записуємо це з'єднання в змінну $db.

Коли вище-сказане зроблено - можна приступати до оброблення даних. Отож, для початку потрібно перевірити чи не існує ще один зареєстрований користувач з таким же логіном. Для цього робимо запит у базу даних:

$result = $db->query( 'Select Count(*) from `users` where `login`="'.$login.'"');

Записуємо уже дані в змінну $row за допомогою методу fetch_row():

$row = $result->fetch_row( 'Select Count(*) from `users` where `login`='.$login);

А тепер перевіряємо чи є такий користувач:

if($row[0] == 0){
    /*Код після цієї перевірки*/
}

Якщо все-таки знайшовся користувач, то можна за допомогою else{} вивести якусь помилку. В тілі цієї перевірки ми додаємо ще одну перевірку - перевірку на співпадіння паролів:

if($password == $repassword){
    /*Код після цієї перевірки*/
}

Тепер потрібно згенерувати спеціальни access_token. Ось приклад:

$access_token = md5(time().$password.$login);

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

$db->query('INSERT INTO `users` (`login`,`password`,`access_token`) VALUES ("'.$login.'","'.md5($password).'","'.$access_token.'")')

Все користувач успішно зареєстрований! Ось весь код:

$login = $_POST['login'];
$password = $_POST['password'];
$repassword = $_POST['repassword'];
$db = new mysqli('host','user','password','database');
$result = $db->query( 'Select Count(*) from `users` where `login`="'.$login.'"');
$row = $result->fetch_row( 'Select Count(*) from `users` where `login`='.$login);
if($row[0] == 0){
    if($password == $repassword){
        $access_token = md5(time().$password.$login);
        $db->query('INSERT INTO `users` (`login`,`password`,`access_token`) VALUES ("'.$login.'","'.md5($password).'","'.$access_token.'")');
    }
}

Вхід

Коли користувач уже зареєстрований, то йому потрібно дати можливість для входу на сайт. Для початку потрібно перевірити чи існує користувач з такими даними, які він ввів. У змінних $login, $password будуть записані дані, які ввів користувач при вході. Тепер сам код перевірки:

$result = $db->query('Select * from `users` where `login`="'.$login.'" and `password`="'.md5($password).");
$rows = $result->num_rows;
if($rows === 1){
   /*Код після цієї перевірки*/
}

Тепер потрібно створити сесію, в якій потрібно записати access_token для подальшого використання:

$row = $result->fetch_array();
$_SESSION['login'] = $row['access_token'];
Не забудьте оголосити session_start() у початку файлу!

Ось весь код:

session_start();
$login = $_POST['login'];
$password = $_POST['password'];
$db = new mysqli('host','user','password','database');
$result = $db->query('Select * from `users` where `login`="'.$login.'" and `password`="'.md5($password).");
$rows = $result->num_rows;
if($rows === 1){
    $row = $result->fetch_array();
    $_SESSION['login'] = $row['access_token'];
}

Ось і все! У цій короткій статті ми розлянули як зробити примітивну реєстрацію і авторизацію на сайті. Ви можете до реєстрації додавати ще інші поля і відповідно перевіряти їх.

Посилання:

Клас mysqli - php.net/manual/en/class.mysqli.php
Сесії - php.net/manual/en/book.session.php
Чат в телеграмі - t.me
Не забувай написати коментар і поширити посилання в соц. мережах за допомогою кнопок нижче! Дякую за увагу!

Коментарі(1)

Ігор
26/09/2017 00:31
Просто і цікаво, дякую.