Вы находитесь на странице: 1из 7

Criando um sistema de login com PHP e MySQL

141
9 de maro de 2009, em MySQL, PHP, Tutoriais, por Thiago Belem

Hoje vou ensinar a criar um sistema de login

simples usando PHP e MySQL.

recomendvel que voc j tenha um conhecimento prvio de HTML e, se possvel, PHP e MySQL para tornar as coisas mais fceis. Nosso sistema ser bem simples: um arquivo chamado seguranca.php, que dever ser includo no topo do seu site (em todas as pginas) e que faz a conexo com o banco de dados e que possui algumas funes usadas para redirecionar o visitante para o formulrio de login (login.php) caso ele no esteja logado. Vamos ao trabalho: O que iremos definir primeiro a tabela usada para armazenar os usurios do sistema:

DROP TABLE IF EXISTS `usuarios`; CREATE TABLE IF NOT EXISTS `usuarios` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `nome` varchar(100) NOT NULL, `usuario` varchar(50) NOT NULL, `senha` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `usuario` (`usuario`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Execute esse bloco SQL no seu banco de dados para criar a tabela usada pelo sistema. Depois disso, vamos ao formulrio de login que voc colocar dentro de um arquivo chamado login.php: <form method="post" action="valida.php"> <label>Usurio</label> <input type="text" name="usuario" maxlength="50" />

<label>Senha</label> <input type="password" name="senha" maxlength="50" />

<input type="submit" value="Entrar" /> </form>

Esse formulrio, com apenas dois campos, manda pra pgina valida.php, que um pequeno PHP que receber os dados enviados pelo formulrio, far a validao deles e mandar o visitante ou pra pgina interna (index.php) ou de volta pra pgina de login (login.php). Esse o codigo fonte do arquivo valida.php: // Inclui o arquivo com o sistema de segurana include("seguranca.php");

// Verifica se um formulrio foi enviado if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Salva duas variveis com o que foi digitado no formulrio // Detalhe: faz uma verificao com isset() pra saber se o campo foi preenchido $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : ''; $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';

// Utiliza uma funo criada no seguranca.php pra validar os dados digitados if (validaUsuario($usuario, $senha) == true) { // O usurio e a senha digitados foram validados, manda pra pgina interna header("Location: index.php"); } else { // O usurio e/ou a senha so invlidos, manda de volta pro form de login // Para alterar o endereo da pgina de login, verifique o arquivo seguranca.php expulsaVisitante(); }

A estrutura do seu site, at esse ponto, deve estar dessa forma: ../pasta_do_seu_site/index.php Pgina intera a ser protegida ../pasta_do_seu_site/login.php Pgina com o formulrio de login ../pasta_do_seu_site/valida.php Pgina que faz a validao dos dados do formulrio Agora vamos criar o arquivo seguranca.php na mesma pasta dos demais arquivos: /** * Sistema de segurana com acesso restrito * * Usado para restringir o acesso de certas pginas do seu site * * @author Thiago Belem <contato@thiagobelem.net> * @link http://thiagobelem.net/ * * @version 1.0 * @package SistemaSeguranca */

// Configuraes do Script // ============================== $_SG['conectaServidor'] = true; $_SG['abreSessao'] = true; // Abre uma conexo com o servidor MySQL? // Inicia a sesso com um session_start()?

$_SG['caseSensitive'] = false; 'THIAGO'

// Usar case-sensitive? Onde 'thiago' diferente de

$_SG['validaSempre'] = true; carregamento de pgina?

// Deseja validar o usurio e a senha a cada

// Evita que, ao mudar os dados do usurio no banco de dado o mesmo contiue logado.

$_SG['servidor'] = 'localhost'; $_SG['usuario'] = 'root'; $_SG['senha'] = ''; $_SG['banco'] = 'test';

// Servidor MySQL // Usurio MySQL

// Senha MySQL // Banco de dados MySQL

$_SG['paginaLogin'] = 'login.php'; // Pgina de login

$_SG['tabela'] = 'usuarios';

// Nome da tabela onde os usurios so salvos

// ==============================

// ====================================== // ~ No edite a partir deste ponto ~ // ======================================

// Verifica se precisa fazer a conexo com o MySQL if ($_SG['conectaServidor'] == true) { $_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: No foi possvel conectar-se ao servidor [".$_SG['servidor']."]."); mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: No foi possvel conectar-se ao banco de dados [".$_SG['banco']."]."); }

// Verifica se precisa iniciar a sesso if ($_SG['abreSessao'] == true) { session_start(); }

/** * Funo que valida um usurio e senha

* * @param string $usuario - O usurio a ser validado * @param string $senha - A senha a ser validada * * @return bool - Se o usurio foi validado ou no (true/false) */ function validaUsuario($usuario, $senha) { global $_SG;

$cS = ($_SG['caseSensitive']) ? 'BINARY' : '';

// Usa a funo addslashes para escapar as aspas $nusuario = addslashes($usuario); $nsenha = addslashes($senha);

// Monta uma consulta SQL (query) para procurar um usurio $sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1"; $query = mysql_query($sql); $resultado = mysql_fetch_assoc($query);

// Verifica se encontrou algum registro if (empty($resultado)) { // Nenhum registro foi encontrado => o usurio invlido return false;

} else { // O registro foi encontrado => o usurio valido

// Definimos dois valores na sesso com os dados do usurio

$_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL

// Verifica a opo se sempre validar o login if ($_SG['validaSempre'] == true) { // Definimos dois valores na sesso com os dados do login $_SESSION['usuarioLogin'] = $usuario; $_SESSION['usuarioSenha'] = $senha; }

return true; } }

/** * Funo que protege uma pgina */ function protegePagina() { global $_SG;

if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) { // No h usurio logado, manda pra pgina de login expulsaVisitante(); } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) { // H usurio logado, verifica se precisa validar o login novamente if ($_SG['validaSempre'] == true) { // Verifica se os dados salvos na sesso batem com os dados do banco de dados if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {

// Os dados no batem, manda pra tela de login expulsaVisitante(); } } } }

/** * Funo para expulsar um visitante */ function expulsaVisitante() { global $_SG;

// Remove as variveis da sesso (caso elas existam) unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);

// Manda pra tela de login header("Location: ".$_SG['paginaLogin']); }

Вам также может понравиться