Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Отправка нового пожелания
Пользователь выполняет отправку нового пожелания путем выполнения следующих действий:
Пользователь входит в систему, переключается на страницу editWishList.php и нажимает кнопку "Add Wish". Откроется страница editWish.php, на которой отображается форма HTML.
В форме HTML пользователь вводит описание пожелания и, возможно, дату, до наступления которой пожелание должно быть выполнено, а затем нажимает кнопку "Save Changes".
Если форма отправляется без описания пожелания, то выполняется возврат к этой же форме для повторной попытки ввода. Если пользователь указал срок выполнения пожелания, но не ввел описание, то при перезагрузке формы эти данные вновь отображаются.
Для предоставления пользователю возможности использования этой процедуры необходимо добавить к приложению следующие функциональные возможности:
Компоненты интерфейса пользователя, состоящие из формы HTML для добавления пожелания и кнопки на странице editWishList.php , перенаправляющей пользователя в форму.
Для реализации функции добавления нового пожелания выполните следующее:
Создайте кнопку "Add Wish". В файле editWishList.php введите следующий код HTML под блоком PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form name="addNewWish" action="editWish.php">
<input type="submit" value="Add Wish"/>
</form>
</body>
</html>
Примечание. Предупреждения средства проверки HTML можно игнорировать.
Форма содержит поле ввода "Add Wish" типа submit. Это поле реализует кнопку "Add Wish". При нажатии кнопки "Add Wish" пользователь перенаправляется на страницу editWish.php. Метод запроса к серверу не используется, т.к. данные посредством этой формы не передаются.
Добавьте таблицу над формой addNewWish, в которой отображаются существующие пожелания пользователя. Этот код схож с кодом страницы wishlist.php.
Создайте файл editWish.php в папке "Source Files".
На странице editWish.php реализуйте форму "Add Wish". Введите или вставьте следующий код под блоком <? php ? >:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form name="editWish" action="editWish.php" method="POST"> Describe your wish: <input type="text" name="wish" value="" /><br/> When do you want to get it? <input type="text" name="dueDate" value=""/><br/> <input type="submit" name="saveWish" value="Save Changes"/> <input type="submit" name="back" value="Back to the List"/>
</form>
</body>
</html>
Форма "Add Wish" содержит следующие элементы:
Два пустых текстовых поля для ввода пожелания и срока выполнения.
Текст, который будет напечатан рядом с полями ввода.
Поле submit, представляющее кнопку "Save Changes"
Поле submit, представляющее кнопку "Back to the List" для возврата к странице editWishList.php
После нажатия кнопки "Add Wish" форма отправляет введенные данные на ту же страницу editWish.php с использованием метода "Request" "POST".
Повторное отображение срока выполнения после неудачной попытки отправки
Если пользователь не указал описание в форме "Add Wish", то появится сообщение об ошибке, и будет выполнен возврат к странице editWish.php. В случае возврата пользователя к странице editWish.php в форме "Add Wish" должно отображаться значение dueDate (если оно было до этого введено). В текущей реализации формы оба поля остаются пустыми. Для того чтобы введенные значения остались в полях, необходимо сохранить данные нового пожелания в массиве. Массив будет состоять из двух элементов с именами description и due_date. Затем следует изменить форму "Add Wish" таким образом, чтобы в нее из массива извлекалось значение поля dueDate.
Примечание. Код, инициирующий перезагрузку формы ввода при отсутствии описания, должен быть включен в код, в соответствии с которым выполняется проверка достоверности данных и их ввод в базу данных. Этот код не рассматривается в этом разделе. В соответствии с кодом в этом разделе значение dueDate будет отображаться в поле в случае перезагрузки формы.
Для обеспечения повторного вывода формы ввода после неудачной отправки формы пользователем необходимо выполнить следующее:
Введите или вставьте следующий блок кода в элемент HTML <body> на странице editWish.php непосредственно над формой ввода:
В соответствии с кодом определяется тот метод "Request Server", который использовался для передачи данных, а также создается массив с именем $wish. Если использовался метод "POST" (что означает, что входная форма отображается после неудачной попытки сохранить пожелание с пустым описанием), то элементы description и due_date принимают значения, переданные с использованием метода "POST".
Если использовался другой метод (что означает, что входная форма отображается впервые после переадресации со страницы editWishList.php), то элементы description и due_date являются пустыми.
Примечание. В любом случае описание отсутствует. Единственным отличием является dueDate.
Обновите форму "Add Wish" таким образом, чтобы значения ее полей ввода были извлечены из массива $wish. Замените строки форме "Add Wish":
Describe your wish: <input type="text" name="wish" value="" /><br/>
When do you want to get it? <input type="text" name="dueDate" value=""/><br/>
следующим блоком кода:
Describe your wish: <input type="text" name="wish" value="<?php echo $wish['description'];? >" /><br/>
When do you want to get it? <input type="text" name="dueDate" value="<?php echo $wish['due_date']; ? >"/><br/>
Проверка входа пользователя
В файле editWish.php введите следующий код обработки сеанса в блоке <? php ? > в начале файла:
session_start();
if (!array_key_exists("user", $_SESSION)) {
header('Location: index.php');
exit;
}
Код:
Для извлечения данных открывается массив "$_SESSION".
Выполняется проверка того, что массив "$_SESSION" содержит элемент с идентификатором "user".
При неудачном завершении проверки (что означает, что пользователь не зарегистрирован) выполняется перенаправление на первую страницу "index.php" и обработка кода PHP прерывается.
Для проверки правильности обработки сеанса запустите из среды IDE файл "editWish.php". Откроется страница index.php, т.к. на страницу editWish.page в рамках сеанса не были переданы данные пользователя.
Добавление нового пожелания в базу данных
После подтверждения пользователем нового пожелания приложение добавляет пожелание к базе данных "Wishes". Для включения этой функциональной возможности вставьте в приложение следующий код:
Добавьте еще две дополнительных функции к классу WishDB в db.php.
Первая функция добавляет новую запись в таблицу пожеланий.
Вторая функция преобразовывает даты в формат, поддерживаемый сервером баз данных MySQL.
Добавьте к editWish.php код, который будет использовать новые вспомогательные функции в WishDB для ввода нового пожелания в базу данных.
Добавление функции insert_wish к WishDB
Эта функция требует в качестве входных параметров идентификатор пользователя, описание нового пожелания и срок выполнения пожелания, после чего добавляет эти данные к базе данных как новую запись. Функция не возвращает какого-либо значения.
Откройте файл db.php и добавьте функцию insert_wish в класс WishDB:
Код инициирует вызов функции format_date_for_sql для преобразования введенного срока выполнения пожелания в формат, который может быть обработан сервером баз данных. Затем для ввода нового пожелания в базу данных выполняется запрос INSERT INTO wishes (wisher_id, description, due_date).
Добавление функции format_date_for_sql к WishDB
Добавьте функцию format_date_for_sql к классу WishDB в файле db.php. Для выполнения функции качестве входного параметра требуется строка, в которой указана дата. Функция возвращает дату в формате, который может быть обработан сервером базы данных, или null — при пустой входной строке.
Примечание. Функция в этом примере использует функцию PHP date_parse. Эта функция работает только с английскими датами (формат "December 25, 2010") и только с арабскими цифрами. На профессиональном веб-сайте будет использоваться средство выбора дат.
При пустой входной строке код возвращает значение "NULL". В противном случае внутренняя функция date_parse вызывается с входным параметром $date. Функция date_parse возвращает массив, состоящий из трех элементов с именами $dateParts["year"], $dateParts["month"] и $dateParts["day"]. Окончательная строка вывода создается из элементов массива $dateParts.
Внимание! Функция date_parse распознает только английские даты. Она поддерживает строки вида "February 2, 2016", а строка "2 Unora, 2016" не будет распознана.
Примечание для пользователей баз данных Oracle. Единственное требование, предъявляемое к формату даты в операторе return $dateParts..., состоит в соответствии формату даты функции SQL to_date в запросе insert_wish.
Ввод новой записи пожелания в базу данных
На этом этапе, после окончания разработки дополнительных функций, добавьте код для проверки допустимости данных нового пожелания и ввода данных в базу данных при их корректности. Если данные некорректны, то должна быть выполнена перезагрузка формы "Add Wish". Если данные некорректны, поскольку отсутствует описание пожелания, но при этом указан срок выполнения пожелания, введенные данные сохраняются в поле и отображаются в случае перезагрузке формы благодаря предварительно написанному коду.
Введите следующий код в верхнем блоке <? php ? > editWish.php под кодом обработки сеанса:
извлечение идентификатора пользователя, осуществляющего попытку добавления пожелания путем вызова функции get_wisher_id_by_name;
инициализация флага $wishDescriptionIsEmpty, который будет использован позже для отображения сообщений об ошибках;
проверка того, что используется метод запроса "POST" (соответствует передаче данных из формы для ввода данных пожелания непосредственно на странице editWish.php);
проверка того, содержит ли массив $_POST элемент с ключом "back".
Если массив $_POST содержит элемент с ключом "back", то перед передачей формы была нажата кнопка "Back to the List". В этом случае осуществляется перенаправление на страницу editWishList.php без сохранения данных, введенных в полях, и прекращается обработка блока PHP.
Если массив $_POST не содержит элемент с ключом "back", то данные были переданы путем нажатия кнопки "Save Changes". В этом случае в соответствии с кодом выполняется проверка наличия описания пожелания. Это реализуется путем проверки того, является ли элемент с ключом "wish" в массиве "$_POST" пустым. Если ключ пуст, значение флага $wishDescriptionIsEmpty изменяется на "true". Следует отметить, что если выполнение дальнейшего кода в блоке PHP прерывается, форма "Add Wish" перезагружается.
Если не была нажата кнопка "Back to the List", но при этом указано описание пожелания, то код вызывает функцию insert_wish с идентификатором пользователя, описанием и сроком выполнения пожелания в качестве входных параметров. Затем код перенаправляет пользователя на страницу editWishList.php и прекращает обработку PHP.
Отображение сообщений об ошибках
При попытке пользователя сохранить пожелание без описания должно отобразиться сообщение об ошибке.
Введите следующий блок <? php ? > в форме ввода HTML ниже поля ввода "Describe your wish":
<?php if ($wishDescriptionIsEmpty) echo "Please enter description<br/>"; ? >
Сообщение об ошибке отображается в случае значения "true" для флага $wishDescriptionIsEmpty. Флаг обрабатывается в течение проверки допустимости формы ввода.
Возврат к первой странице "index.php"
Пользователь должен иметь возможность возврата к первой странице приложения в любое время нажатием одной кнопки.
Для реализации этих функции введите следующую форму ввода HTML в файл editWishList.php перед закрывающим тегом </body>:
<form name="backToMainPage" action="index.php"> <input type="submit" value="Back To Main Page"/> </form>
Форма перенаправляет пользователя на первую страницу "index.php" после нажатия кнопки "Back to Main Page".
Тестирование функциональной возможности добавления пожелания
Запустите приложение. На странице index.php заполните следующие поля: в поле "Username" введите "Tom", в поле "Password" введите "tomcat".
Нажмите кнопку "Edit My Wish List". Откроется страница editWishList.php.
Нажмите кнопку "Back to Main Page". Откроется страница index.php.
Войдите в систему под именем "Tom" и снова нажмите кнопку "Edit My Wish List". Откроется страница editWishList.php.
Нажмите кнопку "Add Wish". Откроется страница editWish.php. Заполните форму.
Нажмите кнопку "Back to the List". Откроется страница editWishList.php, но новое пожелание в списке отсутствует.
Снова нажмите кнопку "Add Wish". Откроется страница editWish.php. Укажите срок выполнения пожелания, а поле описания оставьте пустым. Нажмите кнопку "Save Changes". На странице editWish.php отображается форма ввода с сообщением об ошибке и заполненным полем срока выполнения пожелания.
Снова нажмите кнопку "Add Wish". Откроется страница editWish.php. Заполните форму и нажмите кнопку "Save Changes". На странице editWishList.php отображается обновленный список пожеланий.
Исходный код приложения на момент завершения текущего урока
Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для PHP с помощью среды IDE NetBeans можно в списке рассылки .