← Tutoriais

Sistema de Registo/Login/Logout

Lida 19987 vezes

Offline

mix_93 
Membro
Mensagens 1630 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1


1. Vamos começar por ir ao phpMyAdmin, e colocar a nossa base de dados, poderá ser o exemplo que vou apresentar ou outro feito por vocês.
Código:
Citar
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL auto_increment,
`username` varchar(25) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=lati


2. Agora vamos configurar o ficheiro em .php que vai fazer ligação á base de dados(o nome da página poderá ser config.php).
Código:
Citar
<?php
mysql_connect("tipo de mysql", "Utilizador_Mysql", "PassWord_Mysql") or die(mysql_error()); // connects to database or outputs an error
mysql_select_db("database name") or die(mysql_error()); // selects database from chosen server or outputs error
?>


3. Depois da conexão entre a base de dados e o ftp estar feita, vamos configurar as outras páginas(em .php ou .html), para os utilizadores conseguírem fazer as funções de registo/entrar/sair, do web site. Vamos começar pela página entrar.html
Código:
Citar
<form method="post" action="entrar.php">
<label>Nome de Utilizador</label><br/><input name="username"/><br/>
<label>Password</label><br/><input name="password" type="password"/><br/>
<input type="submit" name="Entrar" value="login"/>
</form>


4. Depois da página em html, que pode levar um incluede em qualquer página, vamos criar a página de registo(registo.php).
Código:
Citar
<?php
require_once "config.php"; // included database information
if(!isset($_POST['join'])){
echo "<form method=\"post\" action=\"registo.php\">
<label>Nome de Utilizador</label><br/><input name=\"username\"/><br/>
<label>Password</label><br/><input name=\"password\" type=\"password\"/><br/>
<input type=\"submit\" name=\"join\" value=\"register\"/>
</form>";
}else{
$pass = sha1($_POST['password']);
$user = mysql_real_escape_string($_POST['username']);
mysql_query("INSERT INTO users (id, username, password) VALUES (NULL, '$user', '$pass')") or die("Alguma coisa correu mal durante o registo. MySQL erro: ".mysql_error());
echo "Registo Completo - <a href=\"entrar.html\">Entrar na Conta</a>.";
}
?>


5. Depois da página de registo feita vamos criar as configurações para a de entrada(entrar.php)
Código:
Citar
<?php
require_once "config.php"; // include the database information
$sql = mysql_query("SELECT * FROM users WHERE username='".addslashes($_POST['username'])."'") or die("O nome de Utilizador está incorrecto. MySQL erro:".mysql_error()); // checks if username exists
$result = mysql_fetch_array($sql); // puts the database information into an array

if($result[’password’] == sha1($_POST[’password’])) { // if the passwords match
session_start(); // start the session
header(”Cache-control: private”);
$_SESSION[”sessioname”] = $_POST[’username’];
header(”location: seguranca.php”);
}else{
echo “Dados Errados, tente de novo”;
}

?>


6. Para proteger os dados dos nossos utilizadores vamos, criar uma página de protecção(seguranca.php)
Código:
Citar
<?php
session_start(); // session started

if(!isset($_SESSION[”sessioname”])){
echo “ACESSO NEGADO”;
}else{
// Your protected stuff goes here if you wish to echo the username echo $_SESSION[”sessioname”]
echo “Bem-Vindo “.$_SESSION[”sessioname”];
}
?>


7. Agora para finalizar, vamos criar a página de saída de conta(sair.php)
Código:
Citar
<?php
session_start();
unset($_SESSION["sessioname"]); // unset the variable
session_destroy(); // detroy it
header("location: index.php"); // head home
?>


Tutorial: In http://extremedesigntuga.com/ - by Mix_93(todos os direitos são reservados, se quiserem copiar metam os direitos de autor, para pelo menos valorizar o trabalho dos outros)
Offline

nram 
Membro
Mensagens 777 Gostos 0
Feedback +1

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Mais ou menos correcto.. Falta-te formatar o código! Isso ajuda bastante à interpretação do código, outra dica, deves introduzir comentários principalmente numa explicação.

No SQL acho que devias mostrar em modo gráfico, através do PHPMYADMIN para uma aprendizagem melhor, pois assim, introduzes um conjunto de "palavras" onde muita gente não vai perceber completamente nada!

Quanto ao código é muito discutível, está bom!  (embora não tenha lido a maioria do código).

Cumprimentos. 
Offline

