Jogos Brasil

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

+2
Junior Ferraz
NewYorkCO
6 participantes

    [RELEASE]Painel de controle

    NewYorkCO
    NewYorkCO
    Master
    Master


    Mensagens : 327
    Data de inscrição : 05/09/2009
    Especialidade : TQ BINARYS Websites

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty [RELEASE]Painel de controle

    Mensagem  NewYorkCO Sex Jul 09, 2010 11:16 pm

    Criando um sistema de login com PHP e MySQL
    publicado em 09 de março de 2009 com 82 comentários
    5tweetsretweet

    Hoje vou ensinar a criar um sistema de login simples usando PHP e MySQL.

    É 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:
    view source
    print?
    Código:
    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,
    7   PRIMARY KEY (`id`),
    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:
    view source
    print?
    Código:
    1   <form method="post" action="valida.php">
    2   <label>Usuário</label>
    3   <input type="text" name="usuario" maxlength="50" />
    4   
    5   <label>Senha</label>
    6   <input type="password" name="senha" maxlength="50" />
    7   
    8   <input type="submit" value="Entrar" />
    9   </form>

    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:
    view source
    print?
    Código:
    01   // Inclui o arquivo com o sistema de segurança
    02   include("seguranca.php");
    03   
    04   // Verifica se um formulário foi enviado
    05   if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    06   // Salva duas variáveis com o que foi digitado no formulário
    07   // Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
    08   $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
    09   $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';
    10   
    11   // Utiliza uma função criada no seguranca.php pra validar os dados digitados
    12   if (validaUsuario($usuario, $senha) == true) {
    13   // O usuário e a senha digitados foram validados, manda pra página interna
    14   header("Location: index.php");
    15   } else {
    16   // O usuário e/ou a senha são inválidos, manda de volta pro form de login
    17   // Para alterar o endereço da página de login, verifique o arquivo seguranca.php
    18   expulsaVisitante();
    19   }
    20   }

    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:
    view source
    print?
    Código:
    001   /**
    002   * Sistema de segurança com acesso restrito
    003   *
    004   * Usado para restringir o acesso de certas páginas do seu site
    005   *
    006   * @author Thiago Belem <contato@thiagobelem.net>
    007   * @link http://thiagobelem.net/
    008   *
    009   * @version 1.0
    010   * @package SistemaSeguranca
    011   */
    012   
    013   //  Configurações do script
    014   // ==============================
    015   $_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?
    016   $_SG['abreSessao'] = true;        // Inicia a sessão com um session_start()?
    017   
    018   $_SG['caseSensitive'] = false;    // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'
    019   
    020   $_SG['validaSempre'] = true;      // Deseja validar o usuário e a senha a cada carregamento de página?
    021   // Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
    022   
    023   $_SG['servidor'] = 'localhost';    // Servidor MySQL
    024   $_SG['usuario'] = 'root';          // Usuário MySQL
    025   $_SG['senha'] = '';                // Senha MySQL
    026   $_SG['banco'] = 'test';            // Banco de dados MySQL
    027   
    028   $_SG['paginaLogin'] = 'login.php'; // Página de login
    029   
    030   $_SG['tabela'] = 'usuarios';      // Nome da tabela onde os usuários são salvos
    031   // ==============================
    032   
    033   // ======================================
    034   //  ~ Não edite a partir deste ponto ~
    035   // ======================================
    036   
    037   // Verifica se precisa fazer a conexão com o MySQL
    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']."].");
    041   }
    042   
    043   // Verifica se precisa iniciar a sessão
    044   if ($_SG['abreSessao'] == true) {
    045   session_start();
    046   }
    047   
    048   /**
    049   * Função que valida um usuário e senha
    050   *
    051   * @param string $usuario - O usuário a ser validado
    052   * @param string $senha - A senha a ser validada
    053   *
    054   * @return bool - Se o usuário foi validado ou não (true/false)
    055   */
    056   function validaUsuario($usuario, $senha) {
    057   global $_SG;
    058   
    059   $cS = ($_SG['caseSensitive']) ? 'BINARY' : '';
    060   
    061   // Usa a função addslashes para escapar as aspas
    062   $nusuario = addslashes($usuario);
    063   $nsenha = addslashes($senha);
    064   
    065   // Monta uma consulta SQL (query) para procurar um usuário
    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);
    069   
    070   // Verifica se encontrou algum registro
    071   if (empty($resultado)) {
    072   // Nenhum registro foi encontrado => o usuário é inválido
    073   return false;
    074   
    075   } else {
    076   // O registro foi encontrado => o usuário é valido
    077   
    078   // Definimos dois valores na sessão com os dados do usuário
    079   $_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
    080   $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL
    081   
    082   // Verifica a opção se sempre validar o login
    083   if ($_SG['validaSempre'] == true) {
    084   // Definimos dois valores na sessão com os dados do login
    085   $_SESSION['usuarioLogin'] = $usuario;
    086   $_SESSION['usuarioSenha'] = $senha;
    087   }
    088   
    089   return true;
    090   }
    091   }
    092   
    093   /**
    094   * Função que protege uma página
    095   */
    096   function protegePagina() {
    097   global $_SG;
    098   
    099   if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
    100   // Não há usuário logado, manda pra página de login
    101   expulsaVisitante();
    102   } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
    103   // Há usuário logado, verifica se precisa validar o login novamente
    104   if ($_SG['validaSempre'] == true) {
    105   // Verifica se os dados salvos na sessão batem com os dados do banco de dados
    106   if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
    107   // Os dados não batem, manda pra tela de login
    108   expulsaVisitante();
    109   }
    110   }
    111   }
    112   }
    113   
    114   /**
    115   * Função para expulsar um visitante
    116   */
    117   function expulsaVisitante() {
    118   global $_SG;
    119   
    120   // Remove as variáveis da sessão (caso elas existam)
    121   unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);
    122   
    123   // Manda pra tela de login
    124   header("Location: ".$_SG['paginaLogin']);
    125   }
    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:
    view source
    print?
    1 include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
    2 protegePagina(); // Chama a função que protege a página

    Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:
    view source
    print?
    1 echo "Olá, " . $_SESSION['usuarioNome'];

    Veja mais sobre escrever e pegar valores da sessão (coisa que acontece muito nesse sistema de login) no tópico Aprendendo a usar sessões no PHP.

    Viram como é fácil?

    Pra quem quiser um tutorial mais explicado e detalhado recomendo: Como criar um Sistema de Login com Níveis de Permissão (passo-a-passo).

    Nota: Alguns de vocês devem ter notado que durante essa semana, no post Criando Sistemas Seguros, falei sobre não usar nomes óbvios para tabelas de usuários. Mas esse exemplo é apenas explicativo, você pode mudar o nome da tabela de usuários se preferir e depois é só alterar a variável no bloco de configurações dentro do seguranca.php.


    Última edição por NewYorkCO em Sex Set 17, 2010 7:59 pm, editado 1 vez(es)
    Junior Ferraz
    Junior Ferraz
    Noob
    Noob


    Mensagens : 55
    Data de inscrição : 02/11/2009
    Especialidade : Under Development Game Servers

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Junior Ferraz Sex Jul 09, 2010 11:59 pm

    é bom! mais o Dreamweaver cs4 ja faz isso automaticamente sem muita dificuldade!!!

    basta apenas add o nome do database que ele criar um login em php!!!

    para iniciantes recomendo ver muita video aula no youtube sobre mysql+php...

    Helgast
    Helgast
    Moderador
    Moderador


    Mensagens : 163
    Data de inscrição : 11/01/2010
    Especialidade : Web Design

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Helgast Sáb Jul 10, 2010 9:42 am

    velho na boa organiza o topico q n da pra saber oq é codigo, oq n e

    antes dos codigos php e etc, usa a tag [CODE] , pra ficar melhor a vizualiação .-.
    Dinoel
    Dinoel
    Expert
    Expert


    Mensagens : 255
    Data de inscrição : 01/02/2010
    Especialidade : Tudo Sobre Conquer

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Dinoel Sáb Jul 10, 2010 11:10 am

    Eh vrdade concordo com Helgast. Eu fikei qbrando a cabeça tentando faze issu e vc posto!!
    mais vê se arruma os bagulhos dos codigos ai para melhor intendimento Very Happy

    henriquerick
    henriquerick
    Veterano
    Veterano


    Mensagens : 213
    Data de inscrição : 17/02/2010
    Especialidade : Começando Programação

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  henriquerick Sáb Ago 14, 2010 5:47 am

    lesk eu tentei fazer isso ai + ta osso

    ta tudo midturado parece

    arruma ai ou fais um pronto q coloka aki pra noix
    Helgast
    Helgast
    Moderador
    Moderador


    Mensagens : 163
    Data de inscrição : 11/01/2010
    Especialidade : Web Design

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Helgast Seg Ago 30, 2010 6:52 pm

    Dei uma arrumada no teu topico, puiz os [code] pq n dava pra entende nda :b

    Agora acho q fico melhorzin
    Johnny~
    Johnny~
    Master
    Master


    Mensagens : 985
    Data de inscrição : 03/03/2010
    Especialidade : Fora pra sempre de binarys e etc! , conquer tambem!

    Personagem
    Experiência:
    [RELEASE]Painel de controle Left_bar_bleue50/50[RELEASE]Painel de controle Empty_bar_bleue  (50/50)

    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Johnny~ Seg Ago 30, 2010 8:14 pm

    Gostei vlw

    Conteúdo patrocinado


    [RELEASE]Painel de controle Empty Re: [RELEASE]Painel de controle

    Mensagem  Conteúdo patrocinado


      Data/hora atual: Ter Nov 26, 2024 9:42 pm