Criando uma Aplicação Orientada pelo Banco de Dados com o PHP

Lição 3: Criando um Novo Usuário de Aplicação

O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0

Nesta lição, você expande a aplicação com a funcionalidade Criar um Novo Wisher.

A implementação afetará o arquivo index.php e os dois novos arquivos criados se chamarão createNewWisher.php e editWishList.php.

O caso de uso Criar um Novo Wisher consiste em três etapas:

1. O usuário abre a página inicial index.php e clica no link para registrar.

2. O usuário alterna para a página createNewWisher.php para criar um novo wisher.

3. Após criar um novo wisher, o usuário alterna para editWishList.php, onde ele criará uma lista de desejos para o usuário.

Diagrama de fluxo de página destacando novos arquivos criado na Lição 3

O documento atual é uma parte do tutorial Criando uma Aplicação de Banco de Dados no NetBeans IDE para PHP.


Código-fonte da Aplicação da Lição Anterior

Usuários MySQL: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior estiver concluída.

Usuários do Banco de Dados Oracle: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior estiver concluída.

Adicionando um Link para Começar a Criar um Novo Wisher

Abra o index.php. Adicione uma linha em branco abaixo da tag de fechamento </form>. Na linha em branco, insira o seguinte bloco de código:
 <br>Still don't have a wish list?! <a href="createNewWisher.php">Create now</a>

No qual:

  • Ainda não tem uma lista de desejos?! é o texto exibido na página ao lado do link.
  • <a href="createNewWisher.php"></a> é o código que implementa um link que abre a página createNewWisher.php.
  • Criar agora é o texto que será exibido como um link.

Criando Novas Páginas Web de PHP

Crie duas novas páginas web de PHP nos Arquivos de Código-fonte do projeto, como descrito na Lição 2.

  • createnewwisher.php
  • editWishList.php

Em editWishList.php, adicione o texto “Olá!" ao corpo do HTML, ou então, deixe-o com seu conteúdo default. Você modificará esse arquivo em lições posteriores, mas você precisa dele agora porque o createNewWisher.php faz referência a ele. Para o restante desta lição, você modificará o createNewWisher.php.

Adicionando um Form HTML para Inserir os Dados de um Novo Wisher

Digite ou cole o seguinte bloco HTML no createNewWisher.php, abaixo do bloco 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>

Observação: O tipo senha é um tipo especial de um campo de texto onde os caracteres são substituídos por asteriscos. O código apresenta um form HTML para um usuário inserir o nome e a senha do novo wisher nos campos de texto. Quando o usuário clica no botão "Registrar", os dados inseridos são transferidos para validação na mesma página, createNewWisher.php.

Observação: você pode ignorar as advertências do validador HTML.

Validando Dados e Adicionando-os ao Banco de Dados

Nesta seção, você adiciona o código PHP ao createNewWisher.php. Adicione este código ao bloco PHP na parte superior do arquivo. O bloco PHP deve estar acima de todo o código HTML, linhas vazias ou espaço em branco. A posição do bloco do código PHP é importante para permitir o correto funcionamento da instrução de redirecionamento. No bloco PHP, digite ou cole os blocos de código descritos abaixo desta seção, na ordem em que eles são escritos.

