KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

[Часть 1] Написание своего сайта. Регистрация и Авторизация

Статьи / PHP



План статьи:

  1. Подготовка
  • Доступ к сайту (Хостинг)
  • Настройка RedBeanPHP (далее как rb.php)
  • Подготовка к написанию страниц
  1. Регистрация
  2. Авторизация
Подготовка

Первым делом нам нужно выбрать место нахождения нашего сайта. Я буду использовать локальный хостинг OpenServer, про работу с ним можно почитать на нашем сайте про "Динамическую шапку ВК". Вы можете на каком-то своем хостинге, из бесплатных порекомендую 000webhost.com
Когда настроили хостинг (FTP доступ, бд) нужно скачать RedBeanPHP (кликабельно) (rb.php)
После чего создадим папку с нашим сайтом, куда закинем наш rb.php и создадим файл db.php
В созданном файле вставляем заменяя на свои данные:
R::setup( 'mysql:host=localhost;dbname=mydatabase',
        'user', 'password' );
Данная команда взята с сайта RedBeanPHP в разделе Connection
Отлично, осталось создать файл index.php с двумя ссылками (в будущем кнопками) на регистрацию (/signup.php) и авторизацию (/signin.php):
<!DOCTYPE html>
<html>
  <head>
    <title>My_Site</title>
  </head>
  <body>
    <a href="/signup.php">Регистрация</a><br>
    <a href="/signin.php">Авторизация</a>
  </body>
</html>

Регистрация

Вот мы и подготовились к написанию самой регистрации. Для этого создадим файл db.php в котором мы подключим rb.php и для него подключим базу: (подключение взято от сюда) не забудьте заменить на свои данные!
<?php
  require '/rb.php';
  R::setup( 'mysql:host=localhost;dbname=mydatabase',
    'user', 'password' );
Приступим к написанию формы регистрации. Создадим файл signup.php внутри напишите вашу форму регистрации. Я буду запрашивать: Имя, почту (как логин), пароль, повторить пароль, немного о себе и фото (аватарка)
<!DOCTYPE html>
<html>
  <head>
    <title>My_Site - Регистрация</title>
  </head>
  <body>
    <form class="reg" action="/signup.php" method="post">
      <input type="email" name="email" value="" placeholder="Ваша почта">
      <input type="text" name="name" value="" placeholder="Ваше имя">
      <input type="password" name="password" placeholder="Пароль">
      <input type="password" name="re_password" placeholder="Повторите пароль">
      <input type="text" name="about" value="" placeholder="Расскажите немного о себе">
      <!--<input type="file" name="photo" accept="image/*">-->
      <button type="submit" name="registration">Зарегистрироваться</button>
    </form>
  </body>
</html>
Мы скрыли поле изображений, т. к. это будет в будущей статье!
Вот и готов наш сайт. Но он не красивы, но это мы исправим в будущем. Сейчас нас волнует запись пользователя в базу, для этого в начале страницы пишем: 
<?php
  require '/bd.php';
  $data = $_POST;
  if(isset($data['registration'])){
    echo "Отлично)";
  }
?>
Таким образом мы подключили базу, после чего из пришедших данных всё записали в $data и проверяем на название кнопки (у меня это registration в форме). После сохранения проверьте на сайте, при нажатие на кнопки 'зарегистрироваться' у вас появится текст 'Отлично)'
Если текст не появился, то проверьте свой код, обязательно проверьте название кнопки и то что написано в проверке php
Если проверка прошла, то стираем echo 'Отлично'; и вместо него пишем
if($data['email'] == '' || $data['name'] == '' || $data['password'] == '' || $data['re_password'] == ''){
      echo "Вы заполнили не все поля!";
    }else{
      echo "Отлично, будем тут регистрировать)";
    }
