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

Lição 2: Projetando a Aplicação. Lendo o Banco de Dados

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

Nesta lição, você cria e configura o projeto PHP para desenvolver sua aplicação, cria uma lista de páginas na aplicação e define as relações entre eles. Também desenvolve a funcionalidade básica da aplicação e a testa contra os dados inseridos no banco de dados de amostra na lição 1.

O código PHP escrito nessa lição executa as seguintes funções:

1. Obtém o nome de uma pessoa que o usuário digita.

2. Verifica se a pessoa realmente está no banco de dados. Fecha com uma mensagem de erro caso a pessoa não esteja no banco de dados.

3. Exibe uma tabela dos desejos dessa pessoa.

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


Criando um Projeto PHP

Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e Windows, ⌘-Shift-N no MacOS). Crie um novo projeto PHP chamado “wishlist” (lista de desejos). Quando você cria um projeto PHP, ele contém o arquivo index index.php por default. Para obter informações sobre como criar e configurar um projeto PHP, consulte Configurando um Projeto PHP.

Definindo um Diagrama de Fluxo de Página

O escopo da sua aplicação cobre os seguintes casos de uso:
  1. O usuário visualiza a lista de desejos de uma pessoa.
  2. O usuário se registra como um novo wisher.
  3. O usuário se conecta e cria sua lista de desejos.
  4. O usuário se conecta e edita sua lista de desejos.
Para cobrir essa funcionalidade básica, você precisará implementar os seguintes arquivos PHP:
  1. A página "inicial" index.php é usada para fazer log-in, registrar e alternar para as listas de desejos de outros usuários.
  2. A página wishlist.php para exibir a lista de desejos de um wisher.
  3. A página createNewWisher.php para registro como um wisher.
  4. A página editWishList.php para editar uma lista de desejos pelo proprietário.
  5. A página editWish.php para criar e editar desejos.
O diagrama mostra as alternações planejadas entre as páginas em vários casos de uso

Agora que finalizou as etapas preliminares, você pode começar a implementar a funcionalidade básica da sua aplicação. Comece visualizando a lista de desejos de um wisher. Esta funcionalidade não envolve quaisquer validações e pode ser testada facilmente, já que você já indicou os dados de teste no banco de dados. A funcionalidade será implementada em duas páginas, index.php e wishlist.php.

Adicionando um Form a um index.php

O arquivo index.php não conterá códigos PHP, portanto, você poderá remover facilmente o seguinte bloco:

O arquivo index.php é usado para dois propósitos:

  • Exibir uma página com controles para indicar dados.
  • Transferir os dados inseridos a outro arquivo PHP, onde os dados serão processados. Neste tutorial, os dados são passados para um arquivo chamado wishlist.php, no qual, na próxima seção, você criará e escreverá os códigos.

Essas ações são realizadas por meio de um form HTML. Cada form HTML contém:

  • Um conjunto de campos que corresponde aos controles na página.
  • A “ação” que é executada depois que o usuário envia os dados do form. A ação é representada pelo caminho à página que processa os dados.

Para adicionar um form ao index.php:

  1. Alterne para a janela Projetos, expanda o nó do seu projeto e o nó de Arquivos de Código-fonte e clique duas vezes no arquivo index.php. O arquivo index.php se abre na área do editor principal do IDE. O arquivo contém um modelo para a inserção dos códigos HTML e PHP.

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

    .
  2. Remova o bloco PHP. O arquivo index.php não conterá códigos PHP.
    Um bloco PHP vazio que pode ser removido
  3. Abra a Paleta no menu Janela ou pressione Ctrl-Shift-8.
  4. Na seção Forms HTML da Paleta, arraste e solte um Form na seção <body> do index.php.
    Arrastando e soltando um elemento de form HTML na paleta no corpo de index.php
  5. A Caixa de Diálogo Inserir Form abre. No campo Ação, digite o caminho até o arquivo para o qual o form transferirá dados. Nesse caso, digite wishlist.php. (Você criará esse arquivo no mesmo local que o index.php. Consulte Criando wishlist.php e Testando a Aplicação.) Selecione o método GET para a transferência de dados. Dê um nome arbitrário ao form, como wishList. Clique em OK quando acabar.
    Caixa de Diálogo Inserir Form, preenchido

    O arquivo agora tem a seguinte aparência:

    index.php com um form adicionado, nenhum conteúdo no form
  6. Entre os identificadores de abertura e fechamento do form, digite o texto “Show wish list of: ”.
  7. Arraste um componente de Entrada de Texto da seção Forms HTML da Paleta até o espaço após o texto “Show wish list of: ”. A caixa de diálogo Inserir Texto abre.
  8. Nomeie a entrada como user. Selecione o tipo de entrada text. Deixe todos os outros campos vazios e clique em OK.
    Inserir diálogo de Entrada de Texto

    O arquivo agora tem a seguinte aparência:

    Index.php com form de entrada de texto
  9. Adicione uma linha em branco acima da tag </form>. Nessa linha em branco, arraste e solte um componente Botão da seção Forms HTML da Paleta.
  10. A caixa de diálogo Inserir Botão abre. Digite Go no campo Label e clique em OK.
    Caixa de diálogo Inserir Botão, preenchido
  11. Agora, o form se parece com o código abaixo, com uma única diferença. No código abaixo, o atributo method está explícito na tag <form>. O NetBeans IDE não adicionou o atributo method ao seu form, pois o GET é o valor default desse atributo. Entretanto, você pode entender o código com mais facilidade se o atributo method estiver explícito.
    <form action="wishlist.php" method="GET" name="wishList">
    Show wish list of: <input type="text" name="user" value=""/>
    <input type="submit" value="Go" />
    </form>