Adicione o código a seguir para validar os dados:

  1. Inicialize as variáveis. As primeiras variáveis passam as credenciais do banco de dados e as outras serão usadas nas operações 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. Abaixo das variáveis, adicione uma cláusula se . O parâmetro da cláusula se verifica se a página foi solicitada a partir dela mesma usando o método POST. Caso contrário, as validações posteriores não são realizadas e a página é mostrada com campos vazios, como descrito acima.
    /** Check that the page was requested from itself via the POST method. */
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    }
  3. Dentro das chaves da cláusula se , adicione outra cláusula se que verifica se o usuário preencheu o nome do wisher. Se o campo de texto "user" estiver vazio, o valor de $userIsEmpty será alterado para verdadeiro.
    /** 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. Adicione o código que estabelece uma conexão de banco de dados. Se não for possível estabelecer a conexão, o erro de MySQL ou Oracle OCI8 é enviado para a saída.

    Para o banco de dados 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');
    }

    Para o banco de dados 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. Adicione o código que verifica se um usuário cujo nome corresponde ao campo "user" já existe. O código faz isso, tentando localizar o número do wisher ID para um nome correspondente ao nome no campo "user". Se houver tal número de ID, o valor de $userNameIsUnique é alterado para "false".

    Para o banco de dados 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;
    }
    }

    Para o banco de dados 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. Com do código que verifica se o usuário sendo único, adicione uma série de cláusulasse para verificar se o usuário inseriu e confirmou a senha corretamente. O código verifica se os campos Senha ("password") e Confirmar senha ('password2) não estão vazios no form e não são idênticos. Caso contrário, os valores das variáveis boolianas correspondentes são alterados de acordo.
    if ($_POST["password"]=="") {
    $passwordIsEmpty = true; }
    if ($_POST["password2"]=="") {
    $password2IsEmpty = true; }
    if ($_POST["password"]!=$_POST["password2"]) {
    $passwordIsValid = false; }
  7. Complete a cláusula se ($_SERVER['REQUEST_METHOD'] == "POST") adicionando o código que insere uma nova entrada no banco de dados "wishers". O código verifica se o nome do wisher é especificado exclusivamente e se a senha é indicada e confirmada validamente. Se as condições forem atendidas, o código pegará os valores "user" e "password" do form HTML e os inserirá nas colunas Nome e Senha, respectivamente, de uma nova linha no banco de dados wishers. Depois de criar a linha, o código fecha a conexão do banco de dados e redireciona a aplicação para a página editWishList.php.

    Para o banco de dados 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;
        }
    }

    Para o banco de dados 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;
        }
    }

Exibindo Mensagens de Erro no Form de Entrada

Agora você deve implementar a exibição das mensagens de erro quando os dados inseridos forem inválidos. A implementação é baseada nas validações e alterações nos valores das variáveis boolianas descritas em Validando Dados e Adicionando-os ao Banco de Dados.

  1. Insira o seguinte bloco de código PHP dentro do form de entrada HTML, abaixo da entrada do nome do wisher:
    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. Insira o seguinte bloco de código PHP dentro do form de entrada HTML abaixo do código da entrada de senha:
    Password: <input type="password" name="password"/><br/>
    
    <?php if ($passwordIsEmpty) { echo ("Enter the password, please!"); echo ("<br/>"); } ?>
  3. Insira os seguintes blocos de código PHP dentro do form de entrada HTML abaixo do código de confirmação de senha:
    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/>"); } ?>

Testando a Funcionalidade da Criação do Novo Wisher

  1. Execute a aplicação. A página de índice abre.
    Página da aplicação principal index.php com duas opções: visualizando a lista de desejos de uma pessoa e criando uma lista de desejos
  2. Na página de índice, clique no link ao lado do texto Ainda não possui uma lista de desejos? O seguinte form abre:
    Um form vazio para registro como um wisher
  3. Deixe estes campos em branco e clique em Registrar. Uma mensagem de erro é exibida
    Form de registro do wisher com uma mensagem de erro: o nome não foi preenchido
  4. Insira o nome de um wisher registrado, por exemplo, Tom no campo Seu nome, preencha os outros campos corretamente e clique em Registrar. Uma mensagem de erro é exibida.
  5. Preencha os campos Senha e Confirme sua senha com valores diferentes e clique em Registrar. Uma mensagem de erro é exibida.
  6. Insira Bob no campo Seu nome, especifique a mesma senha em ambos os campos de senha e clique em Registrar. A página exibida está vazia, mas o redirecionamento foi passado corretamente já que o URL termina com editWishList.php:
    A página editwishlist.php com uma saudação de boas-vindas
  7. Para verificar se os dados estão armazenados no banco de dados, vá para wishers na janela Serviços abaixo do nó wislist1 e no menu de contexto, selecione Visualizar Dados
    Visualizando os dados no banco de dados usando a interface NetBeans IDE: o novo wisher Bob foi adicionado

O código-fonte da Aplicação após a Lição Atual está Concluído

Usuários do MySQL: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição estiver concluída.

Usuários de banco de dados Oracle: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição estiver concluída.

Próximas Etapas

<< Lição anterior

Próxima lição >>

Voltar à página principal do Tutorial



Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, junte-se à lista de correspondência .

Voltar à Trilha de Aprendizado 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