Цвет

PHP Регистрация на сайте

139₽ 179₽

Категории:

phpregister

В этом гайде мы научимся оформлять регистрацию на сайте, с помощью PHP + сохраним хэш в сессии.

Для локального сервера мы будем использовать полюбившийся нам XAMPP. В качестве текстового редактора VSCode. Установите XAMPP и откройте его от имени администратора. Если открыть от имени обычного пользователя, то могут возникнуть ошибки. Запустите Apache и mySQL

В папке xampp >> htdocs создайте папку для вашего сайта. Пример mywebsite.ru

В этой папке мы будем располагать файлы нашего сайта

Создайте файл index.php и запишите туда этот код

<!DOCTYPE html>
   <head>
   </head>
   <body>
   </body>
</html>

Далее заходим в панель phpmyadmin по ссылке http://localhost/phpmyadmin и создаем новую базу данных с именем mywebsite. (Нужно нажать New)

В этой базе мы создадим таблицу, где будем хранить данные пользователей.

Далее нам важно создать таблицу с нашими пользователями. Назовём её users.

Важно понимать, какие данные мы будем тут хранить. 5 колонок:

id - первая колонка любой таблицы, нужно отметить A_I (auto increment). id будет увеличиваться автоматически

login - логин пользователя

hLogin - хэшированная версия нашего логина. Будет служить уникальным идентификатором для куки файла

hPassword - хэшированный пароль, всегда хранится в виде хэша.

email - имейл пользователя

Выставляем нужную длину для каждой колонки, как на картинке

INT - числовой тип данных

VARCHAR - текстовый формат

Нажимаем сохранить внизу страницы

Отлично, теперь переходим к нашему php коду.

В файле, который мы создали ранее

index.php

В начале документа до тега <!DOCTYPE html> создаем сессию

<?php session_start(); ?>

Нам нужно создать форму с method="post" action="index.php". POST - это метод отправки данных в PHP. action - это атрибут, указывающий на какую страницу вас перенаправит после отправки формы.

<body>
   <form action="index.php" method="post">
   </form>
</body>

Далее наша задача создать 5 элементов input в этой форме. 1 - для логина, 2 - для пароля, 3 - для повтора пароля, 4 - для почты, 5 - для кнопки отправки данных.

Если вы пользуетесь VSCode то можно прописать следующую команду и нажать Tab

input*5

Добавим тег p вокруг каждого input. Выглядеть это будет так

<form action="index.php" method="post" style="margin: 200px 0 0 42%;">
   <p><input name="login" type="text" placeholder="Login"></p>
   <p><input name="pswrd" type="password" placeholder="Password"></p>
   <p><input name="pswrd2" type="password" placeholder="Password again"></p>
   <p><input name="email" type="email" placeholder="Email"></p>
   <p><input name="btn" type="submit" value="Submit"></p>
</form>

С помощью атрибута name мы будем получать данные из input'ов

Теперь после закрытого тега form мы будем писать наш PHP код.

Обычно, PHP код выносится в отдельный файл и подключается с помощью одной из функций:

include 'file.php';
include_once 'file.php';
require 'file.php';
require_once file.php';

Рекомендую использовать include_once

В этот раз мы будем подключаться к базе данных в этом же файле и подключать ничего не нужно

<?php
   $connection = mysqli_connect("localhost", "root", "", "mywebsite");
?>

Далее нам нужно проверить нажата ли кнопка. В этом блоке мы будем писать весь наш код.

if(isset($_POST['btn'])) { }

Внутри мы сначала считываем данные всех полей и проверяем не пустые ли они.

if(isset($_POST['btn'])){
   $login = $_POST['login'];
   $pswrd = $_POST['pswrd'];
   $pswrd2 = $_POST['pswrd2'];
   $email = $_POST['email'];
   if($login=="" || $pswrd == "" || $pswrd2 == "" || $email == ""){
     echo '<div style="color: red; margin: 0 0 0 42%;">Одно из полей не заполнено.</div>';
   }else{

}

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

else{
   $errors = [];
   if(preg_match("/[^a-zA-Z0-9]/",$_POST['login'])){
     array_push($errors,'Неправильный формат логина.');
   }
   if(strlen($_POST['login'])<3 && strlen($_POST['login'])>25){
     array_push($errors,' Длина логина от 3 до 25 символов.');
   }
   if(strlen($_POST['pswrd'])< 5 ){
     array_push($errors,'Пароль должен быть длиннее 4 символов.');
   }
   if($_POST['pswrd']!=$_POST['pswrd2']){
     array_push($errors,'Пароли не совпадают.');
   }
   if(preg_match("/[^a-zA-Z0-9@.]/",$_POST['email'])){
     array_push($errors, 'Неправильный формат почты.');
   }
.....

Проверяем есть ли ошибки, и если ошибок нет, нужно проверить есть ли записи с таким логином или email'ом в таблице базы данных.

if(empty($errors)){
   $query="SELECT * FROM users WHERE login='$login' OR email='$email'";
   $result = mysqli_query($connection, $query);
   if(mysqli_num_rows($result)!=0){
     echo '<div style="color: red; margin: 0 0 0 42%;">Данные уже используются.</div>';
   }

Теперь приправляем солью ($salt) наш логин и пароль, а потом хэшируем обоих. После чего отправляем запрос в таблицу mySQL с помощью функции mysqli_query();

else{
     $salt = 'my_word123';
     $login = strtolower($login);
     $hLogin = $salt . $login;
     $hLogin = hash('sha256', $login);
     $pswrd = $salt . $pswrd;
     $pswrd = hash('sha384', $login);
     $query = "INSERT users SET login='$login',hLogin='$hLogin', hPassword='$pswrd', email='$email'";
     $result = mysqli_query($connection, $query);
     echo '<div style="color: green; margin: 0 0 0 42%;">Успешная регистрация.</div>';
     }
   }
}

Отлично, теперь, все должно быть готово. Финальная версия документа здесь . Не забудьте изменить атрибут action у формы в зависимости от названия файла.

Удачи