mix_93 
Membro
Mensagens 1630 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Talvez a ideia, de apresentar imagens seja boa, vou usar talvez um vídeo de demonstração para a próxima para o acesso a cada área.
Offline

goodsound 
Membro
Mensagens 2485 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3

desculpa mas por exemplo registro não é português, a não ser que sejas brasileiro, existem aí algumas expressões de caracter brasileiro ou referentes â língua brasileira...
Offline

mix_93 
Membro
Mensagens 1630 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

desculpa mas por exemplo registro não é português, a não ser que sejas brasileiro, existem aí algumas expressões de caracter brasileiro ou referentes â língua brasileira...
Foi tudo feito por mim, a palavra registro ou registo não me deu erro nem dá no meu firefox, por isso é que nem notei.
Offline

goodsound 
Membro
Mensagens 2485 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3

desculpa mas por exemplo registro não é português, a não ser que sejas brasileiro, existem aí algumas expressões de caracter brasileiro ou referentes â língua brasileira...
Foi tudo feito por mim, a palavra registro ou registo não me deu erro nem dá no meu firefox, por isso é que nem notei.
como queiras, embora aqui não referi browsers, mas, fiz isto como um reparo por estar a expressão errada.
Offline

anjo2 
Membro
Mensagens 3020 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Programação com objectos:


mysql.php
Código: [Seleccione]
<?php

define
("BASE_DBCONNECTERROR","Ocorreu um erro na ligação à base de dados. Tente mais tarde ou contacte o programador. Obrigado!");
define("BASE_DBSELECTERROR","Ocorreu um erro na ligação à tabela da base de dados. Tente mais tarde ou contacte contacte o programador. Obrigado!");



class 
database
{

    var 
$dbconnect;
    var 
$query_result;
    var 
$row = array();
    
    
    function 
db_connect ($dbhost$dbname$dbuser$dbpasswd)
    {
        
$this->dbhost $dbhost;
        
$this->dbuser $dbuser;
        
$this->dbpasswd $dbpasswd;
        
$this->dbname $dbname;
        
$this->dbconnect = @mysql_pconnect($this->dbhost,$this->dbuser,$this->dbpasswd) or die (BASE_DBCONNECTERROR); // Connect to the database
        
        
if ($this->dbconnect)
        {
            
$this->dbselect = @mysql_select_db($this->dbname) or die (BASE_DBSELECTERROR); // Select database
        
}
        
        return 
$this->dbconnect;
    }


    function 
db_query ($sql)
    {
        
// unset($this->$query_result);
        
$this->query_result = @mysql_query($sql,$this->dbconnect);
        
        return 
$this->query_result;
    }
    
    
    function 
db_close ()
    {
        if(
$this->dbconnect)
        {
            if(
$this->query_result)
            {
                @
mysql_free_result($this->query_result);
            }
            
$result = @mysql_close($this->dbconnect);
            return 
$result;
        }
        else
        {
            return 
false;
        }
    }
    
    
    function 
db_fetcharray ($result 0)
    {
        if(!
$result)
        {
            
$result $this->query_result;
        }
        if(
$result)
        {
        
$this->row[$result] = @mysql_fetch_array($resultMYSQL_ASSOC);
        
        return 
$this->row[$result];
        }
    }


    function 
db_fetchrow ($result 0)
    {
        if(!
$result)
        {
            
$result $this->query_result;
        }
        if(
$result)
        {
        
$this->row[$result] = @mysql_fetch_row($result);
        
        return 
$this->row[$result];
        }
    }

    
    function 
db_num_rows ($result 0)
    {
        if(!
$result)
        {
            
$result $this->query_result;
        }
        if(
$result)
        {
        
$this->row[$result] = @mysql_num_rows($result);
        
        return 
$this->row[$result];
        }
    }
}

?>


vars.php
Código: [Seleccione]
<?php
/* definição das variáveis */

/* base de dados mysql*/
    
$dbuser='dbuser';
    
$dbpasswd='dbpasswd';
    
$dbhost='localhost';
    
$dbname='dbname';
    

?>


login.php
Código: [Seleccione]
<?php
session_start
();

require_once(
"data/vars.php");
require_once(
"data/mysql.php");


$post_username $_POST['username'];
$post_password md5($_POST['password']);

$db = new database();
$db->db_connect($dbhost$dbname$dbuser$dbpasswd);

$sql_user "SELECT username, password, id_membro FROM equipa WHERE username='$post_username'";
$result_user $db->db_query($sql_user);

if(!
$result_user)
{
    die (
"erro de query sql");
}

