Você está na página 1de 12

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

Criando uma Aplicao Orientada pelo Banco de Dados com o PHP Lio 2: Projetando a Aplicao. Lendo o Banco de Dados
Contedo do tutorial:
0. Criando uma Aplicao Orientada pelo Banco de Dados com o PHP - Pgina Principal 1. Criando o Banco de Dados 1. Criando um Banco de Dados MySQL 2. Criando Tabelas do Banco de Dados Oracle 2. => Projetando a Aplicao. Lendo o Banco de Dados Criando um Projeto PHP Definindo um Diagrama de Fluxo de Pgina Adicionando um Form a um index.php Criando wishlist.php e Testando a Aplicao Estabelecendo uma Conexo e Obtendo o Wisher ID Exibindo uma Tabela de Desejos Cdigo-fonte da Aplicao Aps a Lio Atual Ser Concluda 3. Criando um Novo Usurio da Aplicao 4. Otimizando o Cdigo 1. Obtm o nome de uma 5. Adicionando Segurana. Implementando o Log-in de Usurio da Aplicao 6. Adicionando um Novo Desejo ao Banco de Dados 7. Atualizando e Deletando Entradas no Banco de Dados 8. Melhorando a Aparncia da Aplicao Usando a Tecnologia CSS 9. Implantando a Aplicao em um Servidor Web Remoto pessoa que o usurio digita. 2. Verifica se a pessoa realmente est no banco de dados. Fecha com uma mensagem de erro caso a pessoa no esteja no banco de dados. 3. Exibe uma tabela dos desejos dessa pessoa. O documento atual uma parte do tutorial Criando uma Aplicao Orientada pelo Banco de Dados no NetBeans IDE para PHP. Nesta lio, voc cria e configura o projeto PHP para desenvolver sua aplicao, cria uma lista de pginas na aplicao e define as relaes entre eles. Tambm desenvolve a funcionalidade bsica da aplicao e a testa contra os dados inseridos no banco de dados de amostra na lio 1. O cdigo PHP escrito nessa lio executa as seguintes funes:

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 contm o arquivo index index.php por default. Para obter informaes sobre como criar e configurar um projeto PHP, consulte Configurando um Projeto PHP.

Definindo um Diagrama de Fluxo de Pgina


O escopo da sua aplicao cobre os seguintes casos de uso: 1. O usurio visualiza a lista de desejos de uma pessoa. 2. O usurio se registra como um novo wisher. 3. O usurio se conecta e cria sua lista de desejos. 4. O usurio se conecta e edita sua lista de desejos. Para cobrir essa funcionalidade bsica, voc precisar implementar os seguintes arquivos PHP: 1. A pgina "inicial" index.php usada para fazer log-in, registrar e alternar para as listas de desejos de outros usurios. 2. A pgina wishlist.php para exibir a lista de desejos de um wisher.

1 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

3. A pgina createNewWisher.php para registro como um wisher. 4. A pgina editWishList.php para editar uma lista de desejos pelo proprietrio. 5. A pgina editWish.php para criar e editar desejos.

Agora que finalizou as etapas preliminares, voc pode comear a implementar a funcionalidade bsica da sua aplicao. Comece visualizando a lista de desejos de um wisher. Esta funcionalidade no envolve quaisquer validaes e pode ser testada facilmente, j que voc j indicou os dados de teste no banco de dados. A funcionalidade ser implementada em duas pginas, index.php e wishlist.php.

Adicionando um Form a um index.php


O arquivo index.php no conter cdigos PHP, portanto, voc poder remover facilmente o seguinte bloco: O arquivo index.php usado para dois propsitos: Exibir uma pgina com controles para indicar dados. Transferir os dados inseridos a outro arquivo PHP, onde os dados sero processados. Neste tutorial, os dados so passados para um arquivo chamado wishlist.php, no qual, na prxima seo, voc criar e escrever os cdigos. Essas aes so realizadas por meio de um form HTML. Cada form HTML contm: Um conjunto de campos que corresponde aos controles na pgina. A ao que executada depois que o usurio envia os dados do form. A ao representada pelo caminho pgina 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 Cdigo-fonte e clique duas vezes no arquivo index.php. O arquivo index.php se abre na rea do editor principal do IDE. O arquivo contm um modelo para a insero dos cdigos HTML e PHP. Observao: voc pode ignorar as advertncias do validador HTML.

2 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

. 2. Remova o bloco PHP. O arquivo index.php no conter cdigos PHP.

3. Insira o seguinte elemento dentro do elemento <head>, caso j no esteja presente. Esse elemento ativa o form para usar caracteres UTF-8 internacionais.

<meta http-equiv="content-type" content="text/html; charset=UTF-8">


4. Abra a Paleta no menu Janela ou pressione Ctrl-Shift-8. 5. Na seo Forms HTML da Paleta, arraste e solte um Form na seo <body> do index.php.

6. A Caixa de Dilogo Inserir Form abre. No campo Ao, 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 Aplicao.) Selecione o mtodo GET para a transferncia de dados. D um nome arbitrrio ao form, como wishList. Clique em OK quando acabar.

