Achei esse tutorial na net Muito Bom.
É recomendável que você já tenha um conhecimento prévio de HTML e, se possível, PHP e MySQL para tornar as coisas mais fáceis.
Nosso sistema será bem simples: um arquivo chamado seguranca.php, que deverá ser incluído no topo do seu site (em todas as páginas) e que faz a conexão com o banco de dados e que possui algumas funções usadas para redirecionar o visitante para o formulário de login (login.php) caso ele não esteja logado.
Vamos ao trabalho:
O que iremos definir primeiro é a tabela usada para armazenar os usuários do sistema:
1 | DROP TABLE IF EXISTS `usuarios`; |
2 | CREATE TABLE IF NOT EXISTS `usuarios` ( |
3 | `id` int (10) unsigned NOT NULL AUTO_INCREMENT, |
4 | `nome` varchar (100) NOT NULL , |
5 | `usuario` varchar (50) NOT NULL , |
6 | `senha` varchar (50) NOT NULL , |
8 | UNIQUE KEY `usuario` (`usuario`) |
9 | ) 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 formulário de login que você colocará dentro de um arquivo chamado login.php:
1 | < form method = "post" action = "valida.php" > |
3 | < input type = "text" name = "usuario" maxlength = "50" /> |
6 | < input type = "password" name = "senha" maxlength = "50" /> |
8 | < input type = "submit" value = "Entrar" /> |
Esse formulário, com apenas dois campos, manda pra página valida.php, que é um pequeno PHP que receberá os dados enviados pelo formulário, fará a validação deles e mandará o visitante ou pra página interna (index.php) ou de volta pra página de login (login.php).
Esse é o codigo fonte do arquivo valida.php:
02 | include ( "seguranca.php" ); |
05 | if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) { |
08 | $usuario = (isset( $_POST [ 'usuario' ])) ? $_POST [ 'usuario' ] : '' ; |
09 | $senha = (isset( $_POST [ 'senha' ])) ? $_POST [ 'senha' ] : '' ; |
12 | if (validaUsuario( $usuario , $senha ) == true) { |
14 | header( "Location: index.php" ); |
A estrutura do seu site, até esse ponto, deve estar dessa forma:
../pasta_do_seu_site/index.php » Página intera a ser protegida
../pasta_do_seu_site/login.php » Página com o formulário de login
../pasta_do_seu_site/valida.php » Página que faz a validação dos dados do formulário
Agora vamos criar o arquivo seguranca.php na mesma pasta dos demais arquivos:
015 | $_SG [ 'conectaServidor' ] = true; |
016 | $_SG [ 'abreSessao' ] = true; |
018 | $_SG [ 'caseSensitive' ] = false; |
020 | $_SG [ 'validaSempre' ] = true; |
023 | $_SG [ 'servidor' ] = 'localhost' ; |
024 | $_SG [ 'usuario' ] = 'root' ; |
026 | $_SG [ 'banco' ] = 'test' ; |
028 | $_SG [ 'paginaLogin' ] = 'login.php' ; |
030 | $_SG [ 'tabela' ] = 'usuarios' ; |
038 | if ( $_SG [ 'conectaServidor' ] == true) { |
039 | $_SG [ 'link' ] = mysql_connect( $_SG [ 'servidor' ], $_SG [ 'usuario' ], $_SG [ 'senha' ]) or die ( "MySQL: Não foi possível conectar-se ao servidor [" . $_SG [ 'servidor' ]. "]." ); |
040 | mysql_select_db( $_SG [ 'banco' ], $_SG [ 'link' ]) or die ( "MySQL: Não foi possível conectar-se ao banco de dados [" . $_SG [ 'banco' ]. "]." ); |
044 | if ( $_SG [ 'abreSessao' ] == true) { |
056 | function validaUsuario( $usuario , $senha ) { |
059 | $cS = ( $_SG [ 'caseSensitive' ]) ? 'BINARY' : '' ; |
062 | $nusuario = addslashes ( $usuario ); |
063 | $nsenha = addslashes ( $senha ); |
066 | $sql = "SELECT `id`, `nome` FROM `" . $_SG [ 'tabela' ]. "` WHERE " . $cS . " `usuario` = '" . $nusuario . "' AND " . $cS . " `senha` = '" . $nsenha . "' LIMIT 1" ; |
067 | $query = mysql_query( $sql ); |
068 | $resultado = mysql_fetch_assoc( $query ); |
071 | if ( empty ( $resultado )) { |
079 | $_SESSION [ 'usuarioID' ] = $resultado [ 'id' ]; |
080 | $_SESSION [ 'usuarioNome' ] = $resultado [ 'nome' ]; |
083 | if ( $_SG [ 'validaSempre' ] == true) { |
085 | $_SESSION [ 'usuarioLogin' ] = $usuario ; |
086 | $_SESSION [ 'usuarioSenha' ] = $senha ; |
096 | function protegePagina() { |
099 | if (!isset( $_SESSION [ 'usuarioID' ]) OR !isset( $_SESSION [ 'usuarioNome' ])) { |
102 | } else if (!isset( $_SESSION [ 'usuarioID' ]) OR !isset( $_SESSION [ 'usuarioNome' ])) { |
104 | if ( $_SG [ 'validaSempre' ] == true) { |
106 | if (!validaUsuario( $_SESSION [ 'usuarioLogin' ], $_SESSION [ 'usuarioSenha' ])) { |
117 | function expulsaVisitante() { |
121 | unset( $_SESSION [ 'usuarioID' ], $_SESSION [ 'usuarioNome' ], $_SESSION [ 'usuarioLogin' ], $_SESSION [ 'usuarioSenha' ]); |
124 | header( "Location: " . $_SG [ 'paginaLogin' ]); |
Não vou poder explicar todas as funções do arquivo pq é muita coisa.. Mas todas elas estão devidamente comentadas e documentadas… É só olhar.
Com esse arquivos nós já nos conectamos automaticamente ao servidor MySQL, então se você usar outra forma pra fazer a conexão, vá na parte de configurações do seguranca.php e defina a variável $_SG['conectaServidor'] pra falso (false). O mesmo acontece pra sessão com a variável $_SG['abreSessao'].
Agora é só incluir essas linhas no topo de cada arquivo que deverá ter o acesso restrito:
1 | include ( "seguranca.php" ); |
Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:
1 | echo "Olá, " . $_SESSION [ 'usuarioNome' ]; |
Fonte: http://blog.thiagobelem.net/criando-um-sistema-de-login-com-php-e-mysql/
Bom dia. Bom código me ajudou muito, mas tenho uma observação a fazer:
ResponderExcluirNa linha 066 do arquivo segurança php há um pequeno erro que não permite que o sistema funcione.
066: $sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS."
ao invéz de ser ..."SELECT 'id', 'nome'... deve ser "SELECT 'usuario', 'senha'...
Abraço e parabéns.