Таким не хитрым способом мы проверили на пустоту полей. Теперь давайте вернемся к форме и в атрибуте value сделаем ввод данных сайтом, если пользователь уже пробовал зарегистрироваться. Для этого просто нужно обратиться к нашему $data и вывести нужную строку для того или иного input’а. Пример:
<input type="email" name="email" value="<?php echo $data['email']; ?>" placeholder="Ваша почта">
Что в итоге получилось у меня:
 Показать / Скрыть текст
<input type="email" name="email" value="<?php echo $data['email']; ?>" placeholder="Ваша почта">
      <input type="text" name="name" value="<?php echo $data['name']; ?>" placeholder="Ваше имя">
      <input type="password" name="password" placeholder="Пароль">
      <input type="password" name="re_password" placeholder="Повторите пароль">
      <input type="text" name="about" value="<?php echo $data['about']; ?>" placeholder="Расскажите немного о себе">
      <!--<input type="file" name="photo" accept="image/*">-->
      <button type="submit" name="registration">Зарегистрироваться</button>

Остается дальше проверить на схожесть паролей и проверить, не занята ли наша почта уже кем-то?
Для этого вместо echo «Отлично, будем тут регистрировать)»; пишем:
if($data['password'] == $data['re_password']){
        $get_user = R::find('users', 'email = ?', [$data['email']]);
        if($get_user){
          echo "Введенная вами почта уже используется!";
        }else{
          $date = date('d.m.Y'); //Получаем дату
          $user = R::dispense('users');
          $user->email = $data['email'];
          $user->password = $data['password'];
          $user->name = $data['name'];
          $user->about = $data['about'];
          $user->photo = '/img/no_img.png';
          $user->date = $date;
          $user->status = 0;
          R::store($user);
          echo "Вы успешно зарегистрировались, <a href='/signin.php'>авторизация</a>";
        }
      }else{
        echo 'Пароли не совпадают!';
      }
Первым действием мы проверили, совпадают ли поля пароля и его повторения. Если они совпали, то мы при помощи R:find начали поиск пользователя с такой же почтой, если такой существует, то ответили что эта почта занята, обратно же мы получили текущую дату и начале регистрацию пользователя. Регистрация происходит по следующему принципу:
Создали переменную $user в которой выбираем нашу базу пользователей ('users'), после чего в эту переменную записали различные данные как email, password и т. д.
В итоге мы должны эти данные записать, что производиться по команде R:store (переменная, которую мы создали для базы);
После чего вывели текст об успехе.
Если мы снова попробуем зарегистрироваться на эту почту, то  Авторизация
Пользователь зарегистрировался, а зайти не может. Не правильно это, создадим файл signin.php в котором расположим форму с полем Логина (У меня это почта) и паролем:
<!DOCTYPE html>
<html>
  <head>
    <title>My_Site - Авторизация</title>
  </head>
  <body>
    <form class="log" action="/signin.php" method="post">
      <input type="email" name="email" value="<?php echo $data['email']; ?>" placeholder="Ваша почта">
      <input type="password" name="password" placeholder="Пароль">
      <button type="submit" name="auth">Войти</button>
    </form>
  </body>
</html>
Форма есть, давайте теперь обработаем её, в начале будет похоже с регистрацией, единственное уменьшается кол-во полей:
<?php
  require '/db.php';
  $data = $_POST;
  if(isset($data['auth'])){
    if($data['email'] == '' || $data['password'] == ''){
      echo "Вы заполнили не все поля!";
    }else{
      echo "Тут найдем пользователя";
    }
  }
Теперь снова при помощи R:findOne найдем пользователя по введенной почте:
У нас получиться такой код php части:

<?php 
require '/db.php'; 
$data = $_POST; 
if(isset($data['auth'])){ 
if($data['email'] == '' || $data['password'] == ''){ 
echo "Вы заполнили не все поля!"; 
}else{ 
$get_user = R::findOne('users', 'email = ?', [$data['email']]); 
if($get_user){ 
if($data['password'] == $get_user['password']){ 
echo 'Всё работает'; 
}else{ 
echo 'Проверьте правильность введенных данных!'; 
} 
}else{ 
echo 'Проверьте правильность введенных данных!'; 
} 
} 
} 
?>


