blob: 8b05abebbd81cd593e255d7bc4daf03ea5a99095 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>Criando uma Aplicação Orientada pelo Banco de Dados Com o PHP. Criando um novo registro no banco de dados MySQL.</title>
<meta name="KEYWORDS" content="CRUD, Update, Delete, MySQL, PHP, NetBeans">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="DESCRIPTION" content="Creating a Database Driven Application With PHP. Creating new record in MySQL database" >
<link rel="stylesheet" type="text/css" href="../../../netbeans.css" media="screen"></head>
<body>
<h1>Criando uma Aplicação Orientada pelo Banco de Dados com o PHP </h1>
<h1>Lição 6: Adicionado um Novo Desejo ao Banco de Dados</h1>
<div style="margin-left:-3px">
<div class="feedback-box margin-around float-left" style="margin-right:15px">
<h4>Conteúdo do tutorial:</h4>
<ol start="0">
<li><a href="wish-list-tutorial-main-page.html">Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Página Principal</a></li>
<li><p>Criando o Banco de Dados</p> <ol type="a"><li><a href="wish-list-lesson1.html">Criando um Banco de Dados MySQL</a></li>
<li><a href="wish-list-oracle-lesson1.html">Criando Tabelas do Banco de Dados Oracle</a></li>
</ol></li>
<li>
<p><a href="wish-list-lesson2.html">Projetando a Aplicação. Lendo o Banco de Dados</a></p>
</li>
<li><a href="wish-list-lesson3.html">Criando um Novo Usuário de Aplicação</a></li>
<li><a href="wish-list-lesson4.html">Otimizando o Código</a></li>
<li><a href="wish-list-lesson5.html">Adicionando Segurança. Implementando o Log-in de Usuário da Aplicação</a></li>
<li>
<p><b>=> Adicionando um Novo Desejo ao Banco de Dados</b></p>
<ul>
<li><a href="#previousLessonSourceCode">Código-fonte da Aplicação da Lição Anterior</a></li>
<li><a href="#addNewWish">Enviando um Novo Desejo</a>
<ul>
<li><a href="#add-wish-ui-elements">Adicionando os Componentes da Interface do Usuário</a></li>
<li><a href="#inputFormAfterunsuccessfulSave">Reexibindo a Data de Vencimento após um <br>Envio Malsucedido</a></li>
</ul></li>
<li><a href="#logonVerification">Verificando o Log-in do Wisher</a></li>
<li><a href="#insert-new-wish">Inserindo o Novo Desejo ao Banco de Dados</a>
<ul>
<li><a href="#add-insert-wish">Adicionando a função insert_wish ao WishDB</a></li>
<li><a href="#add-format-date-for-sql">Adicionando a função format_date_for_sql ao WishDB</a></li>
<li><a href="#validateAndEnterWishToDatabase">Inserindo o Registro do Novo Desejo no Banco de Dados</a></li>
<li><a href="#displayingErrorMessages">Exibindo Mensagens de Erro</a></li>
</ul>
</li>
<li><a href="#backToIndex">Retornando à Página Inicial index.php</a></li>
<li><a href="#testingAddWishFunctionality">Testando a Funcionalidade Adicionar Desejo</a></li>
<li><a href="#lessonResultSourceCode">O Código-fonte da Aplicação após a Lição Atual está Concluído</a></li>
</ul>
</li>
<li><a href="wish-list-lesson7.html">Atualizando e Deletando Entradas no Banco de Dados</a></li>
<li><a href="wish-list-lesson8.html">Melhorando a Aparência da Aplicação Usando a Tecnologia CSS</a></li>
<li><a href="wish-list-lesson9.html">Implantando a Aplicação em um Servidor Web Remoto</a></li>
</ol>
</div>
</div>
<img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0">
<p>Nesta lição, você expande a funcionalidade da aplicação com duas funcionalidades:</p>
<ul>
<li style="margin-left:42em"><a href="#addNewWish">Adicionando um novo desejo</a></li>
<li style="margin-left:42em"><a href="#backToIndex">Retornando para a página inicial index.php</a></li>
</ul>
<p>Para implementar essa funcionalidade, edite o arquivo <tt>editWishList.php</tt> e crie um novo arquivo <tt>editWish.php</tt>.</p>
<img alt="Diagrama de fluxo da página destacando as adições da Lição 6" height="368" src="../../../images_www/articles/72/php/oracle-wishlist/page-flow-diagram-l6.png" width="439">
<p>O documento atual é uma parte do tutorial <a href="wish-list-tutorial-main-page.html"></a>Criando uma Aplicação CRUD no NetBeans IDE para PHP. </p>
<br style="clear:left">
<h2><a name="previousLessonSourceCode"></a>Código-fonte da Aplicação da Lição Anterior</h2>
<p>Usuários MySQL: clique <a href="https://netbeans.org/files/documents/4/1931/lesson5.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior for concluída.</p>
<p>Usuários do banco de dados Oracle: clique <a href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson5.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior for concluída.</p>
<h2><a id="addNewWish" name="addNewWish"></a>Enviando um Novo Desejo </h2>
<p>O usuário envia um novo desejo nas seguintes etapas: </p>
<ol>
<li>O usuário faz log-in, alterna para a página <tt>editWishList.php</tt> e pressiona o botão Adicionar Desejo. A página <tt>editWish.php</tt> abre, exibindo um form HTML.</li>
<li>No form HTML, o usuário insere uma descrição de um desejo e, possivelmente, a data quando deseja recebê-lo e pressiona o botão Salvar Alterações. </li>
<li>Se um form for enviado sem uma descrição do desejo, o usuário retorna ao form para tentar novamente. Caso o usuário tenha enviado uma data de vencimento mas nenhuma descrição, essa data é exibida novamente quando o form é recarregado.</li>
</ol>
<!--<ul>
<li>If the description is not filled in, an error message is displayed and the user returns to the editWish.php page. </li>
<li>Else, if a description is filled in, the application returns to the editWishList.php page with the list of wishes expanded with the new wish. </li>
</ul> -->
<p>Para ativar esse procedimento para o usuário, adicione a seguinte funcionalidade à aplicação:</p>
<ul>
<li><a href="#add-wish-ui-elements">Componentes da interface do usuário</a>, consistindo em um form HTML para adicionar desejos e um botão em <tt>editWishList.php </tt>que redireciona o usuário para o form. </li>
<li>Código para <a href="#inputFormAfterunsuccessfulSave">reexibir a data de vencimento</a> se um form incompleto for enviado. </li>
</ul>
<div class="indent">
<h3 id="add-wish-ui-elements">Adicionando os Componentes da Interface do Usuário</h3>
<p><strong>Para adicionar funcionalidade para a adição um novo desejo:</strong></p>
<ol>
<li><a id="addWishButton" name="addWishButton"></a>Implementar o botão Adicionar Desejo. No arquivo <tt>editWishList.php</tt>, adicione o seguinte código HTML abaixo do bloco PHP:
<pre class="examplecode">
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form name="addNewWish" action="editWish.php">
&lt;input type="submit" value="Add Wish">
&lt;/form>
&lt;/body&gt;
&lt;/html&gt;</pre>
<p class="notes"><b>Observação: </b>você pode ignorar as advertências do validador HTML.</p>
<p>O form contém um campo de entrada "Adicionar Desejo" do tipo <tt>submit</tt>. Este campo implementa o botão "Adicionar desejo". Quando o usuário clica em Adicionar Desejo, ele é redirecionado para a página <tt>editWish.php</tt>. Como nenhum dado é transferido usando esse form, nenhum método de Solicitação do Servidor é usado.</p>
</li>
<li>Adicione uma tabela acima do form addNewWish que exibe os desejos existentes para o wisher. O código é semelhante ao código <tt>wishlist.php</tt>.
<p><strong>Para o banco de dados MySQL:</strong></p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;<br> &lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;<br> &lt;?php<br> require_once(&quot;Includes/db.php&quot;);<br> $wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);<br> $result = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);<br> while($row = mysqli_fetch_array($result)) {<br>
echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row['description']) . &quot;&lt;/td&gt;&quot;;<br>
echo &quot;&lt;td&gt;&quot; . htmlentities($row['due_date']) . &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;<br> }<br> ?&gt;<br>&lt;/table&gt;</pre>
<p><b>Para o banco de dados Oracle:</b></p>
<pre class="examplecode">&lt;table border=&quot;black&quot;&gt;
&lt;tr&gt;&lt;th&gt;Item&lt;/th&gt;&lt;th&gt;Due Date&lt;/th&gt;&lt;/tr&gt;
&lt;?php
require_once(&quot;Includes/db.php&quot;);
$wisherID = WishDB::getInstance()-&gt;get_wisher_id_by_name($_SESSION[&quot;user&quot;]);
$stid = WishDB::getInstance()-&gt;get_wishes_by_wisher_id($wisherID);
while ($row = oci_fetch_array($stid)) {<br> echo &quot;&lt;tr&gt;&lt;td&gt;&quot; . htmlentities($row['DESCRIPTION']) . &quot;&lt;/td&gt;&quot;;<br>
echo &quot;&lt;td&gt;&quot; . htmlentities($row['DUE_DATE']) . &quot;&lt;/td&gt;&lt;/tr&gt;\n&quot;;
}
?&gt;
&lt;/table&gt;</pre>
</li>
<li>Crie o arquivo PHP <tt>editWish.php</tt> na pasta Código-fonte.</li>
<li><a id="EmptyAddWishForm" name="EmptyAddWishForm"></a>Em <tt>editWish.php</tt>, implemente o form Adicionar Desejo. Digite ou cole o seguinte código abaixo do bloco &lt;? php?>:
<pre class="examplecode">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form name=&quot;editWish&quot; action=&quot;editWish.php&quot; method=&quot;POST&quot;&gt;<br> Describe your wish: &lt;input type=&quot;text&quot; name=&quot;wish&quot; value=&quot;&quot; /&gt;&lt;br/&gt;<br> When do you want to get it? &lt;input type=&quot;text&quot; name=&quot;dueDate&quot; value=&quot;&quot;/&gt;&lt;br/&gt;<br> &lt;input type=&quot;submit&quot; name=&quot;saveWish&quot; value=&quot;Save Changes&quot;/&gt;<br> &lt;input type=&quot;submit&quot; name=&quot;back&quot; value=&quot;Back to the List&quot;/&gt;
&lt;/form>
&lt;/body&gt;
&lt;/html&gt; </pre></li>
</ol>
<p>O form Adicionar Desejo contém:</p>
<ul>
<li>Dois campos de texto vazios para inserção da descrição e a data de vencimento do desejo.</li>
<li>Textos a serem impressos ao lado dos campos de entrada.</li>
<li>Um campo <tt>submit</tt> que representa um botão Salvar Alterações </li>
<li>Um campo <tt>submit</tt> que representa um botão Voltar à Lista para retornar à página <tt>editWishList.php</tt> </li>
</ul>
<p>Quando o botão Adicionar Desejo é pressionado, o form envia os dados inseridos para a mesma página, <tt>editWish.php</tt>, usando o método de Solicitação POST. </p>
<h3><a id="inputFormAfterunsuccessfulSave" name="inputFormAfterunsuccessfulSave"></a>Reexibindo a Data de Vencimento Após um Envio Malsucedido </h3>
<p>Se o usuário não preencher uma descrição no form Adicionar Desejo, uma mensagem de erro é exibida e o usuário retorna à página <tt>editWish.php</tt>. Quando o usuário retorna ao <tt>editWish.php</tt>, o form Adicionar Desejo deve mostrar o valor de <tt>dueDate</tt> caso ele tenha sido inserido. Na implementação atual do form, ambos os campos estão sempre vazios. Para manter os valores inseridos, você precisa salvar os dados do novo desejo em um array. O array consistirá em dois elementos chamados <tt>description</tt> e <tt>due-date</tt>. Em seguida, você precisa alterar o form Adicionar Desejo, para que ele recupere o valor do campo <tt>dueDate</tt> do array.</p>
<p><strong>Observação: </strong>O código que recarrega o form de entrada, caso nenhuma descrição tenha sido inserida, é incluído no <a href="#validateAndEnterWishToDatabase">código que valida os dados e insere-os no banco de dados</a>. Esse código não é descrito nesta seção. O código desta seção preserva somente o valor de <tt>dueDate</tt> para que ele seja exibido se o form for recarregado.</p>
<p><strong>Para reexibir o form de entrada depois que o usuário o envia sem êxito:</strong></p>
<ol><li>Digite ou cole o bloco de código seguinte dentro do elemento HTML &lt;body> de <tt>editWish.php</tt>, diretamente acima do form de entrada:
<pre class="examplecode">&lt;?php
if ($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;)<br> $wish = array(&quot;description&quot; =&gt; $_POST[&quot;wish&quot;], <br> &quot;due_date&quot; =&gt; $_POST[&quot;dueDate&quot;]);<br>else<br> $wish = array(&quot;description&quot; =&gt; &quot;&quot;, <br> &quot;due_date&quot; =&gt; &quot;&quot;);
?&gt; </pre>
<p>O código verifica qual método de Solicitação de Servidor foi usado para transferir os dados e cria um array chamado $wish. Se o método for POST, o que significa que o form de entrada é exibido depois de uma tentativa malsucedida de salvar um desejo com uma descrição vazia, os elementos <tt>description</tt> e <tt>due_date</tt> aceitam os valores transferidos pelo POST. </p>
<p>Se o método não for POST, o que significa que o form de entrada é exibido pela primeira vez depois do redirecionamento do form para a página <tt>editWishList.php</tt>, os elementos <tt>description</tt> e <tt>due_date</tt> ficam vazios.</p>
<p class="notes"> <strong>Observação:</strong> Em ambos os casos a descrição fica vazia. Há diferença apenas em <tt>dueDate</tt>. </p></li>
<li>Atualize o form Adicionar Desejo para que os valores de seus campos de entrada sejam recuperados do array <tt>$wish</tt>. Substitua as linhas no form Adicionar Desejo:
<pre class="examplecode">Describe your wish: &lt;input type=&quot;text&quot; name=&quot;wish&quot; value=&quot;&quot; /&gt;&lt;br/&gt;
When do you want to get it? &lt;input type=&quot;text&quot; name=&quot;dueDate&quot; value=&quot;&quot;/&gt;&lt;br/&gt;</pre>
com:
<pre class="examplecode">Describe your wish: &lt;input type=&quot;text&quot; name=&quot;wish&quot; value=&quot;&lt;?php echo $wish['description'];?&gt;&quot; /&gt;&lt;br/&gt;
When do you want to get it? &lt;input type=&quot;text&quot; name=&quot;dueDate&quot; value=&quot;&lt;?php echo $wish['due_date']; ?&gt;&quot;/&gt;&lt;br/&gt;</pre></li></ol>
</div>
<h2><a id="logonVerification" name="logonVerification"></a>Verificando o Log-in do Wisher </h2>
No arquivo <tt>editWish.php</tt>, insira o seguinte código de manipulação de sessão dentro do bloco &lt;? php?> na parte superior do arquivo:
<pre class="examplecode">session_start();
if (!array_key_exists("user", $_SESSION)) {
header('Location: index.php');
exit;
}</pre>
O código:
<ul>
<li>Abre o array $_SESSION para recuperar dados.</li>
<li>Verifica se o array $_SESSION contém um elemento com o identificador "user".</li>
<li>Se a verificação falhar, o que significa que o usuário não está conectado, redireciona a aplicação para a página inicial index.php e cancela o processamento de PHP. </li>
</ul>
<p>Para verificar se a manipulação da sessão funciona corretamente, execute o arquivo editWish.php no IDE. A página index.php é aberta, pois nenhum usuário foi transferido para o editWish.page usando uma sessão. </p>
<h2 id="insert-new-wish">Inserindo o Novo Desejo no Banco de Dados</h2>
<p>Depois que o usuário envia um novo desejo, a aplicação precisa adicionar o desejo ao banco de dados "desejos". Para ativar essa funcionalidade, adicione o seguinte código à aplicação:</p>
<ul>
<li>Adicione mais duas funções auxiliares à classe <tt>WishDB</tt> em <tt>db.php</tt>.
<ul><li>Uma função adiciona um novo registro à tabela de desejos.</li><li> A outra função converte as datas para o formato aceito pelo servidor de bancos de dados MySQL. </li></ul></li>
<li>Adicione o código ao <tt>editWish.php</tt>, que usará as novas funções auxiliares em <tt>WishDB</tt> para inserir o novo desejo no banco de dados.</li>
</ul>
<h3 id="add-insert-wish">Adicionando a função insert_wish ao WishDB</h3>
<p>Essa função requer o wisher ID, uma descrição do novo desejo e a data de vencimento do desejo como parâmetros de entrada e insere esses dados no banco de dados em um novo registro. A função não retorna valores. </p>
<p>Abra o <tt>db.php </tt> e adicione a função <tt>insert_wish</tt> na classe <tt>WishDB </tt>:</p>
<p><b>Para o banco de dados MySQL</b></p>
<pre class="examplecode">function insert_wish($wisherID, $description, $duedate){
$description = $this-&gt;real_escape_string($description);<br> if ($this->format_date_for_sql($duedate)==null){<br> $this->query("INSERT INTO wishes (wisher_id, description)" .<br> " VALUES (" . $wisherID . ", '" . $description . "')");<br> } else<br> $this-&gt;query(&quot;INSERT INTO wishes (wisher_id, description, due_date)&quot; . <br> &quot; VALUES (&quot; . $wisherID . &quot;, '&quot; . $description . &quot;', &quot; <br> . $this-&gt;format_date_for_sql($duedate) . &quot;)&quot;);
}</pre>
<p><b>Para o banco de dados Oracle:</b></p>
<pre class="examplecode">function insert_wish($wisherID, $description, $duedate) {
$query = "INSERT INTO wishes (wisher_id, description, due_date) VALUES (:wisher_id_bv, :desc_bv, to_date(:due_date_bv, 'YYYY-MM-DD'))";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':wisher_id_bv', $wisherID);
oci_bind_by_name($stid, ':desc_bv', $description);
oci_bind_by_name($stid, ':due_date_bv', $this->format_date_for_sql($duedate));
oci_execute($stid);
oci_free_statement($stid);
}</pre>
<p>O código chama a função format_date_for_sql para converter a data de vencimento inserida para um formato que pode ser processado pelo servidor do banco de dados. Em seguida, a consulta INSERT INTO wishes (wisher_id, description, due_date) é executada para inserir o novo desejo no banco de dados.</p>
<h3 id="add-format-date-for-sql">Adicionando a função format_date_for_sql ao WishDB</h3>
<p>Adicione a função <tt>format_date_for_sql</tt> à classe <tt>WishDB</tt> em <tt>db.php</tt>. A função exige uma string com uma data como parâmetro de entrada. A função retorna uma data no formato que pode ser processado pelo servidor de banco de dados ou <tt>null</tt> se a string de entrada estiver vazia.</p>
<p class="notes"><b>Observação:</b> a função nesse exemplo usa a função <tt>date_parse</tt> PHP. Essa função funciona apenas com datas em Inglês, como December 25, 2010 e apenas com algarismos arábicos. Um site profissional deve usar um selecionador de data.</p>
<strong>Para o banco de dados MySQL:</strong>
<pre class="examplecode">function format_date_for_sql($date){<br> if ($date == &quot;&quot;)<br> return null;<br> else {<br> $dateParts = date_parse($date);<br> return $dateParts[&quot;year&quot;]*10000 + $dateParts[&quot;month&quot;]*100 + $dateParts[&quot;day&quot;];<br> }<br>
}</pre>
<p><strong>Para o banco de dados Oracle:</strong></p>
<pre class="examplecode">function format_date_for_sql($date){
if ($date == "")
return null;
else {
$dateParts = date_parse($date);
return $dateParts['year']*10000 + '-' + $dateParts['month']*100 + '-' + $dateParts['day'];
}
}</pre>
<p>Se a string de entrada estiver vazia, o código retorna NULL (nulo). Caso contrário, a função <tt>date_parse</tt> interna é chamada com <tt>$date</tt> como parâmetro de entrada. A função <tt>date_parse</tt> retorna um array que consiste em três elementos chamados <tt>$dateParts["ano"]</tt>, <tt>$dateParts["mês"]</tt> e <tt>$dateParts["dia"]</tt>. A string de saída final é construída com base nos elementos do array <tt>$dateParts</tt>. </p>
<p class="alert"><strong>Importante:</strong> a função <tt>date_parse</tt> reconhece apenas datas em Inglês. Por exemplo, faz parsing para "February 2, 2016" mas não para "2 Unora, 2016".</p>
<!--Note to translators: Please replace "2 Unora, 2016" with a date in your own language. -->
<p class="notes"><strong>Observação para usuários do banco de dados Oracle: </strong> o único formato necessário é que o formato da data na instrução <tt>return $dateParts...</tt> coincida com o formato da data na função SQL <tt>to_date</tt> na consulta <tt>insert_wish</tt>.</p>
<h3 id="validateAndEnterWishToDatabase">Inserindo o Registro do Novo Desejo no Banco de Dados </h3>
<p>Agora que você desenvolveu as funções auxiliares, adicione o código para validar os novos dados do desejo e insira os dados para o banco de dados, se eles forem válidos. Se os dados não forem válidos, o código deve recarregar o form Adicionar Desejo. Se os dados forem inválidos porque nenhuma descrição foi inserida, mas existe uma data de vencimento, a data de vencimento é salva e reexibida quando o form é recarregado, graças ao código que você <a href="#inputFormAfterunsuccessfulSave">desenvolveu anteriormente</a>.</p>
Insira o código seguinte no bloco &lt;? php?> de <tt>editWish.php</tt>, abaixo do código de tratamento de sessão:
<pre class="examplecode">require_once("Includes/db.php");
$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION['user']);
$wishDescriptionIsEmpty = false;
if ($_SERVER['REQUEST_METHOD'] == "POST"){
if (array_key_exists("back", $_POST)) {
header('Location: editWishList.php' );
exit;
} else
if ($_POST['wish'] == &quot;&quot;) {
$wishDescriptionIsEmpty = true;
}
else {
WishDB::getInstance()->insert_wish($wisherID, $_POST['wish'], $_POST['dueDate']);
header('Location: editWishList.php' );
exit;
}
}
</pre>
<p>O código realiza as seguintes funções:</p>
<ul>
<li>Permite o uso do arquivo <tt>db.php</tt></li>
<li>Obtém ou cria uma instância da classe <tt>WishDB</tt> </li>
<li>Recupera o wisher ID que está tentando adicionar um desejo chamando a função <tt>get_wisher_id_by_name</tt></li>
<li>Inicializa o flag <tt>$wishDescriptionIsEmpty</tt>, que será usado mais tarde para mostrar mensagens de erro.</li>
<li>Verifica se o método de Solicitação é POST, o que significa que os dados foram enviados do form para inserir os dados do desejo na própria página <tt>editWish.php</tt>. </li>
<li>Verifica se o array <tt>$_POST</tt> contém um elemento com a chave "back"</li>
</ul>
<p>Se o array <tt>$_POST</tt> contém um elemento com a chave "back", o botão Voltar à Lista foi pressionado antes de o form ser enviado. Nesse caso, o código redireciona o usuário para o <tt>editWishList.php</tt> sem salvar os dados que foram inseridos nos campos e para o processamento de PHP. </p>
<p>Se o array $_POST <em>não</em> contiver um elemento com a chave "back", é porque os dados foram enviados quando o botão Salvar Alterações foi pressionado. Nesse caso, o código valida se a descrição do desejo está preenchida. O código faz isso, verificando se o elemento com a chave "wish" no array $_POST está vazio e, se a chave estiver vazia, altera o flag $wishDescriptionIsEmpty para verdadeiro. Observe que como nenhum código adicional é executado no bloco PHP, o form Adicionar Desejo é recarregado.</p>
<p>Se o botão Voltar à Lista não foi pressionado e a descrição do desejo foi preenchida, o código chama a função <tt>insert_wish</tt> com o wisher ID e a data de vencimento do desejo como os parâmetros de entrada. Em seguida, o código redireciona o usuário para a página <tt>editWishList.php</tt> e para o processamento de PHP.</p>
<h3><a name="displayingErrorMessages"></a>Exibindo Mensagens de Erro</h3>
Se o usuário tentar salvar um desejo mas não tiver inserido uma descrição para ele, deve ser exibida uma mensagem de erro.<br> Insira o seguinte bloco &lt;? php?> dentro do form de entrada HTML, abaixo do campo de entrada "Descreva seu desejo":
<pre class="examplecode">&lt;?php<br> if ($wishDescriptionIsEmpty) echo &quot;Please enter description&lt;br/&gt;&quot;;<br>?&gt;</pre>
A mensagem de erro será exibida se o flag <tt>$wishDescriptionIsEmpty</tt> for verdadeira. O flag será processado durante a validação do form de entrada.
<h2><a id="backToIndex" name="backToIndex"></a>Retornando à Página Inicial index.php </h2>
O usuário deve poder retornar à página inicial da aplicação a qualquer momento pressionando um botão. <br> Para implementar essa funcionalidade, insira o seguinte form de entrada HTML no arquivo <tt>editWishList.php</tt>, antes da tag de fechamento &lt;/body>:
<pre class="examplecode">&lt;form name=&quot;backToMainPage&quot; action=&quot;index.php&quot;&gt;<br>&lt;input type=&quot;submit&quot; value=&quot;Back To Main Page&quot;/&gt;<br>&lt;/form&gt;</pre>
O form redireciona o usuário para a página inicial index.php quando o botão Voltar à Página Principal é pressionado.
<h2><a name="testingAddWishFunctionality"></a>Testando a Funcionalidade Adicionar Desejo </h2>
<ol>
<li>Execute a aplicação. Na página <tt>index.php</tt>, preencha os campos: no campo Nome do Usuário, insira "Tom", e no campo Senha, insira "tomcat".<br> <img alt="Usuário efetua o Log-in para Editar Lista de Desejos" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson6/user-logon-to-edit-wish-list.png"> </li>
<li>Pressione o botão Editar Minha Lista de Desejos. A página <tt>editWishList.php</tt> abre. <br> <img alt="Editar Lista de Desejos com o botão Adicionar adicionado" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson6/edit-wish-list-add-wish.png"></li>
<li>Pressione o botão Voltar à Página Principal. A página <tt>index.php</tt> abre. </li>
<li>Faça log-in como Tom e pressione o botão Editar Minha Lista de Desejos novamente. A página <tt>editWishList.php</tt> abre. </li>
<li>Pressione o botão Adicionar Desejo. A página <tt>editWish.php</tt> abre. Preencha o form.<br> <img alt="O form para um novo desejo é preenchido" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson6/new-wish.png"> <br> Pressione o botão Voltar à Lista. A página <tt>editWishList.php</tt> abre, mas o desejo inserido não foi adicionado.</li>
<li>Pressione o botão Adicionar Desejo novamente. A página <tt>editWish.php</tt> abre. Preencha a data de vencimento e deixe a descrição vazia. Pressione o botão Salvar Alterações. A página <tt>editWish.php</tt> exibe o form de entrada com uma mensagem de erro e a data de vencimento preenchida. </li>
<li>Pressione o botão Adicionar Desejo novamente. A página <tt>editWish.php</tt> abre. Preencha o form e pressione o botão Salvar Alterações. A página <tt>editWishList.php</tt> mostra uma lista de desejos atualizada. <br> <img alt="O novo desejo é adicionado à Lista de Desejos" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson6/edit-wish-list-updated.png"></li>
</ol>
<h2><a name="lessonResultSourceCode"></a>O código-fonte da Aplicação após a Lição Atual está Concluído </h2>
<p>Usuários MySQL: clique <a href="https://netbeans.org/files/documents/4/1932/lesson6.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição estiver concluída.</p>
<p>Usuários do banco de dados Oracle: clique <a href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson6.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição for concluída.</p>
<h2><a name="nextSteps"></a>Próximas Etapas</h2>
<p><a href="wish-list-lesson5.html">&lt;&lt; Lição anterior</a><br> <br> <a href="wish-list-lesson7.html">Próxima lição >></a><br> <br> <a href="wish-list-tutorial-main-page.html">Voltar à página principal do Tutorial</a></p>
<br>
<div class="feedback-box" ><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20PHP%20Wish%20List%20CRUD%206:%20Writing%20New%20DB%20Entry">Enviar Feedback neste Tutorial</a></div>
<br style="clear:both;" >
<p>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, <a href="../../../community/lists/top.html">junte-se à lista de correspondência users@php.netbeans.org</a>.
<p><a href="wish-list-tutorial-main-page.html"></a>
<p><a href="../../trails/php.html">Voltar à Trilha do Aprendizado PHP</a></p>
</body>
</html>