Лабораторная работа №21
Создание формы регистрации и авторизации пользователей. Использование сессий
Часть 1 Регистрация
Продолжаем работу с файлами, созданными в лабораторной работе 20
Измените файл register.php – добавьте поле загрузки файла и поле подтверждения пароля. Для формы установите атрибут enctype (определяет способ кодирования данных формы при их отправке на сервер) со значением multipart/form-data (данные не кодируются, это значение применяется при отправке файлов).
Добавьте поле для загрузки изображения в таблицу users, созданную в лабораторной работе 20
Файл vendor/signup.php
Добавьте переменную подтверждения пароля. Код добавления пользователя в базу данных пока лучше закомментировать.
Проверим совпадение паролей.
Вывод сообщений с помощью сессии
Для вывода ошибок создайте специальный блок для сообщений
Чтобы передать сообщение внутрь блока можно воспользоваться сессиями.
Сессии являются простым способом хранения информации для отдельных пользователей с уникальным идентификатором сессии.
В самом начале php-кода в файлах register.php и signup.php необходимо запустить сессию, используя функцию session_start()
После этого можно работать с суперглобальной переменной $_SESSION (это ассоциативный массив, содержащий переменные сессии).
Обратимся в условии к суперглобальной переменной $_SESSION с ключом message и запишем в нее сообщение. После этого перенаправим результат на страницу регистрации
Переменная $_SESSION с ключом message будет доступна везде, поэтому ее можно вывести в файле register.php
Проверьте как работает сессия при неправильных паролях. При перезагрузке сообщение должно пропадать, для этого необходимо уничтожить сессию с помощью команды unset.
Чтобы блок появлялся только при наличии ошибки ввода паролей можно использовать следующий код:
Загрузка картинки
Изображение из формы передается в переменную $_FILES – суперглобальный массив, содержащий всю информацию о загруженных файлах.
Посмотрим, как выглядит данный массив.
Запишите под условным оператором код для вывода данного массива:
На странице регистрации загрузите фотографию и нажмите на кнопку Зарегистрироваться, после этого отобразится содержимое массива $_FILES. Получили массив с ключом [avatar], который также имеет ключи: [name] – имя файла, [type] – тип файла, [tmp_name] –путь на сервере:
Далее строки для вывода массива $_FILES удалите.
Подготовим путь, в который будут загружаться картинки. Создайте папку uploads, в нее будем загружать картинки по имени (ключ [name]).
Если второй раз загружать фото с таким же именем, то возникнут ошибки. Чтобы имя было уникально присоединим к нему функцию time(), которая возвращает временную метку в виде цифр.
Далее используем функцию для загрузки move_upload_file, первый аргумент – путь до файла на сервере, второй аргумент – путь, куда грузим файл.
Загрузите произвольный файл, нажмите кнопку Зарегистрироваться и проверьте папку uploads. Если все сделали правильно, то в папке uploads должен оказаться загруженный файл.
Добавьте запрос на отправку всех полей в базу данных.
Добавьте функцию mb5 для шифрования пароля
Самостоятельно выведите сообщение об успешной регистрации на странице авторизации с помощью сессии
Часть 2 Авторизация
Стандартные операции работы в файлу index.php не описываются.
В папке vendor создайте файл signin.php, который будет обрабатывать форму авторизации.
В файле signin.php делаем запрос проверки пользователя. Ищем всех пользователей в базе данных, у которых логин и пароль совпадают с введенными на странице авторизации.
Для подсчета найденных записей используется функция mysqli_num_rows. Проверьте работу данной функции при вводе зарегистрированного и незарегистрированного пользователя. Обратите внимание, что пароль нужно расшифровать с помощью функции md5
Таким образом, для проверки существования записи необходимо использовать условный оператор:
Если ошибок нет, то значит авторизация проходит успешно. Далее необходимо получить данные о пользователе и вывести их на страницу профиля.
Преобразуйте полученный объект в массив и посмотрите вид данного массива:
Занесем в массив сессии SESSION данные о пользователе
Создайте страницу профиля profile.php. Сделайте перенаправление на страницу при успешной авторизации.
В profile.php создайте код для вывода данных об авторизованном пользователе. Для вывода используйте механизм сессий.
Создайте страницу для обработки выхода logout.php, на ней удаляется сессия пользователя.
Если набрать в адресной строке просто sign/profile.php, то откроется страница личного кабинета даже без авторизации. С другой стороны, в профиле также доступны страницы авторизации и регистрации через адресную строку.
Чтобы это устранить, добавьте следующие переадресации на всех страницах.
Дополнительное задание:
Измените код для регистрации, чтобы нельзя было зарегистрироваться с одинаковыми логинами.