3 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

O arquivo agora tem a seguinte aparncia:

7. Entre os identificadores de abertura e fechamento do form, digite o texto Show wish list of: . 8. Arraste um componente de Entrada de Texto da seo Forms HTML da Paleta at o espao aps o texto Show wish list of: . A caixa de dilogo Inserir Texto abre. 9. Nomeie a entrada como user. Selecione o tipo de entrada text. Deixe todos os outros campos vazios e clique em OK.

O arquivo agora tem a seguinte aparncia:

4 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

10. Adicione uma linha em branco acima da tag </form>. Nessa linha em branco, arraste e solte um componente Boto da seo Forms HTML da Paleta. 11. A caixa de dilogo Inserir Boto abre. Digite Go no campo Label e clique em OK.

12. Agora, o form se parece com o cdigo abaixo, com uma nica diferena. No cdigo abaixo, o atributo method est explcito na tag <form>. O NetBeans IDE no adicionou o atributo method ao seu form, pois o GET o valor default desse atributo. Entretanto, voc pode entender o cdigo com mais facilidade se o atributo method estiver explcito.

<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> contm 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 seo Criando wishlist.php e Testando a Aplicao.) A tag de abertura <form> tambm contm o mtodo a ser aplicado para a transferncia 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 usurio cuja lista de desejos voc deseja exibir. O valor inicial do campo de texto uma sequncia 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 $_GET["user"]. Um componente de entrada submit com o valor Ir. O tipo "submit" significa que o campo de entrada aparece na pgina como um boto. O valor Ir o label do boto. Quando o usurio clica no boto, os dados no componente

texto so transferidos para o arquivo especificado no atributo action.

Criando wishlist.php e Testando a Aplicao

5 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

Em Adicionando um Form ao index.php, foi criado um form no qual o usurio envia o nome de algum cuja lista de desejos o usurio deseja ver. O nome passado para a pgina wishlist.php. Entretanto, essa pgina no existe. Se voc executar o index.php, ocorrer um erro 404: File Not Found ao enviar um nome. Nesta seo, voc criar a pgina wishlist.php e testar a aplicao. Para criar a wishlist.php e testar a aplicao:

1. Dentro do projeto lista de desejos que voc criou, clique com o boto direito do mouse no n dos arquivos de cdigo-fonte e, no menu de contexto, selecione Novo > Arquivo PHP. O assistente para Novo Arquivo PHP abre. 2. Digite wishlist no campo Nome do Arquivo e pressione Finalizar.

3. Clique com o boto direito do mouse no n Cdigo-fonte e selecione Executar Projeto no menu de contexto ou clique no cone Executar Projeto Principal na barra de ferramentas, caso voc tenha definido o seu projeto como Principal.

4. Na lista de desejos Mostrar : caixa de edio, digite Tom e clique em Ir. Uma pgina vazia com a seguinte URL aparecer: http://localhost:90/Lesson2/wishlist.php?user=tom. Esse URL indica que a sua pgina principal funciona corretamente.

Estabelecendo a Conexo e Obtendo o Wisher ID


Nesta seo, voc primeiro adiciona o cdigo ao arquivo wishlist.php que cria uma conexo ao banco de dados. Em seguida, adiciona o cdigo para recuperar o nmero 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 tambm conter um cdigo HTML.

<html> <body> <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ ?>

6 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

</body> </html>
2. Para exibir o ttulo, digite o seguinte bloco de cdigo imediatamente depois da tag de abertura <body>, antes da tag <?php gerada:

Wish List of <?php echo $_GET["user"]."<br/>";?>


O cdigo agora tem a seguinte aparncia:

<html> <body>Wish List of <?php echo $_GET["user"]."<br/>";?> <?php /* * To change this template, choose Tools | Templates * and open the template in the editor. */ ?> </body> </html>
O bloco de cdigo PHP exibe os dados recebidos usando o mtodo GET no campo "user". Esses dados so transferidos do index.php onde o nome do proprietrio 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.

3. Delete a seo comentada no bloco PHP do modelo. Em seu lugar, digite ou cole no cdigo a seguir. Esse cdigo abre a conexo 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']); }

7 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

O cdigo tenta abrir uma conexo ao banco de dados e gera uma mensagem de erro, caso haja uma falha. Observao para os usurios do banco de dados Oracle: Pode ser preciso alterar a conexo ao banco de dados no comando oci_connect. A sintaxe padro nome do host/nome do servio". A conexo ao banco de dados Oracle XE nesse snippet de cdigo localhost/XE para seguir essa sintaxe. Observao: possvel usar a funcionalidade autocompletar cdigo do NetBeans IDE para as funes mysqli ou OCI8.

4. Abaixo do cdigo para abrir a conexo ao banco de dados, no mesmo bloco PHP, digite ou cole o cdigo a seguir. Esse cdigo recupera o wisher ID cuja lista tenha sido solicitada. Se o wisher no estiver no banco de dados, o cdigo 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, $_GET["user"]); $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'"); if (mysqli_num_rows($wisher) < 1) { exit("The person " . $_GET["user"] . " is not found. Please check the spelling and try again"); }

