Текущий документ является частью учебного курса "Создание приложения типа CRUD в среде IDE NetBeans для PHP".
Исходный код приложения из предыдущего урока
Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Сохранение идентификатора пользователя в сеансе после создания пользователя
Сеанс представляет собой средство постоянного хранения данных, создающее возможность для передачи информации с одной страницы на другую без использования формы ввода HTML. Эти функциональные возможности поддерживаются за счет предварительно определенного массива $_SESSION языка PHP.
В целях безопасности новый пользователь после создания должен быть автоматически зарегистрирован без заполнения формы. Поэтому необходимо изменить файл createNewWisher.php для реализации следующих функциональных возможностей:
Добавление нового пользователя к базе данных.
Открытие сеанса.
Сохранение имени пользователя в сеансе
Передача имени пользователя в сеансе при переадресации пользователя на страницу editWishList.php.
В файл createNewWisher.php включите следующую строку:
Блок кода начинает сеанс, что означает открытие массива $_SESSION для ввода или извлечения данных. Затем код добавляет элемент к массиву $_SESSION. Добавляемый элемент содержит значение и идентификатор. Значение – это имя недавно созданных пользователей, а "user" является идентификатором. Затем программа переадресует пользователя на страницу editWishList.php.
Проверка допустимости входа для пользователя
При переходе пользователя на страницу editWishList.php приложение должно выдавать подтверждение того, что страница используется лицом, только что зарегистрированным на странице createNewWisher.php.
Реализация этих функциональных возможностей состоит из двух действий:
Блок кода открывает массив $_SESSION для извлечения данных и проверки того, что в $_SESSION содержится элемент с идентификатором "user". Если проверка выполнена успешно, код выводит на экран приветственное сообщение.
Для проверки правильности реализации сеанса выполните следующие действия:
Запустите файл createNewWisher.php и создайте нового пользователя, например, с именем "Jack".
Откроется файл editWishList.php с приветственным сообщением "Hello Jack".
Можно либо очистить файл cookie сеанса в используемом обозревателе, либо завершить сеанс и запустить файл editWishList.php в среде IDE.
Откроется файл editWishList.php, содержащий текст "Hello", поскольку в рамках сеанса не были переданы какие-либо данные пользователя. Это нежелательный вариант, т.к. в данном случае незарегистрированный или не выполнивший вход в систему пользователь может создавать или редактировать список "Wish list". Во избежание этого следует выполнить переадресацию пользователя на страницу index.php.
Переадресация пользователя, не зарегистрированного в системе
Разместите следующий блок кода в файле editWishList.php под выражением if:
else {
header('Location: index.php');
exit;
}
В соответствии с кодом осуществляется переадресация пользователя на страницу index.php и прерывается выполнение кода PHP.
Для проверки того, что функциональные возможности реализованы правильно, запустите файл editWishList.php. Ожидаемым результатом является открытие страницы index.php.
Регистрация на странице index.php
Вход с использованием страницы index.php состоит из двух действий:
Примечание. Предупреждения средства проверки HTML можно игнорировать.
Код представляет собой форму HTML которая позволяет вводить имя и пароль пользователя в текстовые поля. Если пользователь нажимает кнопку "Edit My Wish List", данные передаются на ту же страницу – index.php.
Проверка допустимости входа
Проверка допустимости входа включает следующие действия:
Сохранение имени пользователя в сеансе и переадресация пользователя на страницу editWishList.php или Отображение сообщения об ошибке.
Пользователь может выполнить доступ на страницу index.php при запуске приложения, с помощью страницы editWishList.php или при переадресации со страницы index.php после ввода имени и пароля.
Поскольку только в последнем случае используется метод запроса HTML POST, существует возможность узнать местонахождение пользователя, если он выполняет доступ к странице index.php.
В файле index.php над блоком HTML создайте блок <? php? > со следующим кодом:
Верхняя часть блока кода обеспечивает использование файла db.php и инициализирует переменную $logonSuccess со значением false. При успешном завершении проверки это значение будет изменено на true.
В коде проверки учетных данных пользователя вначале выполняется проверка на использование метод запроса POST. При использовании метода запроса POST предполагается, что пользователь был перенаправлен после отправки формы входа в систему. В этом случае блок кода вызывает функцию verify_wisher_credentials с именем и паролем, введенным в форму входа в систему.
Функция verify_wisher_credentials, которая будет создана в следующем разделе, проверяет наличие записи в таблице wishers, где имя пользователя и пароль соответствуют значениям, отправленным из формы входа. Если функция verify_wisher_credentials возвращает значение true, то в базе данных регистрируется пользователь с указанным именем и паролем. Это значит, что проверка выполнена успешно, а $logonSuccess изменяет значение на true. В этом случае запускается сеанс, и открывается массив $_SESSION. Код добавляет новый элемент в массив $_SESSION. Этот элемент содержит значение и идентификатор (ключ). Значение является именем пользователя, а идентификатором является "user". Затем пользователь перенаправляется на страницу editWishList.php для редактирования списка пожеланий.
Если функция verify_wisher_credentials возвращает значение false, то значение $logonSuccess остается равным false. Значение переменной используется для отображения сообщения об ошибке.
Функция verify_wisher_credentials
Для проверки учетных данных пользователя необходимо добавить новую функцию к классу WishDB в файле db.php. Входными параметрами для этой функции являются имя и пароль; функция возвращает значение 0 или 1.
Для базы данных MySQL введите следующий код:
public function verify_wisher_credentials ($name, $password){ $name = $this->real_escape_string($name);
$password = $this->real_escape_string($password); $result = $this->query("SELECT 1 FROM wishers
WHERE name = '" . $name . "' AND password = '" . $password . "'");
return $result->data_seek(0);
}
Для базы данных Oracle введите указанный ниже код. Так как OCI8 не имеет эквивалента для mysql_num_rows, то этот код является измененной формой get_wisher_id_by_name.
public function verify_wisher_credentials($name, $password) {
$query = "SELECT 1 FROM wishers WHERE name = :name_bv AND password = :pwd_bv";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':name_bv', $name);
oci_bind_by_name($stid, ':pwd_bv', $password);
oci_execute($stid);
//Так как имя уникально, ожидается получение только одной строки
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row)
return true;
else
return false;
}
Блок кода выполняет запрос "SELECT 1 FROM wishers WHERE Name = '" . $name . "' AND Password = '" . $password . "'" и возвращает количество записей, отвечающих указанному запросу. Если запись найдена, функция возвращает true. Если такая запись в базе данных отсутствует, то функция возвращает false.
Отображение сообщений об ошибках
Для включения отображения сообщений об ошибках в приложении введите следующий блок кода <? php ? > в форму "logon" на странице index.php после полей ввода, но над кнопкой:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$logonSuccess)
echo "Invalid name and/or password";
}
?>
Блок кода проверяет значение переменной $logonSuccess, и если значение есть "false", на экран выводится сообщение об ошибке.
Тестирование входа с помощью страницы index.php
Для проверки корректности работы функции входа на первой странице index.php выполните следующие действия:
Запустите приложение.
На странице index.php введите "Tom" в поле "Username" и "Tim" в поле "Password".
Нажмите кнопку "Edit My Wish List". Отображается следующее сообщение об ошибке (окно браузера по ширине ограничено 600 пикс., поэтому добавляются дополнительные переводы строки):
Введите "Tom" в поле "Username" и "tomcat" в поле "Password".
Нажмите кнопку "Edit My Wish List". Отобразится страница editWishList.php:
Исходный код приложения на момент завершения текущего урока
Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для PHP с помощью среды IDE NetBeans можно в списке рассылки .