Criando uma Aplicação Orientada pelo Banco de Dados com o PHPLição 6: Adicionado um Novo Desejo ao Banco de DadosConteúdo do tutorial:
![]() Nesta lição, você expande a funcionalidade da aplicação com duas funcionalidades: Para implementar essa funcionalidade, edite o arquivo editWishList.php e crie um novo arquivo editWish.php. ![]() 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 AnteriorUsuários MySQL: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior for concluída. Usuários do banco de dados Oracle: clique aqui para fazer o download do código-fonte que reflete o estado do projeto depois que a lição anterior for concluída. Enviando um Novo DesejoO usuário envia um novo desejo nas seguintes etapas:
Para ativar esse procedimento para o usuário, adicione a seguinte funcionalidade à aplicação:
Adicionando os Componentes da Interface do UsuárioPara adicionar funcionalidade para a adição um novo desejo:
O form Adicionar Desejo contém:
Quando o botão Adicionar Desejo é pressionado, o form envia os dados inseridos para a mesma página, editWish.php, usando o método de Solicitação POST. Reexibindo a Data de Vencimento Após um Envio MalsucedidoSe 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 editWish.php. Quando o usuário retorna ao editWish.php, o form Adicionar Desejo deve mostrar o valor de dueDate 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 description e due-date. Em seguida, você precisa alterar o form Adicionar Desejo, para que ele recupere o valor do campo dueDate do array. Observação: O código que recarrega o form de entrada, caso nenhuma descrição tenha sido inserida, é incluído no código que valida os dados e insere-os 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 para que ele seja exibido se o form for recarregado. Para reexibir o form de entrada depois que o usuário o envia sem êxito:
Verificando o Log-in do WisherNo arquivo editWish.php, insira 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:
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. Inserindo o Novo Desejo no Banco de DadosDepois 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:
Adicionando a função insert_wish ao WishDBEssa 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. Abra o db.php e adicione a função insert_wish na classe WishDB : Para o banco de dados MySQL function insert_wish($wisherID, $description, $duedate){ $description = $this->real_escape_string($description); Para o banco de dados Oracle: 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); } 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. Adicionando a função format_date_for_sql ao WishDBAdicione a função format_date_for_sql à classe WishDB em db.php. 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 null se a string de entrada estiver vazia. Observação: a função nesse exemplo usa a função date_parse 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. Para o banco de dados MySQL:function format_date_for_sql($date){ Para o banco de dados Oracle: function format_date_for_sql($date){ if ($date == "") return null; else { $dateParts = date_parse($date); return $dateParts['year']*10000 + '-' + $dateParts['month']*100 + '-' + $dateParts['day']; } } Se a string de entrada estiver vazia, o código retorna NULL (nulo). Caso contrário, a função date_parse interna é chamada com $date como parâmetro de entrada. A função date_parse retorna um array que consiste em três elementos chamados $dateParts["ano"], $dateParts["mês"] e $dateParts["dia"]. A string de saída final é construída com base nos elementos do array $dateParts. Importante: a função date_parse reconhece apenas datas em Inglês. Por exemplo, faz parsing para "February 2, 2016" mas não para "2 Unora, 2016". Observação para usuários do banco de dados Oracle: o único formato necessário é que o formato da data na instrução return $dateParts... coincida com o formato da data na função SQL to_date na consulta insert_wish. Inserindo o Registro do Novo Desejo no Banco de DadosAgora 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ê desenvolveu anteriormente. Insira o código seguinte no bloco <? php?> de editWish.php, abaixo do código de tratamento de sessão: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'] == "") { $wishDescriptionIsEmpty = true; } else { WishDB::getInstance()->insert_wish($wisherID, $_POST['wish'], $_POST['dueDate']); header('Location: editWishList.php' ); exit; } } O código realiza as seguintes funções:
Se o array $_POST 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 editWishList.php sem salvar os dados que foram inseridos nos campos e para o processamento de PHP. Se o array $_POST não 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. 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 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 editWishList.php e para o processamento de PHP. Exibindo Mensagens de ErroSe o usuário tentar salvar um desejo mas não tiver inserido uma descrição para ele, deve ser exibida uma mensagem de erro.Insira o seguinte bloco <? php?> dentro do form de entrada HTML, abaixo do campo de entrada "Descreva seu desejo": <?phpA mensagem de erro será exibida se o flag $wishDescriptionIsEmpty for verdadeira. O flag será processado durante a validação do form de entrada. Retornando à Página Inicial index.phpO usuário deve poder retornar à página inicial da aplicação a qualquer momento pressionando um botão.Para implementar essa funcionalidade, insira o seguinte form de entrada HTML no arquivo editWishList.php, antes da tag de fechamento </body>: <form name="backToMainPage" action="index.php">O form 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
O código-fonte da Aplicação após a Lição Atual está ConcluídoUsuários MySQL: clique 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 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<< Lição anterior 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, junte-se à lista de correspondência . |
Documentation |