blob: 68fa444f5441dcf232aef8da61bf57db4a1497ee [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.
//
= Criando uma Aplicação Orientada pelo Banco de Dados com o PHP
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando uma Aplicação Orientada pelo Banco de Dados com o PHP
= Lição 7: Atualizando e Deletando Entradas no Banco de Dados
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Lição 7: Atualizando e Deletando Entradas no Banco de Dados - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Lição 7: Atualizando e Deletando Entradas no Banco de Dados
1. link:wish-list-tutorial-main-page.html[+Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Página Principal+]
2.
Criando o Banco de Dados
1. link:wish-list-lesson1.html[+Criando um Banco de Dados MySQL+]
2. link:wish-list-oracle-lesson1.html[+Criando Tabelas do Banco de Dados Oracle+]
3.
link:wish-list-lesson2.html[+Projetando a Aplicação. Lendo o Banco de Dados+]
4. link:wish-list-lesson3.html[+Criando um Novo Usuário de Aplicação+]
5. link:wish-list-lesson4.html[+Otimizando o Código+]
6. link:wish-list-lesson5.html[+Adicionando Segurança. Implementando o Log-in de Usuário da Aplicação+]
7. link:wish-list-lesson6.html[+Adicionando um Novo Desejo ao Banco de Dados+]
8.
*=> Atualizando e Deletando Entradas no Banco de Dados*
9. link:wish-list-lesson8.html[+Melhorando a Aparência da Aplicação Usando a Tecnologia CSS+]
10. link:wish-list-lesson9.html[+Implantando a Aplicação em um Servidor Web Remoto+]
image::images/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"]
Nesta lição, você expandirá a funcionalidade da aplicação com duas funcionalidades:
Para implementar essas funcionalidades, edite os arquivos ``editWishList.php`` e ``editWish.php`` . Crie também um novo arquivo chamado ``deleteWish.php`` .
image::images/page-flow-diagram-l7.png[]
O documento atual é uma parte do tutorial Criando uma Aplicação CRUD 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/1932/lesson6.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-lesson6.zip[+aqui+] para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior for concluída.
== Editando um Desejo
A funcionalidade suporta o seguinte caso de uso:
* Na página ``editWishList.php`` , o usuário pressiona o botão Editar à direita de um desejo. A página ``editWish.php`` com os dados do desejo selecionado abre.
* O usuário altera a descrição e/ou a data de vencimento do desejo e pressiona o botão Salvar Alterações.
* Se a descrição _não_ for preenchida, uma mensagem de erro é exibida e o usuário retorna para a página ``editWish.php`` .
* Se a descrição for preenchida, a aplicação retorna à página ``editWishList.php`` , onde o desejo é atualizado.
A implementação consiste nas seguintes etapas:
* <<addEditButton,Adicionar um botão Editar na página editWishList>>
* <<wishArrayUpdate,Na página editWish.php, atualizar o array $wish para armazenar os dados do desejo>>
* <<updateInputForm,Atualizar o form de entrada na página editWish.php>>
* <<updateWishRecord,Validar os dados enviados e atualizar o desejo no banco de dados>>
=== Implementando o Botão Editar
Em ``editWishList.php`` , uma tabela com os desejos de um wisher é implementada por um loop (uma instrução ``while`` ) que exibe linhas com desejos enquanto os desejos são selecionados no banco de dados. Adicione um botão Editar como a célula da extrema direita em uma linha.
1. Para transferir o ID de um desejo usando o form de entrada HTML, armazene-o em uma variável. Insira a seguinte linha de código no fim do loop ``while`` :
[source,java]
----
while ($row = ...) {echo ...echo ...*$wishID = $row["id"];*}
?>
----
2. Implemente o botão Editar. Adicione outra célula à tabela antes de fechar a tag </table> com o form editWish. Esse form contém um componente botão e um componente oculto que envia o valor ``$wishID`` ao clicar no botão. (O código para o banco de dados MySQL é mostrado, mas o código adicionado é o mesmo, no mesmo local, para o banco de dados Oracle).
[source,php]
----
Hello <?php echo $_SESSION["user"]; ?><br/><table border="black"><tr><th>Item</th><th>Due Date</th></tr><?phprequire_once("Includes/db.php");$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);$result = WishDB::getInstance()->get_wishes_by_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);?>
*<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo ``$wish`` ID; ?>">
<input type="submit" name="editWish" value="Edit">
</form>
</td>*</table>
----
3. Altere o loop ``while`` para usar a link:http://www.php.net/manual/en/control-structures.alternative-syntax.php[+sintaxe alternativa+]. Isso facilita a execução de blocos HTML dentro do loop ``while`` . Na sintaxe alternativa do loop ``while`` , as chaves de abertura { são substituídas por dois-pontos : e as chaves de fechamento } são substituídas pela instrução ``endwhile;`` . Substitua as chaves de abertura por dois-pontos, delete as chaves de fechamento e adicione um novo bloco PHP antes da tag de fechamento </table> com a instrução ``endwhile;`` . Isso incorpora a nova célula da tabela para o loop ``while`` . Mova o código instrução livre/resultado para após a instrução ``endwhile.`` (O código para o MySQL é exibido novamente, mas o código muda e o local é o mesmo para o banco de dados da Oracle).
[source,php]
----
while ($row = mysqli_fetch_array($result))[.line-through]#{#*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td></tr>\n";[.line-through]# }mysqli_free_result($result);#?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo ``$wish`` ID; ?>">
<input type="submit" name="editWish" value="Edit">
</form>
</td>
* <?php
endwhile;
mysqli_free_result($result);
?>*
</table>
----
4.
Conserte a sintaxe da linha da tabela. Mova os caracteres de final de linha </tr>\n da instrução de exibição de data de vencimento para a nova instrução logo acima do ``endwhile;`` .
[source,php]
----
while ($row = mysqli_fetch_array($result))*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td>[.line-through]#</tr>\n#";?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo ``$wish`` ID; ?>">
<input type="submit" name="editWish" value="Edit">
</form>
</td>
<?php
*echo "</tr>\n";*
endwhile;
mysqli_free_result($result);
?>
</table>
----
5.
A tabela inteira, incluindo o form com o botão Editar dentro do loop ``while `` , agora tem a seguinte aparência:
*Para o banco de dados MySQL:*
[source,php]
----
<table border="black">
<tr><th>Item</th><th>Due Date</th></tr>
<?php
require_once("Includes/db.php");
$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
$result = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
while($row = mysqli_fetch_array($result)):
echo "<tr><td>" . htmlentities($row['description']) . "</td>";
echo "<td>" . htmlentities($row['due_date']) . "</td>";
$wishID = $row["id"];
?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="editWish" value="Edit"/>
</form>
</td>
<?php
echo "</tr>\n";
endwhile;
mysqli_free_result($result);
?>
</table>
----
*Para banco de dados Oracle:*
[source,php]
----
<table border="black">
<tr><th>Item</th><th>Due Date</th></tr>
<?php
require_once("Includes/db.php");
$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
$stid = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
while ($row = oci_fetch_array($stid)):
echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";
echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td>";
$wishID = $row["ID"];
?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="editWish" value="Edit"/>
</form>
</td>
<td>
<form name="deleteWish" action="deleteWish.php" method="POST">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="deleteWish" value="Delete"/>
</form>
</td>
<?php
echo "</tr>\n";
endwhile;
oci_free_statement($stid);
?>
</table>
----
=== Expandindo o Array ``$wish``
Quando o botão Editar é pressionado na página ``editWishList.php`` , o wisher ID selecionado é transferido para a página ``editWish.php`` usando o método de Solicitação de Servidor GET. Para armazenar o wisher ID, você precisa adicionar um novo elemento ao array ``$wish`` .
Como acontece quando um novo desejo é adicionado, o form de entrada pode ser acessado da página ``editWishList.php`` e da página ``editWish.php`` após uma tentativa malsucedida de salvar. Os casos são distinguidos pelo método de Solicitação de Servidor por meio do qual os dados são transferidos. O GET indica que o form é exibido quando o usuário chega pela primeira vez à página, pressionando Editar Desejo. O POST indica que o usuário é redirecionado para o form após tentar salvar um desejo sem uma descrição.
Em ``editWish.php`` , substitua o bloco PHP na tag HTML <body> acima do form de entrada ``EditWish`` com o código expandido para o array ``$wish`` .
*Para o banco de dados MySQL:*
[source,php]
----
<?phpif ($_SERVER["REQUEST_METHOD"] == "POST")$wish = array("id" => $_POST["wishID"], "description" =>
$_POST["wish"], "due_date" => $_POST["dueDate"]);else if (array_key_exists("wishID", $_GET))$wish = mysqli_fetch_array(WishDB::getInstance()->get_wish_by_wish_id($_GET["wishID"]));else$wish = array("id" => "", "description" => "", "due_date" => "");?>
----
*Para o banco de dados Oracle:*
[source,php]
----
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST")
$wish = array("id" => $_POST["wishID"], "description" =>
$_POST["wish"], "due_date" => $_POST["dueDate"]);
else if (array_key_exists("wishID", $_GET)) {
$stid = WishDB::getInstance()->get_wish_by_wish_id($_GET["wishID"]);
$row = oci_fetch_array($stid, OCI_ASSOC);
$wish = array("id" => $row["ID"], "description" =>
$row["DESCRIPTION"], "due_date" => $row["DUE_DATE"]);
oci_free_statement($stid);
} else
$wish = array("id" => "", "description" => "", "due_date" => "");
?>
----
O código inicializa o array ``$wish`` com três elementos: ``id`` , ``description`` e ``due_date`` . Os valores desses elementos dependem do método de Solicitação de Servidor. Se o método de Solicitação de Servidor for POST, os valores serão recebidos do form de entrada. Caso contrário, se o método de Solicitação de Servidor for GET e o array $_GET contiverem um elemento com a chave "wishID", os valores serão recuperados do banco de dados pela função get_wish_by_wish_id. Finalmente, se o método de Solicitação do Servidor não for POST nem GET, o que significa que o caso de uso Adicionar Novo Desejo acontece, os elementos ficam vazios.
O código precedente cobre os casos de criação e edição de desejos. Agora você precisa atualizar o form de entrada para que ele possa ser usado por ambos os casos.
=== Atualizando o Form de Entrada HTML
Atualmente, o form de entrada funciona quando você quer criar um novo desejo e não há id de desejo. Para que o form funcione ao editar um desejo existente, é necessário adicionar um campo oculto para transferir o ID de um desejo. O valor do campo oculto deve ser recuperado no array $wish. O valor deve ser uma string vazia durante a criação de um novo desejo. Se o desejo for editado, o valor do campo oculto deve ser alterado para o wisher ID. Para criar esse campo oculto, adicione a linha seguinte à parte superior do form de entrada ``EditWish`` em ``editWish.php`` :
[source,php]
----
<input type="hidden" name="wishID" value="<?php echo ``$wish`` ["id"];?>" />
----
=== Atualizando o Desejo no Banco de Dados
Agora você precisa atualizar o código que verifica os dados de entrada e insere o desejo no banco de dados. O código atual não distingue entre a criação de um novo caso de desejo e a atualização de um existente. Na implementação atual, um novo registro sempre é adicionado ao banco de dados porque o código não verifica o valor do wisher ID transferido do form de entrada.
Você precisa adicionar as seguintes funções:
* Se o elemento transferido "wishID" for uma string vazia, crie um novo desejo.
* Caso contrário, se o elemento "wishID" não for uma string vazia, atualize o desejo.
*Para atualizar o editWish.php para que ele verifique se um desejo é novo e atualizá-lo caso não seja novo:*
1. Adicione a função ``update_wish`` ao ``db.php`` .
*Para o banco de dados MySQL:*
[source,java]
----
public function update_wish($wishID, $description, $duedate){
$description = $this->real_escape_string($description);if ($duedate==''){$this->query("UPDATE wishes SET description = '" . $description . "',due_date = NULL WHERE id = " . $wishID);} else$this->query("UPDATE wishes SET description = '" . $description ."', due_date = " . $this->format_date_for_sql($duedate). " WHERE id = " . $wishID);}
----
*Para o banco de dados Oracle:*
[source,java]
----
public function update_wish($wishID, $description, $duedate) {
$query = "UPDATE wishes SET description = :desc_bv, due_date = to_date(:due_date_bv,
'YYYY-MM-DD') WHERE id = :wish_id_bv";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':wish_id_bv', $wishID);
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);
}
----
2.
Adicione a função ``get_wish_by_wish_id`` ao ``db.php`` .
*Para o banco de dados MySQL:*
[source,java]
----
public function get_wish_by_wish_id ($wishID) {return $this->query("SELECT id, description, due_date FROM wishes WHERE id = " . $wishID);}
----
*Para o banco de dados Oracle:*
[source,java]
----
public function get_wish_by_wish_id($wishID) {
$query = "SELECT id, description, due_date FROM wishes WHERE id = :wish_id_bv";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':wish_id_bv', $wishID);
oci_execute($stid);
return $stid;
}
----
3. Na parte principal, no bloco PHP superior do ``editWish.php`` , adicione uma condição para a instrução`else` final. Esta é a instrução ``else`` que insere o desejo no banco de dados. Trocar para instrução ``else if`` :
[source,java]
----
else if ($_POST["wishID"]=="") {WishDB::getInstance()->insert_wish($wisherID, $_POST["wish"], $_POST["dueDate"]);header('Location: ``editWishList.php`` ' );exit;}
----
4. Digite ou cole outra instrução ``else if`` abaixo daquela que você acabou de editar:
[source,java]
----
else if ($_POST["wishID"]!="") {WishDB::getInstance()->update_wish($_POST["wishID"], $_POST["wish"], $_POST["dueDate"]);header('Location: ``editWishList.php`` ' );exit;
}
----
O código verifica se o elemento ``wishID`` no array ``$_POST`` não é uma string vazia, o que significa que o usuário foi redirecionado da página ``editWishList.php`` , pressionando o botão Editar, e se o usuário preencheu a descrição do desejo. Se a verificação for bem-sucedida, o código chamará a função ``update_wish`` com os parâmetros de entrada ``wishid`` , ``description`` e ``duedate. `` Esses parâmetros são recebidos do form de entrada HTML usando o método post. Depois que o ``update_wish`` for chamado, a aplicação será redirecionada para a página ``editWishList.php`` e o processamento de PHP será cancelado.
== Testando a Funcionalidade Editar Desejo
1. Execute a aplicação. Na página index.php, preencha os campos: no campo Nome do Usuário, digite "Tom", e no campo Senha, digite "tomcat".
image::images/user-logon-to-edit-wish-list.png[]
2. Pressione o botão Editar Minha Lista de Desejos. A página ``editWishList.php`` abre.
image::images/edit-wish-list-edit-wish.png[]
3. Clique em Editar ao lado de Icecream. A página ``editWish.php`` abre.
image::images/edit-wish.png[]
4. Edite os campos e pressione Voltar à Lista. A página ``editWishList.php`` abre, mas as alterações não são salvas.
5. Pressione Editar ao lado de Icecream. Limpe o campo Descreva seu desejo e pressione Salvar Alterações. Uma mensagem de erro é exibida.
image::images/editWishEmptyDescription.png[]
6. Insira Chocolate Icecream no campo Descreva seu desejo e pressione Salvar Alterações. A página ``editWishList.php`` abre com uma lista atualizada.
image::images/editWishListWishAdded.png[]
== Deletando um Desejo
Agora que você pode criar, ler e editar desejos, adicione um método para deletar um desejo.
*Para permitir que o usuário delete desejos:*
1. Adicione uma função `` delete_wish`` ao ``db.php`` .
*Para o banco de dados MySQL:*
[source,java]
----
function delete_wish ($wishID){$this->query("DELETE FROM wishes WHERE id = " . $wishID);}
----
*Para o banco de dados Oracle:*
[source,java]
----
public function delete_wish($wishID) {
$query = "DELETE FROM wishes WHERE id = :wish_id_bv";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':wish_id_bv', $wishID);
oci_execute($stid);
}
----
2. Crie um novo arquivo PHP chamado ``deleteWish.php`` e insira o seguinte código no <? php?>:
[source,java]
----
require_once("Includes/db.php");WishDB::getInstance()->delete_wish ($_POST["wishID"]);header('Location: ``editWishList.php`` ' );
----
O código permite o uso do arquivo ``db.php`` . Em seguida, ele chama a função ``delete_wish`` a partir de uma instância do WishDB, com o ``wishID`` como o parâmetro de entrada. Finalmente, a aplicação é redirecionada para a página ``editWishList.php`` .
3. Para implementar o botão Deletar, adicione outra célula da tabela ao loop ``while`` no ``editWishList.php`` , diretamente abaixo do código do bloco para o botão ``editWish`` . O form de entrada HTML contém um campo oculto para ``wishID`` e um botão de envio chamado Deletar. (O código para o banco de dados MySQL é mostrado, mas o código adicionado é o mesmo, no mesmo local, para o banco de dados Oracle).
[source,php]
----
while ($row = mysqli_fetch_array($result))*:*echo "<tr><td>" . htmlentities($row["description"]) . "</td>";echo "<td>" . htmlentities($row["due_date"]) . "</td>[.line-through]#</tr>\n#";?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo ``$wish`` ID; ?>">
<input type="submit" name="editWish" value="Edit">
</form>
</td>
*<td>
<form name="deleteWish" action="deleteWish.php" method="POST">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="deleteWish" value="Delete"/>
</form>
</td>*
<?php
echo "</tr>\n";
endwhile;
mysqli_free_result($result);
?>
</table>
----
A tabela inteira, incluindo o form com o botão Editar dentro do loop ``while `` , agora tem a seguinte aparência:
*Para o banco de dados MySQL:*
[source,php]
----
<table border="black">
<tr><th>Item</th><th>Due Date</th></tr>
<?php
require_once("Includes/db.php");
$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
$result = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
while($row = mysqli_fetch_array($result)):
echo "<tr><td>" . htmlentities($row['description") . "</td>";
echo "<td>" . htmlentities($row['due_date']) . "</td>";
$wishID = $row["id"];
?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="editWish" value="Edit"/>
</form>
</td>
<td>
<form name="deleteWish" action="deleteWish.php" method="POST">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="deleteWish" value="Delete"/>
</form>
</td>
<?php
echo "</tr>\n";
endwhile;
mysqli_free_result($result);
?>
</table>
----
*Para banco de dados Oracle:*
[source,php]
----
<table border="black">
<tr><th>Item</th><th>Due Date</th></tr>
<?php
require_once("Includes/db.php");
$wisherID = WishDB::getInstance()->get_wisher_id_by_name($_SESSION["user"]);
$stid = WishDB::getInstance()->get_wishes_by_wisher_id($wisherID);
while ($row = oci_fetch_array($stid)):
echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";
echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td>";
$wishID = $row["ID"];
?>
<td>
<form name="editWish" action="editWish.php" method="GET">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="editWish" value="Edit"/>
</form>
</td>
<td>
<form name="deleteWish" action="deleteWish.php" method="POST">
<input type="hidden" name="wishID" value="<?php echo $wishID; ?>"/>
<input type="submit" name="deleteWish" value="Delete"/>
</form>
</td>
<?php
echo "</tr>\n";
endwhile;
oci_free_statement($stid);
?>
</table>
----
== Testando a Funcionalidade Deletar Desejo
Para verificar se a funcionalidade foi implementada corretamente, pressione Deletar ao lado de qualquer item na página ``editWishList.php`` . O item não está mais na lista.
image::images/deleteWish.png[]
== O código-fonte da Aplicação após a Lição Atual está Concluído
Usuários MySQL: clique link:https://netbeans.org/files/documents/4/1933/lesson7.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 do banco de dados Oracle: clique link:https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson7.zip[+aqui+] para fazer o download do código-fonte que reflete o estado do projeto depois que a lição for concluída.
== Próximas Etapas
link:wish-list-lesson6.html[+<< Lição anterior+]
link:wish-list-lesson8.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%207:%20Updating%20and%20Deleting%20DB%20Entries[+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+]