8 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

$row = mysqli_fetch_row($wisher); $wisherID = $row[0]; mysqli_free_result($wisher);


Para o banco de dados Oracle: (Observe que o oci8 no 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 so selecionados no banco de dados wishlist usando a conexo $con. O critrio de seleo o nome recebido do index.php como "user". A sintaxe de uma instruo 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 clusula FROM, especifique o nome da tabela da qual os dados devem ser recuperados. A clusula WHERE opcional. Especifique as condies do filtro nela. A consulta mysqli retorna um objeto de resultado. O OCI8 retorna uma instruo 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 varivel

$wisherID.
Por ltimo, voc libera o resultado da mysqli ou a instruo do OCI8. necessrio liberar todos os recursos que usam uma conexo antes que a conexo seja fisicamente fechada. Do contrrio, o sistema interno de refcounting do PHP continuar mantendo a conexo do banco de dados subjacente aberta, mesmo se o $con no for mais utilizvel seguindo a chamada mysqli_close() ou oci_close(). Observao de segurana: Para MySQL, o parmetro $_GET["user"] tem escape para evitar os ataques de injeo SQL. Consulte Wikipedia sobre injees SQL e a documentao mysql_real_escape_string. Embora no contexto deste tutorial voc no esteja correndo o risco de injees SQL prejudiciais, recomendamos escapar as strings nas consultas MySQL que estariam correndo risco de tal ataque. O OCI8 evita isso usando variveis de vnculo (Consulte Perguntas Mais Frequentes de PHP da Oracle e procure variable bind e injection). Este bloco PHP agora est concludo. Se voc estiver usando um banco de dados MySQL, o arquivo wishlist.php se parecer com o seguinte:

Wish List of <?php echo $_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

9 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

mysqli_set_charset($con, 'utf-8'); mysqli_select_db($con, "wishlist"); $user = mysqli_real_escape_string($con, $_GET["user"]); $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'"); if (mysqli_num_rows($wisher) < 1) { exit("The person " . $_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 $_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 = $_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 aplicao e inserir um usurio invlido, a mensagem seguinte aparecer.

Exibindo uma Tabela de Desejos


Nessa seo, voc pode adicionar o cdigo que exibe uma tabela HTML dos desejos associados ao wisher. O wisher identificado pelo ID recuperada no cdigo da seo anterior.

1. Abaixo do bloco PHP, digite ou cole o seguinte bloco de cdigo HTML. Esse cdigo abre uma tabela, especifica a cor de

10 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

suas bordas (preto), e "desenha" o cabealho 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 cdigo 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 cdigo: 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 no est vazio. As linhas do form das tags <tr></tr>, as clulas do form das tags <td></td> nas linhas, e \n inicia uma nova linha. A funo htmlentities converte todos os caracteres que tenham a entidade HTML equivalentes s entradas HTML. Isso ajuda a prevenir scripts de site cruzados. As funes, no final, liberam todos os recursos (resultados do mysqli e instrues do OCI8) e fecha a conexo ao banco de dados. Observe que necessrio liberar os recursos que usam uma conexo antes que a conexo possa ser fisicamente fechada. Do contrrio, o sistema interno de refcounting do PHP manter a conexo do banco de dados subjacente aberta, mesmo se a conexo no for mais utilizvel 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 criao da tabela do banco de dados. Para Oracle, os nomes das colunas so retornados com letras maisculas por default.

11 de 12

17/09/2013 13:11

Criando uma Aplicao Orientada pelo Banco de Dados Com o PHP. Pr...

https://netbeans.org/kb/docs/php/wish-list-lesson2_pt_BR.html?print=yes

3. Para testar a aplicao, execute o projeto como descrito na seo Testando index.php.

O cdigo-fonte da Aplicao aps a Lio Atual est Concludo


Usurios MySQL: clique aqui para fazer o download do cdigo-fonte que reflete o estado do projeto depois que a lio estiver concluda. Usurios de banco de dados Oracle: clique aqui para fazer o download do cdigo-fonte que reflete o estado do projeto depois que a lio estiver concluda.

Prxima Etapa
<< Lio anterior Prxima lio >> Voltar Pgina Principal do Tutorial

Links teis
Encontre mais informaes sobre o uso de HTML, PHP e MySQL ou Oracle Database aqui: Tutorial de HTML Tutorial do Cdigo HTML - Guia de Referncia Grtis para obter Ajuda Com Tags HTML Tutorial de PHP Tutorial de PHP - Aprenda PHP Tutoriais de Vdeo de PHP Iniciando o MySQL Tutorial de PHP / MySQL Tutorial de PHP MySQL O Manual do OCI8 da Oracle Blog OCI8 do Christopher Jones

Envie-nos Seu Feedback Para enviar comentrios e sugestes, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, junte-se lista de correspondncia users@php.netbeans.org. Voltar Trilha de Aprendizado PHP

12 de 12

17/09/2013 13:11