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.
Salvando o ID do criador de lista de desejos na sessão durante a criação
Uma sessão é um armazenamento permanente para transferir informações de uma página para outra sem usar um formulário de entrada HTML. Esta 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:
Adicionar um novo criador de lista de desejos ao banco de dados.
Abrir 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:
Nota: você pode ignorar os avisos do validador HTML.
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:
A parte superior do bloco de código permite o uso do arquivo db.php e inicializa a variável $logonSuccess com o valor false. Se a validação for bem sucedida, este valor ser alterado 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 de solicitação for POST, o usuário foi redirecionado depois de enviar o formulário de logon. Neste caso, o bloco de código chama a função verify_wisher_credentials com o nome e a senha introduzidos no formulário de logon.
A função verify_wisher_credentials, que será escrita na próxima seção, verifica se há um registro na tabela wishers na qual o usuário e a senha correspondem aos valores enviados no formulário de logon. Se a função verify_wisher_credentials retornar true, um criador de lista de desejos com a combinação especificada de nome e senha é registrado no banco de dados. Isso significa que a validação foi bem sucedida, e $logonSuccess altera o valor para true. Neste caso, é iniciada uma sessão, e a matriz $_SESSION se abre. O código adiciona um 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 código redireciona o usuário para a página editWishList.php a fim de editar a lista de desejos.
Se a função verify_wisher_credentials retorna false, o valor da variável $logonSuccess continua sendo falso. 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.
No 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);
}
No banco de dados Oracle, insira o seguinte bloco de código (Como o OCI8 não tem equivalente a 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 consulta "SELECT 1 FROM wishers WHERE Name = '" . $name . "' AND Password = '" . $password . "'" e retorna o número de registros que atendem à consulta especificada. Se tal registro for encontrado, a função retorna true. Se não houver tal 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 a largura da janela do navegador abaixo é de 600 px, o que causa as quebras de linhas):
Indique Tom na caixa de edição Nome do usuário e tomcat na caixa de edição Senha.
Pressione Editar minha lista de desejos. A página editWishList.php é exibida:
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 .