PHP e MySQL parte 2 – Efectuar um login

Nesta segunda parte vou-vos mostrar como se pode efectuar um login utilizando um utilizador guardado numa base dados e como criar uma sessão para ele se manter ligado.

Toda a sequência:

  1. Criar uma ligação
  2. Efectuar um login
  3. Inserir e remover dados na base de dados
  4. Obter e apresentar os dados da base de dados

Parte 2 – Efectuar um Login


Agora que já temos a nossa classe de acesso à base de dados a funcionar (criada na parte 1 deste tutorial), vamos utiliza-la para fazer o nosso login.

Formulário de login

Primeiro precisamos de criar o nosso formulário de login e para isso vamos alterar o nosso ficheiro index.php para ficar da seguinte maneira:

<!doctype html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Ligação a base de dados</title>
    </head>
    <body>
        <form action="dbconnect.php" method="post">
            Nome do utilizador:
            <input type="text" name="username">
            Password:
            <input type="text" name="password">
            <input type="hidden" name="opcao" value="1">
            <input type="submit" value="Login">
        </form>
    </body>
</html>

Como podem ver estamos a nossa acção para o formulário é um ficheiro PHP com o nome dbconnect.php, o qual ainda não o criámos, portanto esse vai ser o nosso proximo passo.

Criação do ficheiro dbconnect.php

Esta será o nosso ficheiro PHP responsável por fazer a ligação entre os pedidos do utilizador e a nossa classe de acesso à base de dados.

E aqui está o seu código:

<?php
    include("AcessoBD.php");
    $opcao = $_REQUEST['opcao'];
    if($opcao == 1){
        $ligacaoBD = new AcessoBD();
        $user = $_REQUEST['username'];
        $pass = $_REQUEST['password'];
        if(isset($user) && isset($pass)){
            $result = $ligacaoBD->login($user,$pass);
        }
        if($result == 1){
            header("Location: loggedin.php");
        }
        header("Location: index.php");
    }
?>

Como podem ver, ao ser chamado este ficheiro, o primeiro valor que vamos ler será o valor “opcao” este é uma dos campos do formulário, é um campo escondido(hidden) e irá servir para depois definirmos que tipo de acção queremos que seja efectuada.

Estamos também a chamar a função login do ficheiro AcessoBD que ainda não existe, e é isso que vamos fazer agora.

Criação da função login

Esta será a responsável por efectuar todo o login.

O ficheiro AcessoBD.php ficará então assim:

<?php
class AcessoBD{
    private $con;
    private $host = 'localhost';
    private $user = 'root';
    private $password = 'password';
    private $database = 'teste';
        function criarCon(){
            $this->con = mysql_connect($host, $user, $password);
            if (!$this->con) {
                die('Não foi possível conectar: ' . mysql_error());
            }
            $db_selected = mysql_select_db($database, $this->con);
            return $db_selected;
        }
        function login($user,$pass){
            $result = $this->criarCon();
            if($result == 1){
                $password = $this->getUserPass($user);
                if (($pass == $password) && ($password != 0)){
                    include("sessionmanager.php");
                    $sessionman = new sessionmanager();
                    $sessionman->criarUser($user);
                    $return 1;
                }
            }
            return 0;
        }
        private function getUserPass($user){
            $query = sprintf("SELECT username, password FROM users WHERE username='%s'",mysql_real_escape_string($user));
            $result = mysql_query($query,$this->con);
            if (mysql_num_rows($result) > 0){
                $userdata = mysql_fetch_assoc($data);
                $mysql_close($this->con);
                return $userdata['password'];
            }
            $mysql_close($this->con);
            return 0;
        }
    }
?>

Como deve ter reparado criámos também a função getUserPass() responsável por retornar a palavra pass do utilizador, no entanto esta é privada o que significa que só pode ser acedida dentro da classe AcessoBD isto para não haver falhas na segurança.

Utilizamos também um gestor de sessões chamado sessionmanager.php e esse é o nosso próximo passo.

Gestor de sessões

O nosso gestor de sessões por enquanto vai apenas criar uma sessão para o utilizador que acabou de fazer o seu login.

O ficheiro é o sessionmanager.php:

<?php
class sessionmanager{
    function criarUser($user){
        session_start();
        $_SESSION['username'] = $user;
    }
    function getNome(){
        return $_SESSION['username'];
    }
}
?>

Como vêm é muito simples, recebe um nome de utilizador e adiciona à variável de sessão.

Neste momento temos o nosso login completo, so nos faltas a página loggedin.php para o qual o utilizador está a ser direccionado no caso de o login ter sucesso.

O final

Página loggedin.php:

<!doctype html>
<html>
<head>
</head>
<body>
    <?php 
        include("sessionmanager.php");
        $sessionman = new sessionmanager();
    ?>
Parabens <?php $sessionman->getNome(); ?>, login efectuado com sucesso.
</body>
</html>

No próximo passo vou escrever sobre como escrever remover e editar a base de dados.

Espero ter conseguido ser explicito e no caso de terem alguma duvida basta perguntarem.

Não se esqueçam de espreitar a página do facebook.

Leave a comment