Загрузка...

Создаем первое PHP приложение: Часть №3

Тема в разделе Backend создана пользователем Hangman666 13 июн 2016. 334 просмотра

Загрузка...
  1. Hangman666
    Hangman666 Автор темы 13 июн 2016 Хранитель Идей 342 10 мар 2016
    [IMG]

    Что же дальше?

    Теперь мы готовы к созданию видимой части скрипта. Держите в уме - все, что мы делаем сейчас вместе можно доделать, доработать и получить очень классную систему регистрации. Можно это сделать самому (если есть знания), или же за небольшую плату найти себе программиста на разного рода фрилансерских сайтах.

    В этой серии уроков мы создаем необходимый минимум и знакомим Вас с ОПП.

    Регистрация пользователей (register.php)

    В этой странице у нас две части. Блок кода PHP в верхней части, и HTML - в нижней.

    PHP код загружает global.inc.php. Он также содержит информацию о проверке формы. Код HTML помогает нам создать простую форму. Более детальные объяснения в коде:

    Код
    <?php
    //register.php

    require_once 'includes/global.inc.php';

    //инициализируем php переменные, которые используются в форме
    $username = "";
    $password = "";
    $password_confirm = "";
    $email = "";
    $error = "";

    //проверить отправлена ли форма
    if(isset($_POST['submit-form'])) {

    //получить переменные $_POST
    $username = $_POST['username'];
    $password = $_POST['password'];
    $password_confirm = $_POST['password-confirm'];
    $email = $_POST['email'];

    //инициализировать переменные для проверки формы
    $success = true;
    $userTools = new UserTools();

    //проверить правильность заполнения формы
    //проверить не занят ли этот логин
    if($userTools->checkUsernameExists($username))
    {
    $error .= "That username is already taken.<br/> \n\r";
    $success = false;
    }

    //проверить совпадение паролей
    if($password != $password_confirm) {
    $error .= "Passwords do not match.<br/> \n\r";
    $success = false;
    }

    if($success)
    {
    //подготовить информацию для сохранения объекта нового пользователя
    $data['username'] = $username;
    $data['password'] = md5($password); //зашифровать пароль для хранения
    $data['email'] = $email;

    //создать новый объект пользователя
    $newUser = new User($data);

    //сохранить нового пользователя в БД
    $newUser->save(true);

    //войти
    $userTools->login($username, $password);

    //редирект на страницу приветствия
    header("Location: welcome.php");
    }
    }

    //Если форма не отправлена или не прошла проверку, тогда показать форму снова

    ?>
    <html>
    <head>
    <title>Registration</title>
    </head>
    <body>
    <?php echo ($error != "") ? $error : ""; ?>
    <form action="register.php" method="post">

    Username: <input type="text" value="<?php echo $username; ?>" name="username" /><br/>
    Password: <input type="password" value="<?php echo $password; ?>" name="password" /><br/>
    Password (confirm): <input type="password" value="<?php echo $password_confirm; ?>" name="password-confirm" /><br/>
    E-Mail: <input type="text" value="<?php echo $email; ?>" name="email" /><br/>
    <input type="submit" value="Register" name="submit-form" />
    </form>
    </body>
    </html>

    Что этот код делает?

    Часть с HTML кодом должна быть предельно проста. Когда форма отправляется пользователем загружается register.php и все значения отправляются в переменную $_POST.

    Значение каждого поля ввода превращается в переменную ($username, $password...). Если форма еще не отправлена, все переменные будут содержать пустую строку. Если форма отправлена, но не прошла проверку, эти переменные будут содержать значения из прошлого отправления, чтобы пользователю не пришлось заново вводить данные.

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

    Переменная $_POST в ассоциативном массиве переменных передается текущему скрипту с помощью метода HTTP POST. Значение каждого поля доступно в $_POST используя названия поля в качестве ключа. Прежде всего мы проверяем была ли нажата кнопка "Отправить". Мы проверяем $_POST['submit-form'] с помощью функции isset(), поскольку “submit-form” было название кнопки формы.

    Как только мы знаем, что кнопка нажата, можем начинать проверку формы. Мы будем использовать класс UserTools для проверки доступности имени пользователя. Если такое имя уже существует, мы тогда ставим $success на false и выводим эту ошибку в $error. Следующий шаг - это проверить совпадают ли пароли, с помощью простого сравнения.

    Если форма прошла проверку, мы размещаем информацию в массив $data и используем его для создания нового объекта User. Мы вызовем функцию save() того объекта User с параметрами $isNewUser - true. Далее мы войдем в систему с помощью функции login() и сделаем редирект на welcome.php.

    Вот пример страницы welcome.php

    Код
    <?php
    //welcome.php
    require_once 'includes/global.inc.php';

    //проверить вошел ли пользователь
    if(!isset($_SESSION['logged_in'])) {
    header("Location: login.php");
    }
    //взять объект user из сессии
    $user = unserialize($_SESSION['user']);

    ?>

    <html>
    <head>
    <title>Welcome <?php echo $user->username; ?></title>
    </head>
    <body>
    Hey there, <?php echo $user->username; ?>. You've been registered and logged in.
    Welcome! <a href="logout.php">Log Out</a> | <a href="index.php">Return to
    Homepage</a>
    </body>
    </html>

    Страницы входа и выхода

    login.php

    Также как и в register.php, login.php будет иметь проверку формы вверху и форму для входа снизу. В форме всего два поля. Все очень легко и просто.

    Код
    <?php
    //login.php
    require_once 'includes/global.inc.php';
    $error = "";
    $username = "";
    $password = "";

    //проверить отправлена ли форма логина
    if(isset($_POST['submit-login'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];

    $userTools = new UserTools();
    if($userTools->login($username, $password)){
    //удачный вход, редирект на страницу
    header("Location: index.php");
    }else{
    $error = "Incorrect username or password. Please try again.";
    }
    }
    ?>
    <html>
    <head>
    <title>Login</title>
    </head>
    <body>
    <?php
    if($error != "")
    {
    echo $error."<br/>";
    }
    ?>
    <form action="login.php" method="post">
    Username: <input type="text" name="username" value="<?php echo $username; ?>"
    /><br/>
    Password: <input type="password" name="password" value="<?php echo $password;
    ?>" /><br/>
    <input type="submit" value="Login" name="submit-login" />
    </form>
    </body>
    </html>

    logout.php

    Страница выхода еще проще. Эта страница не нуждается в HTML. Функция этой страницы выйти из приложения с помощью функции logout(). После выхода пользователь редиректится на главную.


    Код
    <?php
    //logout.php
    require_once 'includes/global.inc.php';
    $userTools = new UserTools();
    $userTools->logout();
    header("Location: index.php");

    ?>

    Страница настроек пользователя

    Зарегистрированный пользователь, который вошел в систему может захотеть изменить некоторые данные. Для простоты примера, мы разрешим пользователям менять только электронный адрес. Вы же можете попробовать расширить этот функционал.

    Все очень схоже со страницами входа и выхода. На этой странице при отправке формы мы берем текущего пользователя в качестве объекта User и выставляем ему новый емейл. Далее просто вызываем функцию save() и все у нас выходит.

    Код
    <?php

    require_once 'includes/global.inc.php';


    //Проверить вошел ли пользователь
    if(!isset($_SESSION['logged_in'])) {
    header("Location: login.php");
    }


    //взять объект user из сессии
    $user = unserialize($_SESSION['user']);


    //инициализировать php переменные, используемые в форме
    $email = $user->email;
    $message = "";


    //проверить отправлена ли форма
    if(isset($_POST['submit-settings'])) {
    //достать переменные $_POST
    $email = $_POST['email'];


    $user->email = $email;
    $user->save();


    $message = "Settings Saved<br/>";
    }
    //Если форма не отправлена или не прошла проверку - показать форму снова

    ?>
    <html>
    <head>
    <title>Change Settings</title>
    </head>
    <body>
    <?php echo $message; ?>
    <form action="settings.php" method="post">
    E-Mail: <input type="text" value="<?php echo $email; ?>" name="email" /><br/>
    <input type="submit" value="Update" name="submit-settings" />
    </form>
    </body>
    </html>

    Последний файл - index.php

    С этим файлом можно делать все что угодно. Тут можете разместить любые ссылки информацию. В качестве примера предлагаю Вам простую страничку с ссылками на страницы Входа, Регистрации. Также если пользователь уже вошел, ему будут видны кнопки выхода и смены параметров.

    Код
    <?php
    //index.php
    require_once 'includes/global.inc.php';
    ?>
    <html>
    <head>
    <title>Homepage</title>
    </head>
    <body>

    <?php if(isset($_SESSION['logged_in'])) : ?>
    <?php $user = unserialize($_SESSION['user']); ?>
    Hello, <?php echo $user->username; ?>. You are logged in. <a href="logout.php">Logout</a>
    | <a href="settings.php">Change Email</a>
    <?php else : ?>
    You are not logged in. <a href="login.php">Log In</a> | <a href="register.php">Register</a>
    <?php endif; ?>
    </body>
    </html>

    Заключение.
    Я надеюсь, этот цикл уроков Вам понравился.
     
  2. RaysMorgan
    Зачем инициализировать пустые переменные? Это же пхп
     
Top