Observe os seguintes elementos do form:

  • A tag de abertura <form> contém o atributo action. O atributo action especifica o arquivo para o qual o form transferirá dados. Nesse caso, o arquivo se chama wishlist.php e está na mesma pasta que o index.php. (Você criará esse arquivo na seção Criando wishlist.php e Testando a Aplicação.)
  • A tag de abertura <form> também contém o método a ser aplicado para a transferência de dados (GET). O PHP usa um array $_GET ou $_POST para os valores passados pelo form, dependendo do valor do atributo method. Nesse caso, o PHP usa $_GET.
  • Um componente de entrada detexto. Esse componente é um campo de texto usado para inserir o nome do usuário cuja lista de desejos você deseja exibir. O valor inicial do campo de texto é uma sequência de caracteres vazia. O nome desse campo é user. O PHP usa o nome do campo ao criar um array para os valores do campo. Nesse caso, o array para os valores desse campo é htmlentities($_GET["user"]).
  • Um componente de entrada submit com o valor “Ir”. O tipo "submit" significa que o campo de entrada aparece na página como um botão. O valor “Ir” é o label do botão. Quando o usuário clica no botão, os dados no componente texto são transferidos para o arquivo especificado no atributo action.

Criando wishlist.php e Testando a Aplicação

Em Adicionando um Form ao index.php, foi criado um form no qual o usuário envia o nome de alguém cuja lista de desejos o usuário deseja ver. O nome é passado para a página wishlist.php. Entretanto, essa página não existe. Se você executar o index.php, ocorrerá um erro 404: File Not Found ao enviar um nome. Nesta seção, você criará a página wishlist.php e testará a aplicação.

Para criar a wishlist.php e testar a aplicação:

  1. Dentro do projeto “lista de desejos” que você criou, clique com o botão direito do mouse no nó dos arquivos de código-fonte e, no menu de contexto, selecione Novo > Página Web PHP. O assistente Nova Página Web de PHP é aberto.
  2. Digite wishlist no campo Nome do Arquivo e pressione Finalizar.
  3. Clique com o botão direito do mouse no nó Código-fonte e selecione Executar Projeto no menu de contexto ou clique no ícone Executar Projeto Principal O botão Executar Projeto Principal na barra de ferramentas: uma seta triangular verdena barra de ferramentas, caso você tenha definido o seu projeto como Principal.
    Página da aplicação principal index.php com uma caixa de edição Mostrar da lista de desejos e um botão Ir
  4. Na lista de desejos Mostrar : caixa de edição, digite Tom e clique em Ir. Uma página vazia com a seguinte URL aparecerá: http://localhost:90/Lesson2/wishlist.php?user=tom. Esse URL indica que a sua página principal funciona corretamente.

Estabelecendo a Conexão e Obtendo o Wisher ID