Но теперь нам надо запустить сессию на странице, чтобы в дальнейшем работать с ней. Для этого в файле db.php в конце пропишем:
session_start();
ВНИМАНИЕ: Может появляться предупреждение после подключения файла db.php Лечение очень легкое: 1. Найти файл php.ini (у Open Server Panel — просто нажать значок на панели задач, правой кнопкой мыши кликнуть по значку, выбрать дополнительно -> Конфигурация -> php Версия). В этом конфиге нужно output_buffering = Off поставить на On. Получиться output_buffering = On

Если у вас используется файл header или footer на каждой странице, то можете написать в одном из них. Самое главное что мы на страницах должны запускать сессию. Проще конечно же не писать лишний раз запуск сессии, а просто подключить часто используемый скрипт на всех страницах, как у нас db.php

Теперь нужно просто записать данные пользователя в глобальную переменную $_SESSION
$_SESSION['user'] = $get_user;
Теперь давайте подключим db.php к нашей главной страницу index.php и выведем почту под кнопками регистрации и авторизации, в начале index.php пропишите:
<?php
  require '/db.php';
?>
Теперь после кнопок нужно при помощи php вывести данные из сессии:
<?php echo $_SESSION['user']->email; ?>
Для упрощения можно после 
require '/db.php';
Добавить
$user = $_SESSION['user'];
Теперь вывод будет выглядеть так:
<?php echo $user->email; ?>
Выход
Создаем новый файл logout.php в котором сразу подключаем db.php
<?php
  require '/db.php';
Для деавторизации мы используем unset, а после чего перекинем пользователя на главную страницу используя header:
  unset($_SESSION['user']);
  header('Location: /');
  unset($_SESSION['user']);Внутри мы указали название сессии в которую мы записывали данные пользователя при авторизации
  header('Location: /');После ':' указали страницу куда перенаправим пользователя. В нашем случае это главная страница сайта
Полный код logout.php
<?php
  require '/db.php';
  unset($_SESSION['user']);
  header('Location: /');
?>

В следующей части мы рассмотрим:
  • Создание новостей на главной странице
  • Создание верхнего меню (header)
  • Создадим небольшую 'админ панель'

Ниже вы можете скачать архив с итогом этой статьи  relaxed
site.zip
Новость отредактировал: アレクセイ サモシュキン - 22-09-2019, 08:03
Причина: Добавили пункт деавторизации (выхода)
  • アレクセイ サモシュキン
  • 21.07.2019
  • 104 971
  • 5
[VK BOT] Бот раздающий ключи Steam
[VK BOT] Бот раздающий ключи Steam
12-07-2019, 11:56, PHP
Работа с базой данных [phpMyAdmin] через RedBeanPHP
Работа с базой данных [phpMyAdmin] через RedBeanPHP
19-09-2019, 15:54, Статьи / PHP
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
Загружаем скрипты на бесплатный хостинг с PHP и MySQL. Подойдет для скриптов бота ВК
24-01-2019, 04:11, Статьи
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
  1. Влад Иванов

    Влад Иванов@Влад Иванов 3 августа 2019 14:14

    Отличная статья, а на этом сайте база данных есть?
    1. Гость Артем Фриз

      Гость Артем Фриз Гость 4 августа 2019 14:32

      Нет. На хостингах обычно бд дают
  2. Денис Більченко

    Денис Більченко@XAKER 16 октября 2020 18:22

    Жду продолжения )

  3. Гость Артур

    Гость Артур Гость 11 марта 2021 20:50

    Красавая статья! удачи тем кто это делает!!!!! Сделайте пожалуйста статью хотя бы мини реферальная программа на  RedBeanPHP !))) :) 
  4. Гость Александр

    Гость Александр Гость 31 августа 2022 02:34

    Спасибо! 

    Очень помогли с session_start, забыл что закомментировал в db.php  =))) 

    Сижу на страницах снова подключаю, капец

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль