Para implementar estes recursos, você edita os arquivos editWishList.php e editWish.php. Você também cria um novo arquivo denominado deleteWish.php.
O documento atual é uma parte do tutorial Criando um aplicativo CRUD no NetBeans IDE para PHP.
Código-fonte do aplicativo da lição anterior
Usuários do MySQL: clique aqui para baixar o 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 aqui para baixar o código-fonte que reflete o estado do projeto depois que a lição anterior estiver concluída.
Editando um desejo
A funcionalidade aceita 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 se 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, o aplicativo retorna à página editWishList.php, onde o desejo é atualizado.
Em editWishList.php, uma tabela com os desejos de um criador de lista de desejos é 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.
Para transferir o ID de um desejo através do formulário de entrada HTML, armazene-o em uma variável. Indique a seguinte linha de código no fim do loop while :
Implemente o botão Editar. Adicione outra célula à tabela antes da marca </table> de fechamento, com o formulário editWish. Este formulário contém um componente botão e um componente oculto que envia o valor de $wishID quando o botão é clicado. (É mostrado o código do banco de dados MySQL, mas o código adicionado é o mesmo e está no mesmo local no banco de dados Oracle.)
Altere o loop while para utilizar a sintaxe alternativa. Isso facilita a execução dos blocos HTML dentro do loop while. Na sintaxe de loop while alternativa, a chave de abertura ( { ) é substituída pelos dois pontos ( : ), e a chave de fechamento ( } ) é substituída pela instrução endwhile;. Substitua a chave de abertura pelos dois pontos, exclua a chave de fechamento e adicione um novo bloco PHP antes a marca </table> de fechamento com a instrução endwhile;. Isso incorpora a nova célula da tabela no loop while. Mova o código da instrução free result/free para depois da instrução endwhile;. (Novamente, é mostrado o código do MySQL, mas o código muda e o local é o mesmo do banco de dados Oracle.)
Corrija a sintaxe da linha da tabela. Mova os caracteres de fechamento de linha </tr>\n da instrução echo due date para a nova instrução echo logo abaixo de endwhile;.
Quando o botão Editar é pressionado na página editWishList.php, o ID do desejo selecionado é transferido para a página editWish.php através do método de solicitação de servidor GET. Para armazenar o id do desejo, você precisa adicionar um novo elemento à matriz $wish.
Como acontece quando um novo desejo é adicionado, o formulário de entrada pode ser acessado da página editWishList.php e da página editWish.php após uma tentativa mal-sucedida de salvar. Os casos são distinguidos pelo método de solicitação de servidor através do qual os dados são transferidos. GET indica que o formulário é exibido quando o usuário chega pela primeira vez à página, pressionando Editar desejo. POST indica que o usuário é redirecionado para o formulário após tentar salvar um desejo sem uma descrição.
No editWish.php, substitua o bloco PHP no HTML <body> acima do formulário de entrada EditWish pelo código expandido da matriz $wish.
O código inicializa a matriz $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 formulário de entrada. Caso contrário, se o método de solicitação de servidor for GET e a matriz $_GET contiver 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 para criação e edição de desejos. Agora você precisa atualizar o formulário de entrada de forma que possa ser usado por ambos os casos.
Atualizando o formulário de entrada HTML
Atualmente, o formulário de entrada funciona quando se deseja criar um novo desejo e não há nenhum id do desejo. Para que o formulário funcione quando se quer editar um desejo existente, é necessário adicionar um campo oculto para a transferência de ID de um desejo. O valor do campo oculto deve ser recuperado da matriz $wish. O valor deve ser uma sring vazia durante a criação de um novo desejo. Se o desejo for editado, o valor do campo oculto deve ser alterado para o ID do desejo. Para criar este campo oculto, adicione a linha seguinte à parte superior do formulário de entrada EditWish em editWish.php:
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 ID do desejo transferido do formulário 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 editWish.php de forma que ela verifique se um desejo é novo e atualizá-lo caso não seja novo:
Adicione a função update_wish a db.php.
No banco de dados MySQL:
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); }
No banco de dados Oracle:
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);
}
Adicione a função get_wish_by_wish_id a db.php.
No banco de dados MySQL:
public function get_wish_by_wish_id ($wishID) { return $this->query("SELECT id, description, due_date FROM wishes WHERE id = " . $wishID); }
No banco de dados Oracle:
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;
}
No bloco PHP superior principal de editWish.php, adicione uma condição ao final da instrução else. Esta é a instrução else que insere o desejo no banco de dados. Troque-a por uma instrução else if:
O código verifica se o elemento wishID na matriz $_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 chama a função update_wish com os parâmetros de entrada wishID, description e dueDate. Esses parâmetros são recebidos do formulário de entrada HTML através do método POST. Depois que update_wish for chamado, o aplicativo será redirecionado para a página editWishList.php e o processamento de PHP será cancelado.
Testando a funcionalidade Editar desejo
Execute o aplicativo. Na página index.php, preencha os campos: no campo Nome do usuário, indique "Tom", no campo Senha, indique "tomcat".
Pressione o botão Editar minha lista de desejos. A página editWishList.php se abre.
Clique em Editar ao lado de Sorvete. A página editWish.php se abre.
Edite os campos e pressione Voltar à lista. A página editWishList.php se abre mas as alterações não são salvas.
Pressione Editar ao lado de Sorvete Limpe o campo Descreva seu desejo e pressione Salvar alterações. Uma mensagem de erro é exibida.
Indique Sorvete de chocolate no campo Descreva seu desejo e pressione Salvar alterações. A página editWishList.php se abre com uma lista atualizada.
Excluindo um desejo
Agora que você pode criar, ler e editar desejos, adicione um método para excluir um desejo.
Para permitir que o usuário exclua desejos:
Adicione uma função delete_wish a db.php.
No banco de dados MySQL:
function delete_wish ($wishID){ $this->query("DELETE FROM wishes WHERE id = " . $wishID); }
No banco de dados Oracle:
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);
}
Crie um novo arquivo PHP chamado deleteWish.php e indique o seguinte código no <? 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 de WishDB, com wishID como o parâmetro de entrada. Finalmente, o aplicativo é redirecionado para a página editWishList.php.
Para implementar o botão Excluir, adicione outra célula da tabela HTML ao loop while em editWishList.php, diretamente abaixo do bloco de código do botão editWish. O formulário de entrada HTML contém um campo oculto para wishID e um botão de envio chamado Excluir. (É mostrado o código do banco de dados MySQL, mas o código adicionado é o mesmo e está no mesmo local no banco de dados Oracle.)
Para verificar se a funcionalidade é implementada corretamente, pressione Excluir ao lado de qualquer item na página editWishList.php. O item não está mais na lista.
O código-fonte do aplicativo após a lição atual está concluído
Usuários do MySQL: clique aqui para baixar o 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 aqui para baixar o código-fonte que reflete o estado do projeto depois que a lição estiver concluída.
Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes dos recursos de desenvolvimento em PHP no NetBeans IDE, junte-se à lista de usuários .