while (
$row mysql_fetch_array($result_user))
{
$username $row['username'];
$passwd $row['password'];
$_SESSION["id_user"] = $row['id_membro'];
}

if ((
$username == $post_username) && ($passwd == $post_password))
{
    
session_start();
        
$_SESSION["login"] = true;
    
Header("Location: main.php");
    die();
}
else
{
    
$_SESSION['login_error'] = "Ja introduzias os dados correctamente...";
        
$_SESSION["login"] = false;
    
Header("Location: index.php");
    die();
}

?>


logout.php
Código: [Seleccione]
<?php
session_start
();

    
$_SESSION["login"] = false;
    
Header("Location: index.php");
    die();

?>


session_start.php
Código: [Seleccione]
<?php
session_start
();
if (!
$_SESSION['login'])
{
        include(
"error.html");
    die ();
}
?>

Adicionar em todos os php:
Código: [Seleccione]
<?php include ("session_start.php"?>
Fonte: Techzone
Offline

goodsound 
Membro
Mensagens 2485 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3

óh anjo2, esse está excelente e bem mais simplificado
;)
Offline

mix_93 
Membro
Mensagens 1630 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

óh anjo2, esse está excelente e bem mais simplificado
;)
Isso é discutível, para a próxima penso duas vezes antes de postar alguma coisa aqui, para comentários de certas pessoas.
Offline

goodsound 
Membro
Mensagens 2485 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3

óh anjo2, esse está excelente e bem mais simplificado
;)
Isso é discutível, para a próxima penso duas vezes antes de postar alguma coisa aqui, para comentários de certas pessoas.
acho que também é muito bom que posts, mas só dei a minha opinião, continua tu também a postar por cá, se forem feitos por ti tudo bem se não põe a fonte de onde retiraste.
Offline

anjo2 
Membro
Mensagens 3020 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

óh anjo2, esse está excelente e bem mais simplificado
;)
Isso é discutível, para a próxima penso duas vezes antes de postar alguma coisa aqui, para comentários de certas pessoas.
O php5, e mesmo o próximo php6 são muito bons para programar com objectos, pelo que cada vez mais o php será uma linguagem orientada a objectos. Tem pós e contras como tudo. São 2 formas de fazer que diferem muito, de qualquer forma existe muitas maneiras de fazer sistema de login.
Offline

mix_93 
Membro
Mensagens 1630 Gostos 0
Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

óh anjo2, esse está excelente e bem mais simplificado
;)
Isso é discutível, para a próxima penso duas vezes antes de postar alguma coisa aqui, para comentários de certas pessoas.
O php5, e mesmo o próximo php6 são muito bons para programar com objectos, pelo que cada vez mais o php será uma linguagem orientada a objectos. Tem pós e contras como tudo. São 2 formas de fazer que diferem muito, de qualquer forma existe muitas maneiras de fazer sistema de login.

Eu fiz dessa maneira para poderem colocar o código em qualquer página tanto html como em php.
Offline

Diogo Pinto 
Administrador
Mensagens 4400 Gostos 371
Feedback +4

Troféus totais: 37
Trófeus: (Ver todos)
Avatar Search Level 6 Linux User Mobile User Super Combination Combination Topic Starter 50 Poll Votes 10 Poll Votes

óh anjo2, esse está excelente e bem mais simplificado
;)

Discordo... O do mix_93 a meu parecer é mais facil de compreender e bem mais simplificado... ;)

Continua mix... ;) Parabéns ao anjo2 também que "converteu" o código todo... ;)
Offline

anjo2 
Membro
Mensagens 3020 Gostos 0
Troféus totais: 31
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

Não fui eu que fiz, mas scripts de login existe muitos e não foi tirado do tópico inicial, até porque um usa sha1 e o outro md5. Seria melhor utilizar md5...
Offline

nram 
Membro
Mensagens 777 Gostos 0
Feedback +1

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Não fui eu que fiz, mas scripts de login existe muitos e não foi tirado do tópico inicial, até porque um usa sha1 e o outro md5. Seria melhor utilizar md5...

loool... lá entramos nós! SHA1?? MD5? sempre preferi MD5 porque  come menos recursos... SHA1 é só uma inovação do MD5.
Bem, ambas são muito difíceis de desencriptar, digámos é possível, mas um processador normal demoraria anos, para desencriptar com um processador quântico demoraria segundos. A forma usada é mesmo Brute Force, para descobrir a "pass".

Todo o código é discutível, mas continuo a dizer, quando fizerem estes tipo de posts, façam comentário no código para quem não souber perceber.