3. После создания нового автора пожеланий выполняется переход на страницу editWishList.php, на которой создается список пожеланий.
Текущий документ является частью учебного курса "Создание приложения типа CRUD в среде IDE NetBeans для PHP".
Исходный код приложения из предыдущего урока
Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения предыдущего урока.
Добавление ссылки для начала создания нового пользователя
Откройте файл index.php. Добавьте пустую строку под закрывающим тегом </form>. Введите следующий блок кода в эту строку:
<br>Still don't have a wish list?! <a href="createNewWisher.php">Create now</a>
Где
Still don't have a wish list?! – это текст, который отобразится на странице рядом со ссылкой.
<a href="createNewWisher.php"></a> – это код ссылки, открывающей страницу createNewWisher.php.
Create now – это текст, который отобразится в качестве ссылки.
Создание новых файлов PHP
Создайте два новых файла PHP в исходных файлах проекта, как описано в уроке 2.
createNewWisher.php
editWishList.php
Откройте файл editWishList.php и добавьте текст "Hello!" в тело кода HTML или оставьте содержимое по умолчанию. Этот файл будете изменен в последующих уроках, однако на данный момент он необходим в качестве объекта ссылки для createNewWisher.php. В оставшейся части этого урока рассматривается изменение файла createNewWisher.php.
Добавление формы HTML для ввода данных нового пользователя
Введите или вставьте следующий блок HTML в строку createNewWisher.php под блоком PHP:
Примечание:Тип password представляет собой специальный тип текстового поля, в котором символы заменяются звездочками. Код представляет собой форму HTML, позволяющую ввести имя и пароль нового пользователя в текстовые поля. При нажатии кнопки "Register" введенные данные передаются для проверки допустимости на ту же страницу – createNewWisher.php.
Примечание. Предупреждения средства проверки HTML можно игнорировать.
Проверка допустимости данных и добавление их в базу данных
В этом разделе код PHP добавляется в файл createNewWisher.php. Добавьте этот код в блок PHP в верхней части файла. Блок PHP должен находиться над кодом HTML all, пустыми строками или пробелами. Расположение блока кода PHP является важным для правильного функционирования оператора переадресации. Внутри блока PHP введите или вставьте в указанном порядке блоки кода, описанные ниже в данном разделе.
Добавьте следующий код для проверки допустимости данных:
Необходимо инициализировать переменные. Первая группа переменных осуществляет передачу параметров доступа к базе данных, а другая группа переменных используется в работе кода PHP.
Под переменными следует добавить блок if . Параметр блока if выполняет проверку того, что страница была запрошена из нее самой посредством метода POST. Если это не так, дальнейшие проверки допустимости не выполняются, и на экран выводится страница с пустыми полями, как описано выше.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
}
Внутри фигурных скобок блока if добавьте другой блок if , позволяющий проверить, было ли введено имя пользователя в поле. Если текстовое поле "user" является пустым, значение $userIsEmpty меняется на "true".
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_POST["user"]=="")
$userIsEmpty = true;
}
Добавьте код, устанавливающий подключение к базе данных. Если подключение не может быть установлено, выводится соответствующее сообщение об ошибке MySQL или Oracle OCI8.
Для базы данных MySQL:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($_POST["user"]=="") {
$userIsEmpty = true;
}
$con = mysqli_connect("localhost", "phpuser", "phpuserpw"); if (! $con) { exit('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } //установка набора символов для клиента по умолчанию mysqli_set_charset($con, 'utf-8');
}
Для базы данных Oracle:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['user'] == "")
$userIsEmpty = true;
$con = oci_connect("phpuser", "phpuserpw", "localhost/XE");
if (!$con) {
$m = oci_error();
exit('Connect Error' . $m['message']);
}
}
Добавьте код, позволяющий проверить, существует ли пользователь, имя которого соответствует указанному в поле "user". Это выполняется путем поиска идентификационного номера пользователя в соответствии с именем, указанным в поле "user". Если такой номер существует, значение $userNameIsUnique меняется на "false".
Для базы данных MySQL:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
Отображение сообщений об ошибке
if ($_POST["user"]=="") {
$userIsEmpty = true;
}
$con = mysqli_connect("localhost", "phpuser", "phpuserpw"); if (! $con) { exit('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } //установка набора символов для клиента по умолчанию mysqli_set_charset($con, 'utf-8'); mysqli_select_db($con, "wishlist");
$user = mysqli_real_escape_string($con, $_POST["user"]); $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='".$user."'"); $wisherIDnum=mysqli_num_rows($wisher); if ($wisherIDnum) { $userNameIsUnique = false; }
}
Для базы данных Oracle:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['user'] == "")
$userIsEmpty = true;
$con = oci_connect("phpuser", "phpuserpw", "localhost");
if (!$con) {
$m = oci_error();
exit('Connection Error ' . $m['message']);
}
$query = "SELECT id FROM wishers WHERE name = :user_bv";
$stid = oci_parse($con, $query);
$user = $_POST['user'];
$wisherID = null;
oci_bind_by_name($stid, ':user_bv', $user);
oci_execute($stid);
// Имена пользователей должны быть уникальными. Убедитесь в том, что указанный пользователь уже существует.
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row){
$userNameIsUnique = false;
}
}
После проверки уникальности пользователя следует добавить последовательность условий if, которые проверяют корректность ввода и подтверждения пароля. Код выполняет проверку того, что поля "Password" ("password") и "Confirm Password" ("password2") заполнены и идентичны друг другу. В противном случае значения соответствующих логических переменных также изменяются.
if ($_POST["password"]=="") $passwordIsEmpty = true; if ($_POST["password2"]=="") $password2IsEmpty = true; if ($_POST["password"]!=$_POST["password2"]) { $passwordIsValid = false;}
Завершите блок if ($_SERVER['REQUEST_METHOD'] == "POST") добавлением кода, посредством которого в базу данных wishers будет введена новая запись. В соответствии с кодом выполняется проверка того, что имя пользователя указано однозначно и что пароль введен и подтвержден правильно. Если эти условия выполнены, код извлекает значения "user" и "password" из формы HTML и вставляет их соответственно в столбцы "Name" и "Password", относящиеся к новой строке в базе данных "Wishers". После создания строки код закрывает подключение к базе данных и переадресует приложение на страницу editWishList.php.
Для базы данных MySQL:
/** Проверка факта запроса страницы из нее самой посредством метода POST. */
if ($_SERVER['REQUEST_METHOD'] == "POST") {
/** Проверка указания имени автора пожеланий в текстовом поле user */
if ($_POST['user'] == "") {
$userIsEmpty = true;
}
/** Создание подключения к базе данных */
$con = mysqli_connect("localhost", "phpuser", "phpuserpw");
if (!$con) {
exit('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
//set the default client character set
mysqli_set_charset($con, 'utf-8');
/** Проверка наличия пользователя с именем, указанным в поле user */
mysqli_select_db($con, "wishlist");
$user = mysqli_real_escape_string($con, $_POST['user']);
$wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='".$user."'");
$wisherIDnum=mysqli_num_rows($wisher);
if ($wisherIDnum) {
$userNameIsUnique = false;
}
/** Проверка корректности ввода и подтверждения пароля */
if ($_POST['password'] == "")
$passwordIsEmpty = true;
if ($_POST['password2'] == "")
$password2IsEmpty = true;
if ($_POST['password'] != $_POST['password2']) {
$passwordIsValid = false;
}
/** Проверка логических значений, которые свидетельствуют о корректности введенных данных.
* Если данные успешно проверены, добавьте запись в базу данных wishers.
* После добавления записи закройте подключение и перенаправьте приложение на страницу editWishList.php.
*/
if (!$userIsEmpty && $userNameIsUnique && ! $passwordIsEmpty && ! $password2IsEmpty && $passwordIsValid) {
$password = mysqli_real_escape_string($con, $_POST['password']);
mysqli_select_db($con, "wishlist");
mysqli_query($con, "INSERT wishers (name, password) VALUES ('" . $user . "', '" . $password . "')");
mysqli_free_result($wisher);
mysqli_close($con);
header('Location: editWishList.php');
exit;
}
}
Для базы данных Oracle:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if ($_POST['user'] == "")
$userIsEmpty = true;
$con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8");
if (!$con) {
$m = oci_error();
echo $m['message'], "\n";
exit;
}
$query = "select ID from wishers where name = :user_bv";
$stid = oci_parse($con, $query);
$user = $_POST['user'];
$wisherID = null;
oci_bind_by_name($stid, ':user_bv', $user);
oci_execute($stid);
//Имена пользователей должны быть уникальными. Убедитесь в том, что указанный пользователь уже существует.
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row) {
$wisherID = $row['ID'];
}
if ($wisherID != null) {
$userNameIsUnique = false;
}
//Проверка наличия и действительности пароля
if ($_POST['password'] == "")
$passwordIsEmpty = true;
if ($_POST['password2'] == "")
$password2IsEmpty = true;
if ($_POST['password'] != $_POST['password2']) {
$passwordIsValid = false;
}
/** Проверка логических значений, указывающих на успешность проверки введенных данных.
* Если данные успешно проверены, добавьте запись в базу данных wishers.
* После добавления записи закройте подключение и перенаправьте приложение на страницу editWishList.php.
*/
if (!$userIsEmpty && $userNameIsUnique && ! $passwordIsEmpty && ! $password2IsEmpty && $passwordIsValid) {
$query = "INSERT INTO wishers (name, password) VALUES (:user_bv, :pwd_bv)";
$stid = oci_parse($con, $query);
$pwd = $_POST['password'];
oci_bind_by_name($stid, ':user_bv', $user);
oci_bind_by_name($stid, ':pwd_bv', $pwd);
oci_execute($stid);
oci_free_statement($stid);
oci_close($con);
header('Location: editWishList.php');
exit;
}
}
Отображение сообщений об ошибках в форме ввода
Перейдем к реализации вывода сообщений об ошибках при неверно введенных данных. Реализация основывается на проверках допустимости и изменении значений логических переменных, описанных в разделе Проверка допустимости данных и добавление их в базу данных.
Введите следующий блок кода PHP в форме ввода HTML непосредственно под именем пользователя:
Welcome! <br> <form action="createNewWisher.php" method="POST"> Your name: <input type="text" name="user"/><br/>
<?php
if ($userIsEmpty) {
echo ("Enter your name, please!");
echo ("<br/>");
}
if (! $userNameIsUnique) {
echo ("The person already exists. Please check the spelling and try again");
echo ("<br/>");
}
?>
Введите следующий блок кода PHP в форме ввода HTML под кодом для ввода пароля:
Password: <input type="password" name="password"/><br/>
<?php
if ($passwordIsEmpty) {
echo ("Enter the password, please!");
echo ("<br/>");
}
?>
Введите следующий блок кода PHP в форме ввода HTML под кодом для подтверждения пароля:
Please confirm your password: <input type="password" name="password2"/><br/>
<?php
if ($password2IsEmpty) {
echo ("Confirm your password, please");
echo ("<br/>");
}
if (! $password2IsEmpty && ! $passwordIsValid) {
echo ("The passwords do not match!");
echo ("<br/>");
}
?>
Тестирование функциональных возможностей по созданию нового пользователя "Create New Wisher"
На странице-указателе щелкните ссылку рядом с текстом "Still don't have a wish list?" Откроется следующая форма:
Не заполняйте поля и нажмите кнопку Register. На экране появится сообщение об ошибке.
Введите имя зарегистрированного пользователя, например, "Tom" в поле "Your name", внимательно заполните другие поля и нажмите кнопку "Register". На экране появится сообщение об ошибке.
Заполните поля "Password" и "Please confirm your password" различными значениями и нажмите кнопку "Register". На экране появится сообщение об ошибке.
Введите "Bob" в поле "Your name", укажите в полях пароля один и тот же пароль и нажмите кнопку "Register". Откроется пустая страница, однако переадресация осуществляется правильно, поскольку URL-адрес заканчивается текстом "editWishList.php":
Проверьте, что данные сохранены в базе данных путем перехода к разделу "Wishers" в окне "Services", расположенном под узлом "wislist1", и выбора "View Data" в контекстном меню
Исходный код приложения на момент завершения текущего урока
Для пользователей MySQL: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Для пользователей базы данных Oracle: щелкните эту ссылку для загрузки исходного кода, описывающего состояние проекта на момент завершения урока.
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для PHP с помощью среды IDE NetBeans можно в списке рассылки .