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 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.
Salvando o ID do criador de lista de desejos na sessão durante a criação
Uma sessão é um armazenamento duradouro para transferir informações de uma página para outra sem usar um formulário de entrada HTML. Essa funcionalidade tem suporte através de uma matriz PHP predefinida $_SESSION.
Por motivos de segurança, depois que um novo criador de lista de desejos é criado, ele deve se conectar automaticamente sem preencher um formulário. Portanto, você precisa modificar o arquivo createNewWisher.php para implementar a seguinte funcionalidade:
Adicione um novo criador de lista de desejos ao banco de dados.
Abra uma sessão.
Armazenar o nome do criador de lista de desejos na sessão.
Transferir o nome do criador de lista de desejos na sessão quando o criador de lista de desejos é redirecionado para a página editWishList.php.
O bloco de código inicia uma sessão, o que significa abrir a matriz $_SESSION para indicar ou recuperar dados. Em seguida, o código adiciona um elemento à matriz $_SESSION. O elemento adicionado contém um valor e um identificador (chave). O valor é o nome dos criadores de lista de desejos recém-criados e o identificador é "user". Em seguida, o programa redireciona o criador de lista de desejos para a página editWishList.php.
Validando o logon do usuário
Quando um usuário alcança a página editWishList.php, o aplicativo deve confirmar que página é acessada pela mesma pessoa que acabou de se registrar na página createNewWisher.php.
Implementar essa funcionalidade consiste em duas etapas:
O bloco de código abre a matriz $_SESSION para recuperar dados e verifica se $_SESSION contém um elemento com o identificador "user". Se a verificação for bem-sucedida, o código imprime uma mensagem de boas-vindas.
Para verificar se a sessão é implementada corretamente:
Execute o arquivo createNewWisher.php e crie um novo criador de lista de desejos, por exemplo, Jack.
O editWishList.php abre com "Hello Jack" (Olá, Jack).
Limpe os cookies da sessão em seu navegador ou termine a sessão e execute editWishList.php no IDE.
O arquivo editWishList.php abre com Hello porque nenhum usuário foi transferido através de uma sessão. Isso não é correto porque permite que alguém que não esteja conectado e não esteja registrado crie ou edite uma lista de desejos. Para evitar isso, o usuário precisa ser redirecionado para a página index.php.
Redirecionando um usuário que não está conectado
Adicione o bloco de código seguinte a editWishList.php, abaixo da cláusula if:
else {
header('Location: index.php');
exit;
}
O código redireciona o usuário para a página index.php e cancela a execução do código PHP.
Para verificar se a funcionalidade está implementada corretamente, execute o arquivo editWishList.php. O resultado esperado é que a página index.php se abre.
Fazendo logon na página index.php
O logon na página index.php consiste em duas etapas:
Observação: os avisos do validador HTML podem ser ignorados.
O código apresenta um formulário HTML que permite indicar o nome e a senha do usuário nos campos de texto. Quando o usuário clica em Editar minha lista de desejos, os dados são transferidos para a mesma página, index.php.
Salvar o nome do usuário para a sessão e redirecionar o usuário para a página editWishList.php ou Exibir uma mensagem de erro.
Um usuário pode acessar a página index.php ao iniciar o aplicativo, ou na página editWishList.php, ou quando redirecionado da página index.php depois de indicar o nome e a senha.
Como somente no último caso o método de solicitação HTML POST é usado, você sempre pode saber onde o usuário estava localizado quando acessou index.php.
No arquivo index.php, crie um bloco <?php ?> acima do bloco HTML, com o seguinte código:
O topo do código permite que o usuário use o arquivo db.php e inicialize a variável $logonSuccess com o valor false. Se a validação ocorrer, esse valor mudará para true.
O código que verifica as credenciais do usuário verifica primeiro se o método de solicitação é POST. Se o método for POST, o usuário foi redirecionado depois de enviar o formulário de logon. Nesse caso, o código bloqueia as chamadas da função verify_wisher_credentials com o nome e a senha inseridas no formulário de logon.
A função verify_wisher_credentials, que se escreve na próxima seção, verifica se há um registro na tabela de criadores de desejos em que o usuário e a senha são confrontados com os valores enviados no formulário de logon. Se a função verify_wisher_credentials retornar true, um criador de desejo com a combinação de nome e senha é registrado no banco de dados. Isso significa que a validação ocorreu e que $logonSuccess muda o valor para true. Nesse caso, a seção inicia e a matriz $_SESSION é aberta. Em seguida, o código adiciona um novo elemento à matriz $_SESSION. O elemento contém um valor um identificador (chave). O valor é o nome do criador da lista de desejos e o identificador é "user". Em seguida, o usuário e redirecionado para a página editWishList.php a fim de editar a lista de desejos.
Se a função verify_wisher_credentials retornar false, o valor da variável $logonSuccess permanece false. O valor da variável é usado em exibindo uma mensagem de erro.
Função verify_wisher_credentials
Para implementar a verificação das credenciais do criador de lista de desejos, você precisa adicionar uma nova função à classe WishDB no arquivo db.php. A função requer um nome e uma senha como os parâmetros de entrada e retorna 0 ou 1.
Para o banco de dados MySQL, insira o seguinte bloco de código:
public function verify_wisher_credentials ($name, $password){ $name = $this->real_escape_string($name);
$password = $this->real_escape_string($password); $result = $this->query("SELECT 1 FROM wishers
WHERE name = '" . $name . "' AND password = '" . $password . "'");
return $result->data_seek(0);
}
Para o banco de dados Oracle, insira o seguinte bloco de código (como o OCI8 não tem equivalente para mysql_num_rows, este código é uma forma modificada de get_wisher_id_by_name):
public function verify_wisher_credentials($name, $password) {
$query = "SELECT 1 FROM wishers WHERE name = :name_bv AND password = :pwd_bv";
$stid = oci_parse($this->con, $query);
oci_bind_by_name($stid, ':name_bv', $name);
oci_bind_by_name($stid, ':pwd_bv', $password);
oci_execute($stid);
//Because name is a unique value I only expect one row
$row = oci_fetch_array($stid, OCI_ASSOC);
if ($row)
return true;
else
return false;
}
O bloco de código executa a pesuisa "SELECT 1 FROM wishers WHERE Name = '" . $name . "' AND Password = '" . $password . "'" e retorna o número de registros que atendem à consulta especificada. Se o registro for encontrado, a função retorna true. Se não há registro no banco de dados, a função retorna false.
Exibindo mensagens de erro
Para permitir que o aplicativo exiba mensagens de erro, indique o seguinte bloco de código <? php?> no formulário de logon em index.php, abaixo dos campos de entrada mas acima do botão:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (!$logonSuccess)
echo "Invalid name and/or password";
}
?>
O bloco de código verifica o valor da variável $logonSuccess e se ele for falso, exibe uma mensagem de erro.
Testando o logon na página index.php
Para verificar se a funcionalidade de logon funciona corretamente na página inicial index.php:
Execute o aplicativo.
Na página index.php, indique Tom na caixa de edição Nome do usuário e Tim na caixa de edição Senha.
Pressione Editar minha lista de desejos. É exibida uma mensagem de erro (observe que essa janela de navegador abaixo é reduzida para 600 px de largura, o que acrescenta algumas quebras de linha):
Indique Tom na caixa de edição Nome do usuário e tomcat na caixa de edição Senha.
Clique na lista Editar minha lista de desejos. É exibida a página editWishList.php:
O código-fonte do aplicativo após a lição atual está concluído
Usuários 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 .