Nesta seção, você primeiro adiciona o código ao arquivo wishlist.php que cria uma conexão ao banco de dados. Em seguida, adiciona o código para recuperar o número do wisher ID cujo nome foi digitado no form index.php.

  1. Clique duas vezes no arquivo wishlist.php. O modelo que se abre é diferente do index.php. Comece e termine o arquivo com as tags <html></html> e <body></body>, já que o arquivo também conterá um código HTML.
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
    </head>
    <body>
    <?php
    // put your code here
    ?>
    </body>
    </html>
  2. Para exibir o título, digite o seguinte bloco de código imediatamente depois da tag de abertura <body>, antes da tag <?php gerada:
     Wish List of <?php echo htmlentities($_GET["user"])."<br/>";?>

    O código agora tem a seguinte aparência:

    <body>Wish List of <?php echo htmlentities($_GET["user"])."<br/>";?>
    <?php
    // put your code here
    </body>

    O bloco de código PHP exibe os dados recebidos usando o método GET no campo "user". Esses dados são transferidos do index.php onde o nome do proprietário da lista de desejos Tom foi inserido no campo de texto "user". Repita as etapas de Testando index.php para ver se o wishlist.php funciona corretamente.
    A página wishlist.php mostra o texto Lista de Desejos de Tom

  3. Delete a seção comentada no bloco PHP do modelo. Em seu lugar, digite ou cole no código a seguir. Esse código abre a conexão ao banco de dados.

    Para o banco de dados MySQL:

    $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');

    Para o banco de dados Oracle:

    $con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8");
    if (!$con) {
        $m = oci_error();
        exit('Connect Error ' . $m['message']);
    }

    O código tenta abrir uma conexão ao banco de dados e gera uma mensagem de erro, caso haja uma falha.

    Observação para os usuários do banco de dados Oracle: Pode ser preciso alterar a conexão ao banco de dados no comando oci_connect. A sintaxe padrão é “nome do host/nome do serviço". A conexão ao banco de dados Oracle XE nesse snippet de código é “localhost/XE” para seguir essa sintaxe.

    Observação: É possível usar a funcionalidade autocompletar código do NetBeans IDE para as funções mysqli ou OCI8.

    Funcionalidade autocompletar código para chamadas do MySQLFuncionalidade autocompletar código para chamadas do OCI8
  4. Abaixo do código para abrir a conexão ao banco de dados, no mesmo bloco PHP, digite ou cole o código a seguir. Esse código recupera o wisher ID cuja lista tenha sido solicitada. Se o wisher não estiver no banco de dados, o código terminará o processo, ou sairá dele, e exibirá uma mensagem de erro.

    Para o banco de dados MySQL:

    mysqli_select_db($con, "wishlist");
    $user = mysqli_real_escape_string($con, htmlentities($_GET["user"]));
    $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'");
    if (mysqli_num_rows($wisher) < 1) { exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again"); }
    $row = mysqli_fetch_row($wisher);
    $wisherID = $row[0];
    mysqli_free_result($wisher);

    Para o banco de dados Oracle: (Observe que o oci8 não tem um equivalente para mysqli_num_rows)

    $query = "SELECT id FROM wishers WHERE NAME = :user_bv";
    $stid = oci_parse($con, $query);
    $user = $_GET['user'];
    
    oci_bind_by_name($stid, ':user_bv', $user);
    oci_execute($stid);
    
    //Because user is a unique value I only expect one row
    $row = oci_fetch_array($stid, OCI_ASSOC);
    if (!$row) {
        exit("The person " . $user . " is not found. Please check the spelling and try again" );
    }
    $wisherID = $row['ID'];
    oci_free_statement($stid);

    Os dados são selecionados no banco de dados wishlist usando a conexão $con. O critério de seleção é o nome recebido do index.php como "user".

    A sintaxe de uma instrução SQL SELECT pode ser descrita brevemente da seguinte forma:

    • Depois de SELECT, especifique os campos dos quais você deseja obter os dados. Um asterisco (*) representa todos os campos.
    • Depois da cláusula FROM, especifique o nome da tabela da qual os dados devem ser recuperados.
    • A cláusula WHERE é opcional. Especifique as condições do filtro nela.

    A consulta mysqli retorna um objeto de resultado. O OCI8 retorna uma instrução executada. Em ambos os casos, você extrai uma linha como o resultado da consulta executada e extrai o valor da linha ID, armazendo-o na variável $wisherID.

    Por último, você libera o resultado da mysqli ou a instrução do OCI8. É necessário liberar todos os recursos que usam uma conexão antes que a conexão  seja fisicamente fechada. Do contrário, o sistema interno de  refcounting do PHP continuará mantendo a conexão do banco de dados subjacente aberta, mesmo se o $con não for mais utilizável seguindo a chamada mysqli_close() ou oci_close().

    Observação de segurança: Para MySQL, o parâmetro htmlentities($_GET["user"]) tem escape para evitar os ataques de injeção SQL. Consulte Wikipedia sobre injeções SQL e a documentação mysql_real_escape_string. Embora no contexto deste tutorial você não esteja correndo o risco de injeções SQL prejudiciais, recomendamos escapar as strings nas consultas MySQL que estariam correndo risco de tal ataque. O OCI8 evita isso usando variáveis de vínculo .

Este bloco PHP agora está concluído. Se você estiver usando um banco de dados MySQL, o arquivo wishlist.php se parecerá com o seguinte:

Wish List of <?php echo htmlentities($_GET["user"]) . "<br/>"; ?>
<?php
$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'); mysqli_select_db($con, "wishlist"); $user = mysqli_real_escape_string($con, htmlentities($_GET["user"])); $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'"); if (mysqli_num_rows($wisher) < 1) { exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again"); } $row = mysqli_fetch_row($wisher); $wisherID = $row[0]; mysqli_free_result($wisher); ?>

Se você estiver usando um banco de dados Oracle, o arquivo wishlist.php se parecerá com o seguinte:

Wish List of <?php echo htmlentities($_GET["user"]) . "<br/>"; ?>
  <?php
  $con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8");
  if (!$con) {
     $m = oci_error();
     exit('Connect Error ' . $m['message'];
     exit;
  }
  $query = "SELECT id FROM wishers WHERE name = :user_bv";
  $stid = oci_parse($con, $query);
  $user = htmlentities($_GET["user"]);
  oci_bind_by_name($stid, ':user_bv', $user);
  oci_execute($stid);
//Because user is a unique value I only expect one row $row = oci_fetch_array($stid, OCI_ASSOC); if (!$row) { exit("The person " . $user . " is not found. Please check the spelling and try again" ); } $wisherID = $row["ID"]; oci_free_statement($stid); ?>

Se você testar a aplicação e inserir um usuário inválido, a mensagem seguinte aparecerá.

A página wishlist.php mostra uma mensagem de erro: o usuário não foi encontrado

Exibindo uma Tabela de Desejos

Nessa seção, você pode adicionar o código que exibe uma tabela HTML dos desejos associados ao wisher. O wisher é identificado pelo ID recuperada no código da seção anterior.

  1. Abaixo do bloco PHP, digite ou cole o seguinte bloco de código HTML. Esse código abre uma tabela, especifica a cor de suas bordas (preto), e "desenha" o cabeçalho da tabela com as colunas "Item" e "Data de vencimento."
    <table border="black">
        <tr>
            <th>Item</th>
            <th>Due Date</th>
        </tr>
    </table>
    A tag </table> fecha a tabela.
  2. Insira o seguinte bloco de código PHP acima da tag de fechamento </table>.

    Para o banco de dados MySQL:

    <?php
    $result = mysqli_query($con, "SELECT description, due_date FROM wishes WHERE wisher_id=" . $wisherID);
    while ($row = mysqli_fetch_array($result)) {
    echo "<tr><td>" . htmlentities($row["description"]) . "</td>";
    echo "<td>" . htmlentities($row["due_date"]) . "</td></tr>\n";
    }
    mysqli_free_result($result);
    mysqli_close($con);
    ?>

    Para o banco de dados Oracle:

    <?php
    $query = "SELECT description, due_date FROM wishes WHERE wisher_id = :id_bv";
    $stid = oci_parse($con, $query);
    oci_bind_by_name($stid, ":id_bv", $wisherID);
    oci_execute($stid);
    while ($row = oci_fetch_array($stid)) {
    echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";
    echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td></tr>\n";
    }
    oci_free_statement($stid);
    oci_close($con);
    ?>

    Dentro do código:

    • A consulta SELECT recupera os desejos com suas datas de vencimento para o whisher especificado por seu ID, que foi recuperada na etapa 4, e armazena os desejos e as datas de vencimento em um array $result.
    • Um loop exibe os itens do array $result como linhas na tabela enquanto o array não está vazio.
    • As linhas do form das tags <tr></tr>, as células do form das tags <td></td> nas linhas, e \n inicia uma nova linha.
    • A função htmlentities converte todos os caracteres que tenham a entidade HTML equivalentes às entradas HTML. Isso ajuda a prevenir scripts de site cruzados.
    • As funções, no final, liberam todos os recursos (resultados do mysqli e instruções do OCI8) e fecha a conexão ao banco de dados. Observe que é necessário liberar os recursos que usam uma conexão antes que a conexão possa ser fisicamente fechada. Do contrário, o sistema interno de refcounting do PHP manterá a conexão do banco de dados subjacente aberta, mesmo se a conexão não for mais utilizável seguindo a chamada oci_close() ou mysqli_close().

    Cuidado: Certifique-se de digitar os nomes dos campos de banco de dados exatamente como eles foram especificados durante a criação da tabela do banco de dados. Para Oracle, os nomes das colunas são retornados com letras maiúsculas por default.

  3. Para testar a aplicação, execute o projeto como descrito na seção Testando index.php.
    A página Wishlist.php mostra uma lista de desejos Tom

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

Usuários 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óxima Etapa

<< Lição anterior

Próxima lição >>

Voltar à Página Principal do Tutorial

Links Úteis

Encontre mais informações sobre o uso de HTML, PHP e MySQL ou Oracle Database aqui:



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