Vocabulário: arquivo = ficheiro; usuário = utilizador; banco de dados = base de dados; cadastro = registo
Neste tutorial, vamos seguir os passos para a criação de formulário de autenticação.
Desde a criação dos campos na tabela do banco de dados, validação das informações, cadastro, autenticação e por fim log out.
Tabela MySQL
Vamos criar os campos para armazenar as informações de usuário e senha:
CREATE TABLE ‘usuario’ (
‘id’ INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
’usuario’ CHAR( 32 ) NOT NULL ,
’senha’ CHAR( 32 ) NOT NULL
) ENGINE = InnoDB;
Criamos três campos:
- id – para rotular campos únicos auto-incrementáveis;
- usuario – nome do usuário, que será uma string com no máximo 32 caracteres;
- senha – também string com no máximo 32 caracteres.
Formulário De Login
Estruturamos a página que conterá o formulário para login.
<form action="formulario_login.php" method="post">
<fieldset>
<p><label for="usuario">Usuário:</label></p>
<input type="text" name="usuario" size="30" class="width233" />
<p><label for="senha">Senha:</label></p>
<input type="password" name="senha" size="30" class="width233"/>
<input type="submit" name="acessar" value="Acessar" />
<input type="submit" name="cadastrar" value="Cadastrar" />
</fieldset>
</form>
Para formulários de login, utilizamos o método post, ao invés do get, pois este último mostra as informações submetidas na url da página, o que é perigoso em se tratando de dados sensíveis.
O campo que solicita a senha é do tipo password. Com isso os caracteres digitados serão mascarados e na visualização serão mostrados como círculos pretos. Nem precisa explicar o porquê disso.
Foram criados dois submits, para cadastro e acesso. Desta forma os testes tornam-se mais fáceis e na precisamos ficar pulando de um arquivo ao outro.
Conexão Com O Banco De Dados
Vamos conectar o script PHP a um banco de dados mysql para troca de informações.
<?php
@mysql_connect("localhost", "root", "senha") or die("Conexão falhou");
mysql_select_db(‘banco_dados');
?>
A arroba no início da primeira linha evita que mensagens de erro sejam mostradas ao usuário em caso de falha na conexão. É aconselhável seu uso para evitar expor informações sobre o código da página. Podemos então mostrar apenas as informações que achamos necessárias.
E é obrigatório manter o usuário informado sobre o que está acontecendo. Principalmente se houve algum problema.
Preenchemos os valores dos parâmetros server(servidor), username(usuário) e password(senha). Configure o seu conforme as informações do servidor.
DOWNLOAD Descarregue o código utilizado neste tutorial para a criação do Formulário De Contacto Com jQuery em formato .zip.
No ambiente de desenvolvimento você pode tirar a arroba da frente da função de conexão e deixar a linha assim:
<?php
mysql_connect("localhost", "root", "senha") or die("Conexão falhou");
?>
Desta forma você tem mais informações caso a conexão falhe.
Em seguida selecionamos o banco de dados com o mysql_select_db().
Criando As Variáveis
<?php
$cadastrar = $_POST['cadastrar'];
$acessar = $_POST['acessar'];
$usuario = htmlspecialchars(strip_tags($_POST['usuario']));
$senha = htmlspecialchars(strip_tags($_POST['senha']));
$senha_enc = md5($_POST['senha']);
$refresh = '<meta http-equiv="refresh" content="1; url=form.html" />';
?>
As duas primeiras variáveis servem para descobrirmos qual das ações foi realizada. Em seguida fazemos algumas validações para evitar injeção de código.
Em seguida a senha é encriptada utilizando a função md5() que transforma um simples ‘123’ em uma seqüência aleatória com 32 caracteres entre números e letras. Assim, ser o banco de dados for invadido, o criminoso não terá muito que festejar.
Cadastro De Usuário
<?php
if ($cadastrar!='')
{
$busca = mysql_query("SELECT * FROM usuario WHERE usuario='$usuario' LIMIT 1");
if (mysql_num_rows($busca)==1)
{
echo('<script type="text/javascript">alert("Este usuário já existe, por favor escolha outro.")</script>');
exit ($refresh);
}
mysql_query("INSERT INTO usuario (usuario,senha) VALUES ('$usuario','$senha_enc')");
echo '<script type="text/javascript">alert("Cadastro efetuado!")</script>';
exit ($refresh);
}
?>
Se o botão cadastrar do formulário for clicado, a variável que recebe o valor deste campo será preenchida com a palavra “cadastrar”, caso contrário, ela estará vazia.
Desta forma fica fácil descobrir qual dos botões foi clicado. O que não estiver vazio. Se este for o caso de cadastrar, o código abaixo da verificação será executado.
Antes de cadastrar o usuário, o código faz uma busca nos registros da tabela para ver se já existe algum usuário com o mesmo nome. Se for o caso, o usuário é informado e a execução do código é parada.
A linha responsável pela gravação das informações na tabela pode ser lida da seguinte forma:
Utilizando a função mysql_query() insira dentro da tabela usuário, nos campos usuario e senha, os valores contidos nas variáveis $usuario e $senha_enc.
Nesta linha você também pode utilizar o “or die(mysql_error())” após a tentativa de inserção dos dados. Isso em ambiente de desenvolvimento quando colocar a página online, retire.
Se der tudo certo com a gravação, será apresentado um aviso informando do sucesso e após um segundo seremos redirecionados para a página que contém o formulário.
Buscando Usuário
<?php
if ($acessar!='')
{
$busca = mysql_query("SELECT * FROM usuario WHERE usuario='$usuario' and senha='$senha_enc' LIMIT 1");
if (mysql_num_rows($busca)==1)
{
session_start();
$_SESSION['usuario'] = $usuario;
$linha = mysql_fetch_array($busca);
echo '<script type="text/javascript">alert("Usuário '.$linha['usuario'].' logado.")</script>';
exit ($refresh);
} else {
echo '<script type="text/javascript">alert("Usuário inexistente ou senha incorreta.")</script>';
exit ($refresh);
}
}
?>
Se o botão acessar for pressionado, o script busca na tabela usuario por registros que correspondam aos dados submetidos.
Se a busca retornar uma linha da tabela nós iniciamos os dados da seção com a função session_start(). Com isso podemos criar uma variável de sessão chamada “usuario” que conterá o nome do usuário logado. Isso permite apresentar páginas personalizadas com o nome do internauta.
Em seguida a variável $linha recebe uma array com os dados retornados pela busca em um esquema chave => valor.
Apresentamos então um alerta informando do sucesso da operação e retornamos para a página que contém o formulário de login.
Caso não seja encontrado nenhum registro do usuario ou senha na tabela, um alerta informa sobre isso e o usuário é redirecionado à pagina de login.
Log out
Aquele sair, posicionado no canto superior direito do nosso formulário poderia aparecer somente quando houvesse alguém logado, mas como a página é HTML não é possível fazer a verificação. Preferi deixar assim para não misturar códigos. Fica um desafio para você ao finalizar este tutorial.
Ao clicar sobre o link, somos direcionados para uma página que tem no código, o objetivo de apagar os dados da sessão atual. Com isso outro usuário pode acessar as páginas, além de preservarmos a privacidade do atual usuário. Estas são as linhas:
<?php
session_start();
session_destroy();
header("Location:form.html");sistema-autenticaca
?>
Iniciamos os dados da seção e então os destruímos! Rápido e sem deixar rastros retornamos para a página de login.
DOWNLOAD: Descarregue o código utilizado neste tutorial para a criação do Script De Login Em PHP e MySQL [4], em formato .zip.