Você está na página 1de 7

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

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

Criando uma Aplicao Orientada pelo Banco de Dados com o PHP Lio 3: Criando um Novo Usurio de Aplicao
Contedo do tutorial: 0. Criando uma Aplicao Orientada pelo Banco de Dados com o PHP - Pgina Principal 1. Criando o Banco de Dados a. Criando um Banco de Dados MySQL b. Criando Tabelas do Banco de Dados Oracle 2. Projetando a Aplicao. Lendo o Banco de Dados 3. => Criando um Novo Usurio de Aplicao Cdigo-fonte da Aplicao da Lio Anterior Adicionando um Link para Comear a Criar um Novo Wisher Criando Novos Arquivos PHP Adicionando um Form HTML para Inserir os Dados de um Novo Wisher Validando Dados e Adicionando-os ao Banco de Dados Exibindo Mensagens de Erro no Form de Entrada Testando a Funcionalidade de Criao do Novo Wisher O Cdigo-fonte da Aplicao aps a Lio Atual est Concludo Otimizando o Cdigo Adicionando Segurana. Implementando o Log-in de Usurio da Aplicao Adicionando um Novo Desejo ao Banco de Dados Atualizando e Deletando Entradas no Banco de Dados Melhorando a Aparncia da Aplicao Usando a Tecnologia CSS Implantando a Aplicao em um Servidor Web Remoto

4. 5. 6. 7. 8. 9.

Nesta lio, voc expande a aplicao com a funcionalidade Criar um Novo Wisher. A implementao afetar o arquivo index.php e os dois novos arquivos criados se chamaro createNewWisher.php e editWishList.php. O caso de uso Criar um Novo Wisher consiste em trs etapas: 1. O usurio abre a pgina inicial index.php e clica no link para registrar. 2. O usurio alterna para a pgina createNewWisher.php para criar um novo wisher. 3. Aps criar um novo wisher, o usurio alterna para editWishList.php, onde ele criar uma lista de desejos para o usurio.

O documento atual uma parte do tutorial Criando uma Aplicao de Banco de Dados no NetBeans IDE para PHP.

1 de 7

17/09/2013 13:05

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

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

Cdigo-fonte da Aplicao da Lio Anterior


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

Adicionando um Link para Comear 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 cdigo:
<br>Still don't have a wish list?! <a href="createNewWisher.php">Create now</a>

No qual:
Ainda no tem uma lista de desejos?! o texto exibido na pgina ao lado do link. <a href="createNewWisher.php"></a> o cdigo que implementa um link que abre a pgina Criar agora o texto que ser exibido como um link.

createNewWisher.php.

Criando Novos Arquivos PHP


Crie dois novos arquivos PHP nos arquivos de cdigo-fonte do projeto, como descrito na Lio 2.
createnewwisher.php editWishList.php

Em editWishList.php, adicione o texto Ol!" ao corpo do HTML, ou ento, deixe-o com seu contedo default. Voc modificar esse arquivo em lies posteriores, mas voc precisa dele agora porque o createNewWisher.php faz referncia a ele. Para o restante desta lio, 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"> </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>

Observao: O tipo senha um tipo especial de um campo de texto onde os caracteres so substitudos por asteriscos. O cdigo apresenta um form HTML para um usurio inserir o nome e a senha do novo wisher nos campos de texto. Quando o usurio clica no boto "Registrar", os dados inseridos so transferidos para validao na mesma pgina, createNewWisher.php. Observao: voc pode ignorar as advertncias do validador HTML.

Validando Dados e Adicionando-os ao Banco de Dados


Nesta seo, voc adiciona o cdigo PHP ao createNewWisher.php. Adicione este cdigo ao bloco PHP na parte superior do arquivo. O bloco PHP deve estar acima de todo o cdigo HTML, linhas vazias ou espao em branco. A posio do bloco do cdigo PHP importante para permitir o correto funcionamento da instruo de redirecionamento. No bloco PHP, digite ou cole os blocos de cdigo descritos abaixo desta seo, na ordem em que eles so escritos. Adicione o cdigo a seguir para validar os dados: 1. Inicialize as variveis. As primeiras variveis passam as credenciais do banco de dados e as outras sero usadas nas operaes PHP.
/** database connection credentials */ $dbHost="localhost"; $dbUsername="phpuser"; $dbPasswd="phpuserpw"; /** other variables */

2 de 7

17/09/2013 13:05

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

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

$userNameIsUnique = true; $passwordIsValid = true; $userIsEmpty = false; $passwordIsEmpty = false; $password2IsEmpty = false;

2. Abaixo das variveis, adicione uma clusula se . O parmetro da clusula se verifica se a pgina foi solicitada a partir dela mesma usando o mtodo POST. Caso contrrio, as validaes posteriores no so realizadas e a pgina mostrada com campos vazios, como descrito acima.
if ($_SERVER["REQUEST_METHOD"] == "POST") { }

3. Dentro das chaves da clusula se , adicione outra clusula se que verifica se o usurio preencheu o nome do wisher. Se o campo de texto "user" estiver vazio, o valor de $userIsEmpty ser alterado para verdadeiro.
if ($_SERVER["REQUEST_METHOD"] == "POST") {

if ($_POST["user"]=="") $userIsEmpty = true; }

4. Adicione o cdigo que estabelece uma conexo de banco de dados. Se no for possvel estabelecer a conexo, o erro de MySQL ou Oracle OCI8 enviado para a sada. Para o banco de dados 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()); } //set the default client character set mysqli_set_charset($con, 'utf-8'); }

Para o banco de dados 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. Adicione o cdigo que verifica se um usurio cujo nome corresponde ao campo "user" j existe. O cdigo faz isso, tentando localizar o nmero do wisher ID para um nome correspondente ao nome no campo "user". Se houver tal nmero de ID, o valor de $userNameIsUnique alterado para "false". Para o banco de dados 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()); } //set the default client character set 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) {

3 de 7

17/09/2013 13:05

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

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

$userNameIsUnique = false; } }

Para o banco de dados 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); // 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 cdigo que verifica se o usurio sendo nico, adicione uma srie de clusulasse para verificar se o usurio inseriu e confirmou a senha corretamente. O cdigo verifica se os campos Senha ("password") e Confirmar senha ('password2) no esto vazios no form e no so idnticos. Caso contrrio, os valores das variveis boolianas correspondentes so alterados de acordo.
if ($_POST["password"]=="") $passwordIsEmpty = true; if ($_POST["password2"]=="") $password2IsEmpty = true; if ($_POST["password"]!=$_POST["password2"]) { $passwordIsValid = false;}

7. Complete a clusula se ($_SERVER['REQUEST_METHOD'] == "POST") adicionando o cdigo que insere uma nova entrada no banco de dados "wishers". O cdigo verifica se o nome do wisher especificado exclusivamente e se a senha indicada e confirmada validamente. Se as condies forem atendidas, o cdigo 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 cdigo fecha a conexo do banco de dados e redireciona a aplicao para a pgina 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("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'); /** 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']);

4 de 7

17/09/2013 13:05

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

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

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:


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); //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 exibio das mensagens de erro quando os dados inseridos forem invlidos. A implementao baseada nas validaes e alteraes nos valores das variveis boolianas descritas em Validando Dados e Adicionando-os ao Banco de Dados. 1. Insira o seguinte bloco de cdigo 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 cdigo PHP dentro do form de entrada HTML abaixo do cdigo da entrada de senha:

5 de 7

17/09/2013 13:05

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

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

Password: <input type="password" name="password"/><br/>

<?php if ($passwordIsEmpty) { echo ("Enter the password, please!"); echo ("<br/>"); } ?>

3. Insira os seguintes blocos de cdigo PHP dentro do form de entrada HTML abaixo do cdigo de confirmao 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 Criao do Novo Wisher


1. Execute a aplicao. A pgina de ndice abre.

2. Na pgina de ndice, clique no link ao lado do texto Ainda no possui uma lista de desejos? O seguinte form abre:

3. Deixe estes campos em branco e clique em Registrar. Uma mensagem de erro exibida

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 pgina exibida est vazia, mas o redirecionamento foi passado corretamente j que o URL termina com editWishList.php:

6 de 7

17/09/2013 13:05

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

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

7. Para verificar se os dados esto armazenados no banco de dados, v para wishers na janela Servios abaixo do n wislist1 e no menu de contexto, selecione Visualizar Dados

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


Usurios do 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.

Prximas Etapas
<< Lio anterior Prxima lio >> Voltar pgina principal do Tutorial 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

7 de 7

17/09/2013 13:05