corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Создание приложения на основе базы данных с помощью PHP.

Урок 3: Создание нового пользователя приложения

Содержимое данной страницы относится к среде IDE NetBeans 6.9-7.0

В этом уроке рассматривается расширение приложения добавленнием функции "Create a New Wisher".

Реализация затрагивает файл index.php, и при этом будут созданы два новых файла с именами createNewWisher.php и editWishList.php.

Данный пример использования Create a New Wisher ("Создание нового пользователя") состоит из трех действий:

1. Пользователь открывает файл index.php титульной страницы и щелкает ссылку для регистрации.

2. Пользователь переходит на страницу createNewWisher.php для создания нового автора пожелания.

3. После создания нового автора пожелания пользователь переключается на editWishList.php, где для него можно создать список желаний.

Диаграмма последовательности действий страницы, новые файлы, созданные в ходе урока 3, выделены

Текущий документ является частью учебного курса "Создание приложения на основе базы данных в среде IDE NetBeans для PHP".


Исходный код приложения из предыдущего урока

Для пользователей MySQL: щелкните здесь для загрузки исходного кода, отражающего состояние проекта по завершении предыдущего урока.

Для пользователей Oracle Database: щелкните здесь для загрузки исходного кода, отражающего состояние проекта по завершении предыдущего урока.

Добавление ссылки для начала создания нового автора пожелания

Откройте 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:

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    </head>
    <body>
Welcome! <br>
<form action="createNewWisher.php" method="POST">
Your name: <input type="text" name="user"/><br/>
Password: <input type="password" name="password"/><br/>
Please confirm your password: <input type="password" name="password2"/><br/>
<input type="submit" value="Register"/>
</form>
</body> </html>

Примечание.Тип password представляет собой специальный тип текстового поля, в котором символы заменяются звездочками. Код представляет собой форму HTML, позволяющую ввести имя и пароль нового автора пожелания в текстовые поля. При нажатии кнопки "Register" введенные данные передаются для проверки допустимости на ту же страницу – createNewWisher.php.

Примечание. Предупреждения средства проверки HTML можно игнорировать.

Проверка допустимости данных и добавление их в базу данных

В этом разделе мы добавим код PHP к createNewWisher.php. Добавьте этот код к блоку PHP на верху файла. Блок PHP должен находиться над кодом HTML all, пустыми строками или пробелами. Расположение блока кода PHP является важным для правильного функционирования оператора переадресации. Внутри блока PHP введите или вставьте в указанном порядке блоки кода, описанные ниже в данном разделе.

Добавьте следующий код для проверки допустимости данных:

  1. Необходимо инициализировать переменные. Первая группа переменных осуществляет передачу параметров доступа к базе данных, а другая группа переменных используется в работе кода PHP.
    /** database connection credentials */
    $dbHost="localhost";
    $dbUsername="phpuser";
    $dbPasswd="phpuserpw"; /** other variables */ $userNameIsUnique = true; $passwordIsValid = true; $userIsEmpty = false; $passwordIsEmpty = false; $password2IsEmpty = false;
  2. Под переменными следует добавить блок if . Параметр блока if выполняет проверку того, что страница была запрошена из нее самой посредством метода POST. Если это не так, дальнейшие проверки допустимости не выполняются, и на экран выводится страница с пустыми полями, как описано выше.
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    }
  3. Внутри фигурных скобок блока if добавьте другой блок if , позволяющий проверить, ввел ли пользователь имя автора пожелания в поле. Если текстовое поле "user" является пустым, значение $userIsEmpty меняется на "true".
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
        
        if ($_POST["user"]=="")
        $userIsEmpty = true;
    }
  4. Добавьте код, устанавливающий подключение к базе данных. Если установить подключение невозможно, то выводится ошибка 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']);
    
        }
    }
  5. Добавьте код, позволяющий проверить, существует ли пользователь, имя которого соответствует указанному в поле "user". Эта задача выполняется путем поиска идентификационного номера автора пожелания в соответствии с именем, указанным в поле "user". Если такой номер существует, значение $userNameIsUnique меняется на "false".

    Для базы данных MySQL

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    Displaying error messages 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;
        }
    }
  6. После кода, проверяющего уникальность пользователя, добавьте серию блоков if , проверяющих, правильно ли пользователь ввел и подтвердил пароль. Код выполняет проверку того, что поля "Password" ("password") и "Confirm Password" ("password2") заполнены и идентичны друг другу. В противном случае значения соответствующих логических переменных также изменяются.
    if ($_POST["password"]=="")
    $passwordIsEmpty = true;
    if ($_POST["password2"]=="")
    $password2IsEmpty = true;
    if ($_POST["password"]!=$_POST["password2"]) {
    $passwordIsValid = false;}
  7. Завершите блок 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;
        }
        //Check for the existence and validity of the password
        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;
        }
    }

Отображение сообщений об ошибках в форме ввода

Перейдем к реализации вывода сообщений об ошибках при неверно введенных данных. Реализация основывается на проверках допустимости и изменении значений логических переменных, описанных в разделе Проверка допустимости данных и добавление их в базу данных.

  1. Введите следующий блок кода 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 ("Это лицо уже существует. Проверьте правильность написания и повторите попытку"); echo ("<br/>"); } ?>
  2. Введите следующий блок кода PHP в форме ввода HTML под кодом для ввода пароля:
    Password: <input type="password" name="password"/><br/>
    
    <?php if ($passwordIsEmpty) { echo ("Enter the password, please!"); echo ("<br/>"); } ?>
  3. Введите следующий блок кода 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"

  1. Запустите приложение. Откроется страница-указатель.
    Главная страница приложения index.php, на которой содержится два параметра: просмотр списка "Wish list" пользователя и создание списка "Wish list"
  2. На странице-указателе щелкните ссылку рядом с текстом "Still don't have a wish list?" Откроется следующая форма:
    Пустая форма для регистрации автора пожелания
  3. Оставьте поля пустыми и нажмите кнопку Register ("Зарегистрировать"). На экране появится сообщение об ошибке.
    Форма для регистрации, содержащая сообщение об ошибке: "the name is not filled in"
  4. Введите имя зарегистрированного пользователя, например, "Tom" в поле "Your name", внимательно заполните другие поля и нажмите кнопку "Register". На экране появится сообщение об ошибке.
  5. Заполните поля "Password" и "Please confirm your password" различными значениями и нажмите кнопку "Register". На экране появится сообщение об ошибке.
  6. Введите "Bob" в поле "Your name", укажите в полях пароля один и тот же пароль и нажмите кнопку "Register". Откроется пустая страница, однако переадресация осуществляется правильно, поскольку URL-адрес заканчивается текстом "editWishList.php":
    Страница editWishList.php с приветствием
  7. Проверьте, что данные сохранены в базе данных, путем перехода к разделу "Wishers" в окне "Services", расположенном под узлом "wislist1", и выбора "View Data" в контекстном меню
    Просмотр данных в базе данных с использованием интерфейса IDE NetBeans: добавление нового пользователя "Bob".

Исходный код приложения на момент завершения текущего урока

Для пользователей MySQL: щелкните сюда для загрузки исходного кода, отражающего состояние проекта по завершении данного урока.

Для пользователей Oracle Database: щелкните сюда для загрузки исходного кода, отражающего состояние проекта по завершении данного урока.

Что дальше?

<<Предыдущий урок

Следующий урок >>

Назад на главную страницу учебного курса



Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для PHP с помощью среды IDE NetBeans можно в списке рассылки .

Возврат к учебной карте по PHP