Script Login PHP E MySQL

Vocabulário: arquivo = ficheiro; usuário = utilizador; banco de dados = base de dados; cadastro = registo

script loginNeste 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&aacute;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, em formato .zip.

Be Sociable, Share!

12 Comentários

  1. Tito Lívio

    Valeu Rui,

    Muito bom mesmo este tutorial como todos os que eu li e salvei para meus estudos e aperfeiçoamento.

  2. Muito bom este tutorial, excelente para iniciantes! Só uma questão: utilizando o MD5 não é possível "decriptar" a senha; somente a função base64 possuí ENCODE / DECODE. Abs

  3. Caro Rui, gostei muito deste tutorial, mas estou tentando executar o cadastro. Ele até cadastra na minha table tbl_usuario, mas me retorna a seguinte mensagem: Notice: Undefined index: acessar in C:wampwwwLojaVirtualformulario_login.php on line 7.
    Na linha 7 consta o seguinte conteúdo: $acessar = $_POST['acessar'];

    O quê pode estar ocorrendo?

    Saúde, paz e sucesso!
    Abraço,
    Moura

    • Este é um erro muito comum, ele ocorre porque você não definiu se a variavel está sendo usada ou vazia, basta usar:
      if (!isset($_POST['NomeCampo'])){
      $variavel = $_POST['action'];
      }

      Ou desativar os erros deste tipo, que não são graves.
      error_reporting (E_ALL ^ E_NOTICE);

      Cumprimentos, e ótimo tutorial.

  4. Felipe

    teria como vincular ela a um carrinho de compras que tem aki no site? belo tutorial

  5. miglopes

    boas a aqui alguem que perceba de programaçao e que me possa ajudar a por um cadastro no meu site?

  6. Olá Miguel,

    Se precisar de ajuda, entre em contato comigo através do email a seguir: comandosusa@gmail.com

  7. Klebe Miranda

    Ainda não testei os códigos, para falar a verdade não intendo muito disso, mas passei uns meses ai só se dedicando a estes tipos de códigos fiz várias pesquisas.. mas não sei se os códigos que estar no tutorial pode funcionar em site que não é meu.. tipo o site da empresa em que me restriei gratuitamente.. tem um aqui que ja testei os códigos e dá certo mas os scripts dão erro de vez enquando mas acabei com isso com uma pesquisa que fiz pra anular este processo de erro dos scripts… enfim bom trabalho ;)

  8. Paulo Linhares

    Muito bom, parabéns! Você realmente entende a arte de ensinar, ficou muito bem explicado e simples! 

Participa! Comenta...