Para implementar esta funcionalidade, você edita o arquivo editWishList.php e cria a novo arquivo editWish.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.
Enviando um novo desejo
O usuário envia um novo desejo nas seguintes etapas:
O usuário faz logon, alterna para a página editWishList.php e pressiona o botão Adicionar desejo. A página editWish.php se abre, exibindo um formulário HTML.
No formulário HTML, o usuário indica uma descrição de um desejo e possivelmente a data quando deseja recebê-lo e pressiona o botão Salvar alterações.
Se um formulário for enviado sem uma descrição do desejo, o usuário retorna ao formulário para tentar novamente. Caso o usuário tenha enviado uma data de vencimento mas não uma descrição, essa data é reexibida quando o formulário é recarregado.
Para ativar esse procedimento para o usuário, adicione a seguinte funcionalidade ao aplicativo:
Componentes da interface do usuário, consistindo em um formulário HTML para adicionar desejos e um botão em editWishList.php que redireciona o usuário para o formulário.
Adicionando os componentes da interface do usuário
Para adicionar funcionalidade para adicionar um novo desejo:
Implementar o botão Adicionar desejo. No arquivo editWishList.php, adicione o código HTML a seguir abaixo do bloco PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form name="addNewWish" action="editWish.php">
<input type="submit" value="Add Wish"/>
</form>
</body>
</html>
Nota: você pode ignorar os avisos do validador HTML.
O formulário contém um campo de entrada "Add Wish" do tipo submit. O campo implementa o botão "Adicionar desejo". Quando o usuário clica em Adicionar desejo, ele é redirecionado para a página editWish.php. Como nenhum dado é transferido através desse formulário, nenhum método Solicitação do servidor é usado.
Adicione uma tabela acima do formulário addNewWish que exibe os desejos existentes do criador de lista de desejos. O código é semelhante a wishlist.php.
Crie o arquivo PHP editWish.php na pasta Arquivos de código-fonte.
Em editWish.php, implemente o formulário Adicionar desejo. Digite ou cole o seguinte código abaixo do bloco <? php?>:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form name="editWish" action="editWish.php" method="POST"> Descreva seu desejo: <input type="text" name="wish" value="" /><br/> Quando deseja recebê-lo? <input type="text" name="dueDate" value=""/><br/> <input type="submit" name="saveWish" value="Save Changes"/> <input type="submit" name="back" value="Back to the List"/>
</form>
</body>
</html>
O formulário Adicionar desejo contém:
Dois campos de texto vazios para indicar a descrição e a data de vencimento do desejo.
Os textos a serem impressos ao lado dos campos de entrada.
Um campo submit que representa um botão Salvar alterações
Um campo submit que representa um botão Voltar à lista para retornar à página editWishList.php
Quando o botão Adicionar desejo é pressionado, o formulário envia os dados indicados para a mesma página, editWish.php, através do método de solicitação POST.
Reexibindo a data de vencimento após um envio malsucedido
Se o usuário não preencher uma descrição no formulário Adicionar desejo, uma mensagem de erro é exibida e o usuário retorna à página editWish.php. Quando o usuário retorna a editWish.php, o formulário Adicionar desejo deve mostrar o valor de dueDate caso ele tenha sido indicado. Na implementação atual do formulário, ambos os campos estão sempre vazios. Para manter os valores indicados, você precisa salvar os dados do novo desejo em uma matriz. A matriz consistirá em dois elementos chamados description e due_date. Em seguida, você precisa alterar o formulário Adicionar desejo, para que ele recupere o valor do campo dueDate da matriz.
Observação: O código que recarrega o formulário de entrada, caso não tenha sido indicada uma descrição é incluído no código que valida os dados e insere-o no banco de dados. Esse código não é descrito nesta seção. O código desta seção preserva somente o valor de dueDate de forma que ele seja exibido se o formulário for recarregado.
Para reexibir o formulário de entrada depois que o usuário o envia sem êxito:
Digite ou cole o bloco de código seguinte dentro do elemento HTML <body> de editWish.php, diretamente acima do formulário de entrada:
O código verifica qual método de solicitação de servidor foi usado para transferir os dados e cria uma matriz chamada $wish. Se o método for POST, o que significa que o formulário de entrada é exibido depois de uma tentativa bem-sucedida de salvar um desejo com uma descrição vazia, os elementos description e due_date aceitam os valores transferidos através de POST.
Se o método não for POST, o que significa que o formulário de entrada é exibido pela primeira vez depois do redirecionamento do formulário para a página editWishList.php, os elementos description e due_date ficam vazios.
Observação: Em ambos os casos a descrição fica vazia. A diferença é somente em dueDate.
Atualize o formulário Adicionar desejo de forma que os valores de seus campos de entrada sejam recuperados da matriz $wish. Substitua as linhas no formulário Adicionar desejo:
Descreva seu desejo: <input type="text" name="wish" value="" /><br/>
Quando deseja recebê-lo? <input type="text" name="dueDate" value=""/><br/>
por:
Descreva seu desejo: <input type="text" name="wish" value="<?php echo $wish['description'];?>" /><br/>
Quando deseja recebê-lo? <input type="text" name="dueDate" value="<?php echo $wish['due_date']; ?>"/><br/>
Verificando o logon do criador de lista de desejos
No arquivo editWish.php, indique o seguinte código de manipulação de sessão dentro do bloco <? php?> na parte superior do arquivo:
session_start();
if (!array_key_exists("user", $_SESSION)) {
header('Location: index.php');
exit;
}
O código:
Abre a matriz $_SESSION para recuperar dados.
Verifica se a matriz $_SESSION contém um elemento com o identificador "user".
Se a verificação falhar, o que significa que o usuário não está conectado, redireciona o aplicativo para a página inicial index.php e cancela o processamento de PHP.
Para verificar se a manipulação da sessão funciona corretamente, execute o arquivo editWish.php no IDE. A página index.php se abre, pois nenhum usuário foi transferido para editWish.page através de uma sessão.
Inserindo o novo desejo no banco de dados
Depois que o usuário envia um novo desejo, o aplicativo precisa adicionar o desejo ao banco de dados "wishes". Para ativar essa funcionalidade, adicione o seguinte código ao aplicativo:
Adicione mais duas funções auxiliares à classe WishDB em db.php.
Uma função adiciona um novo registro à tabela de desejos.
A outra função converte as datas para o formato que o servidor de bancos de dados MySQL aceita.
Adicione o código a editWish.php que usará as novas funções auxiliares em WishDB para indicar o novo desejo no banco de dados.
Adicionando a função insert_wish a WishDB
Essa função requer o id do criador de lista de desejos, 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 quaisquer valores.
Abra db.php e adicione a função insert_wish na classe WishDB:
O código chama a função format_date_for_sql para converter a data de vencimento indicada para um formato que pode ser processado pelo servidor de banco de dados. Em seguida, a consulta INSERT INTO wishes (wisher_id, description, due_date)é executada para indicar o novo desejo no banco de dados.
Adicionando a função format_date_for_sql ao WishDB
Adicione a função format_date_for_sql à classe WishDB em db.php. A função requer uma string com uma data como o parâmetro de entrada. A função retorna uma data no formato que pode ser processado pelo servidor de banco de dados ou null se a string de entrada estiver vazia.
Nota: a função deste exemplo utilizar a função PHP date_parse. Esta função funciona somente com datas no formato em inglês, como December 25, 2010, e somente com algarismos arábicos. Sites profissionais da Web utilizam geralmente seletor de datas.
Se a string de entrada estiver vazia, o código retorna NULL. Caso contrário, a função date_parse interna é chamada com $date como o parâmetro de entrada. A função date_parse retorna uma matriz que consiste em três elementos chamados $dateParts["year"], $dateParts["month"] e $dateParts["day"]. A string de saída final é construída a partir dos elementos da matriz $dateParts.
Importante: a função date_parse reconhece somente as datas no formato em inglês. Por exemplo, ela pesquisa "February 2, 2016", mas não "2 Fevereiro, 2016".
Nota aos usuários do banco de dados Oracle: o único requisito em relação ao formato é que o formato da data na instrução return $dateParts... corresponda ao formato da data na função SQL to_date da consulta insert_wish.
Indicando o novo registro de desejo no banco de dados
Agora que você desenvolveu as funções auxiliares, adicione o código para validar os novos dados do desejo e indique 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 formulário Adicionar desejo. Se os dados forem inválidos porque nenhuma descrição foi indicada mas existe uma data de vencimento, a data de vencimento é salva e reexibida quando o formulário é recarregado, graças ao código que você desenvolveu anteriormente.
Insira o código seguinte no bloco <? php?> de editWish.php, abaixo do código de manipulação de sessão:
Recupera o id do criador de lista de desejos que está tentando adicionar um desejo chamando a função get_wisher_id_by_name
Inicializa a marca $wishDescriptionIsEmpty, que será usada mais tarde para mostrar mensagens de erro.
Verifica se o método de solicitação é POST, o que significa que os dados foram enviados do formulário para indicar os dados do desejo na própria página editWish.php.
Verifica se a matriz $_POST contém um elemento com a chave "back"
Se a matriz $_POST contém um elemento com a chave "back", o botão Voltar à lista foi pressionado antes do envio do formulário. Nesse caso, o código redireciona o usuário para editWishList.php sem salvar quaisquer dados que foram indicados nos campos e para o processamento de PHP.
Se a matriz $_POST não contém um elemento com a chave "back", 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" na matriz $_POST está vazio e, se a chave estiver vazia, altera a marca $wishDescriptionIsEmpty para true. Observe que como nenhum código adicional é executado no bloco PHP, o formulário Adicionar desejo é recarregado.
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 insert_wish com o id do criador de lista de desejos 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 editWishList.php e para o processamento de PHP.
Exibindo mensagens de erro
Se o usuário tentar salvar um desejo mas não tiver indicado uma descrição para ele, deve ser exibida uma mensagem de erro.
Indique o seguinte bloco <? php?> dentro do formulário de entrada HTML, abaixo do campo de entrada "Describe your wish":
<?php if ($wishDescriptionIsEmpty) echo "Please enter description<br/>"; ?>
A mensagem de erro é exibida se a mensagem $wishDescriptionIsEmpty for verdadeira. A marca é processada durante a validação do formulário de entrada.
Retornando à página inicial index.php
O usuário deve poder retornar à página inicial do aplicativo a qualquer momento pressionando um botão.
Para implementar essa funcionalidade, indique o seguinte formulário de entrada HTML no arquivo editWishList.php, antes da marca de fechamento </body>:
<form name="backToMainPage" action="index.php"> <input type="submit" value="Back To Main Page"/> </form>
O formulário redireciona o usuário para a página inicial index.php quando o botão Voltar à página principal é pressionado.
Testando a funcionalidade Adicionar desejo
Execute a aplicação. 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.
Pressione o botão Voltar à página principal. A página index.php se abre.
Faça logon como Tom e pressione o botão Editar minha lista de desejos novamente. A página editWishList.php se abre.
Pressione o botão Adicionar desejo. A página editWish.php se abre. Preencha o formulário.
Pressione o botão Voltar à lista. A página editWishList.php se abre mas o desejo indicado não está adicionado.
Pressione o botão Adicionar desejo novamente. A página editWish.php se abre. Preencha a data de vencimento e deixe a descrição vazia. Pressione o botão Salvar alterações. A página editWish.php exibe o formulário de entrada com uma mensagem de erro e a data de vencimento preenchida.
Pressione o botão Adicionar desejo novamente. A página editWish.php se abre. Preencha o formulário e pressione o botão Salvar alterações. A página editWishList.php mostra uma lista de desejos atualizada.
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 .