Создание приложения на основе базы данных на языке PHP

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

Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.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">
        <title></title>
    </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"; //on MySql $dbXeHost="localhost/XE";
    $dbUsername="phpuser";
    $dbPassword="phpuserpw"; /** other variables */ $userNameIsUnique = true; $passwordIsValid = true; $userIsEmpty = false; $passwordIsEmpty = false; $password2IsEmpty = false;
  2. Под переменными следует добавить блок if . Параметр блока if выполняет проверку того, что страница была запрошена из нее самой посредством метода POST. Если это не так, дальнейшие проверки допустимости не выполняются, и на экран выводится страница с пустыми полями, как описано выше.
    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    }
  3. Внутри фигурных скобок блока if добавьте другой блок if , позволяющий проверить, ввел ли пользователь имя автора пожелания в поле. Если текстовое поле "user" является пустым, значение $userIsEmpty меняется на "true".
    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    /** Check whether the user has filled in the wisher's name in the text field "user" */    
        if ($_POST["user"]=="") {
        $userIsEmpty = true;
        }
    }
  4. Добавьте код, устанавливающий подключение к базе данных. Если установить подключение невозможно, то выводится ошибка MySQL или Oracle OCI8.

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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    /** Check whether the user has filled in the wisher's name in the text field "user" */    
        if ($_POST["user"]=="") {
            $userIsEmpty = true;
        }
    
        /** Create database connection */
    $con = mysqli_connect($dbHost, $dbUsername, $dbPassword);
    if (!$con) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '
    . mysqli_connect_error());
    }
    //set the default client character set
    mysqli_set_charset($con, 'utf-8');
    }

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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    /** Check whether the user has filled in the wisher's name in the text field "user" */
        if ($_POST['user'] == "") {
            $userIsEmpty = true;
        }
    
        /** Create database connection */
    $con = oci_connect($dbUsername, $dbPassword, $dbXeHost, "AL32UTF8"); if (!$con) { $m = oci_error(); exit('Connect Error' . $m['message']); } }
  5. Добавьте код, позволяющий проверить, существует ли пользователь, имя которого соответствует указанному в поле "user". Эта задача выполняется путем поиска идентификационного номера автора пожелания в соответствии с именем, указанным в поле "user". Если такой номер существует, значение $userNameIsUnique меняется на "false".

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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    /** Check whether the user has filled in the wisher's name in the text field "user" */
    
        if ($_POST["user"]=="") {
            $userIsEmpty = true;
        }
    /** Create database connection */
    $con = mysqli_connect($dbHost, $dbUsername, $dbPassword);
    if (!$con) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '
    . mysqli_connect_error());
    }
    /**set the default client character set */
    mysqli_set_charset($con, 'utf-8');
    /** Check whether a user whose name matches the "user" field already exists */
    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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER['REQUEST_METHOD'] == "POST") {
    /** Check whether the user has filled in the wisher's name in the text field "user" */
        if ($_POST['user'] == "") {
            $userIsEmpty = true;
        }
        /** Create database connection */
    $con = oci_connect($dbUsername, $dbPassword, $dbXeHost, "AL32UTF8"); if (!$con) { $m = oci_error(); exit('Connection Error ' . $m['message']); } /** Check whether a user whose name matches the "user" field already exists */ $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); // Each user name should be unique. Check if the submitted user already exists. $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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER['REQUEST_METHOD'] == "POST") {
        /** Check whether the user has filled in the wisher's name in the text field "user" */
        if ($_POST['user'] == "") {
            $userIsEmpty = true;
        }
    
        /** Create database connection */
        $con = mysqli_connect($dbHost, $dbUsername, $dbPassword);
        if (!$con) {
            exit('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
        //set the default client character set 
        mysqli_set_charset($con, 'utf-8');
    
        /** Check whether a user whose name matches the "user" field already exists */
        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;
        }
    
        /** Check whether a password was entered and confirmed correctly */
        if ($_POST['password'] == "") {
            $passwordIsEmpty = true;
        }
        if ($_POST['password2'] == "") {
            $password2IsEmpty = true;
        }
        if ($_POST['password'] != $_POST['password2']) {
            $passwordIsValid = false;
        }
    
        /** Check whether the boolean values show that the input data was validated successfully.
         * If the data was validated successfully, add it as a new entry in the "wishers" database.
         * After adding the new entry, close the connection and redirect the application to 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

    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER['REQUEST_METHOD'] == "POST") {
    
    /** Check whether the user has filled in the wisher's name in the text field "user" */
        if ($_POST['user'] == "")
            $userIsEmpty = true;
    
        /** Create database connection */
        $con = oci_connect($dbUsername, $dbPassword, $dbXeHost, "AL32UTF8");
        if (!$con) {
            $m = oci_error();
            echo $m['message'], "\n";
            exit;
        }
        
        /** Check whether a user whose name matches the "user" field already exists */
        $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);
    
    /**Each user name should be unique. Check if the submitted user already exists. */
        $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;
        }
        /** Check whether the boolean values show that the input data was validated successfully.
         * If the data was validated successfully, add it as a new entry in the "wishers" database.
         * After adding the new entry, close the connection and redirect the application to 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 ("The person already exists. Please check the spelling and try again"); 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 с двумя параметрами: 'Просмотр списка пожеланий определенного автора' и создание списка пожеланий
  2. На странице-указателе щелкните ссылку рядом с текстом "Still don't have a wish list?" Откроется следующая форма:
    Пустая форма для регистрации в качестве автора пожеланий.
  3. Оставьте поля пустыми и нажмите кнопку Register ("Зарегистрировать"). На экране появится сообщение об ошибке.
    Форма регистрации автора пожеланий с сообщением об ошибке: имя не заполнено
  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

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo