blob: 47a310f212a33636ddf8b8691ce8868d0cda6cb3 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Lição 3: Criando um Novo Usuário de Aplicação
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Lição 3: Criando um Novo Usuário de Aplicação - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Lição 3: Criando um Novo Usuário de Aplicação
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. <<addLinkNewWisher,O usuário abre a página inicial index.php e clica no link para registrar>>.
2. <<implementCreateNewWisher,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.
image::images/page-flow-diagram-l3.png[]
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 link:https://netbeans.org/files/documents/4/1928/lesson2.zip[+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 link:https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson2.zip[+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:
[source,html]
----
<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 link:wish-list-lesson2.html#createNewFile[+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:
[source,html]
----
<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>
----
NOTE: 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 link:wish-list-lesson3.html#htmlForm[+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`` .
NOTE: 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.
[source,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;
----
[start=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.
[source,php]
----
/** Check that the page was requested from itself via the POST method. */
if ($_SERVER["REQUEST_METHOD"] == "POST") {
}
----
[start=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.
[source,php]
----
/** 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;
}*
}
----
[start=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:*
[source,php]
----
/** 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:*
[source,php]
----
/** 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']);
}*
}
----
[start=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:*
[source,php]
----
/** 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:*
[source,php]
----
/** 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;
}*
}
----
[start=6]
. Com do código que verifica se o usuário sendo único, adicione uma série de cláusulas ``se `` 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.
[source,php]
----
if ($_POST["password"]=="") {$passwordIsEmpty = true;
}if ($_POST["password2"]=="") {$password2IsEmpty = true;
}if ($_POST["password"]!=$_POST["password2"]) {$passwordIsValid = false;
}
----
[start=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:*
[source,php]
----
/** 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 &amp;&amp; $userNameIsUnique &amp;&amp; !$passwordIsEmpty &amp;&amp; !$password2IsEmpty &amp;&amp; $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:*
[source,php]
----
/** 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 &amp;&amp; $userNameIsUnique &amp;&amp; !$passwordIsEmpty &amp;&amp; !$password2IsEmpty &amp;&amp; $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 <<validatinDataBeforeAddingToDatabase,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:
[source,php]
----
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/>");
}
?> *
----
[start=2]
. Insira o seguinte bloco de código PHP dentro do form de entrada HTML abaixo do código da entrada de senha:
[source,php]
----
Password: <input type="password" name="password"/><br/>
*<?php
if ($passwordIsEmpty) {
echo ("Enter the password, please!");
echo ("<br/>");
}
?>*
----
[start=3]
. Insira os seguintes blocos de código PHP dentro do form de entrada HTML abaixo do código de confirmação de senha:
[source,php]
----
Please confirm your password: <input type="password" name="password2"/><br/>
*<?php
if ($password2IsEmpty) {
echo ("Confirm your password, please");
echo ("<br/>");
}
if (!$password2IsEmpty &amp;&amp; !$passwordIsValid) {
echo ("The passwords do not match!");
echo ("<br/>");
}
?>*
----
=== Testando a Funcionalidade da Criação do Novo Wisher
[start=1]
. Execute a aplicação. A página de índice abre.
image::images/index-php-3.png[]
[start=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:
image::images/create-new-wisher-empty-form.png[]
[start=3]
. Deixe estes campos em branco e clique em Registrar. Uma mensagem de erro é exibida
image::images/create-new-wisher-name-empty.png[]
[start=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.
[start=5]
. Preencha os campos Senha e Confirme sua senha com valores diferentes e clique em Registrar. Uma mensagem de erro é exibida.
[start=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:
image::images/edit-wish-list-empty.png[]
[start=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
image::images/wishers.png[]
== O código-fonte da Aplicação após a Lição Atual está Concluído
Usuários do MySQL: clique link:https://netbeans.org/files/documents/4/1929/lesson3.zip[+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 link:https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson3.zip[+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
link:wish-list-lesson2.html[+<< Lição anterior+]
link:wish-list-lesson4.html[+Próxima lição >>+]
link:wish-list-tutorial-main-page.html[+Voltar à página principal do Tutorial+]
link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%203:%20Creating%20New%20User[+Enviar Feedback neste 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, link:../../../community/lists/top.html[+junte-se à lista de correspondência users@php.netbeans.org+].
link:../../trails/php.html[+Voltar à Trilha de Aprendizado PHP+]