Sign in to follow this  
Cornel Iulian

[Tutorial] PHP Login / Register (Logare / Inregistrare)

1 post in this topic

Mai întâi introducem datele bazei de date în fisierul conf_global.php:

<?php

//--------------------------------------------------
// Editati cele 4 variabile de mai jos
//--------------------------------------------------

$sql_host = 'localhost';
$sql_user = 'utilizator';
$sql_parola = 'parola';
$sql_baza_de_date = 'baza_de_date';

/**
 * Functia de conectare la baza de date
 * 
 * @param $host
 * @param $user
 * @param $pass
 * @param $db
 * @return connection
 */

function conectare($host, $user, $pass, $db) 
{ 
	$mysqli = new mysqli($host, $user, $pass, $db);
	if($mysqli->connect_error) 
	{
		die('Eroare la conectare (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
	}
	return $mysqli;
}


$conexiune = conectare($sql_host, $sql_user, $sql_parola, $sql_baza_de_date);


?>

Apoi cream tabelul `membri` cu urmatoarea comanda SQL:

CREATE TABLE IF NOT EXISTS `membri` (
`id` int(11) NOT NULL,
  `nume` varchar(255) NOT NULL,
  `parola` varchar(1000) NOT NULL,
  `email` varchar(50) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Vom avea 4 câmpuri:

  • id - Auto Increment
  • nume
  • parola
  • email

Daca mai doriti, puteti adauga dupa :)

În fisierul index.php, adaugam sus de tot

<?php 
require_once('functii.php');
?>

În locul unde vrem sa adaugam link-urile de Logare / Înregistrare / Delogare, adaugam

<?php
echo member_navigation();
?>

Iar în locul unde vrem sa adaugam casutele de logare / înregistrare, adaugam:

<?php
echo content();
?>

Vor aparea niste erori, deoarece facem apel la niste functii nedeclarate (nu îmi place sa aglomerez index-ul, asa ca prefer sa fac totul în fisiere separate)

Acum cream fisierul functii.php.

Sus de tot adaugam

<?php
session_start(); // începerea sesiunii
require_once('conf_global.php'); // fisierul care include conectarea la baza de date

Pentru a cripta parola în baza de date, ne vom folosi de functia urmatoare: (nu folosesc md5 simplu deoarece am vazut site-uri cu sute de mii / milioane parole salvate, cu echivalentul lor în md5)

function criptare ($text)
{
	return hash('sha512', hash('sha256', sha1(sha1(sha1(md5(md5($text)))))));
}

Pentru a afisa link-ul de logare / înregistrare / delogare, includem urmatoarea functie:

function member_navigation()
{
	if (!isset($_SESSION['uid']))
	{
		echo "<a href='?action=login'>Autentificare</a> | <a href='?action=register'>Înregistrare</a>";
	}
	else
	{
		echo "Bun venit, ".$_SESSION['username'].". <a href='?action=logout'>Delogare</a>";
	}
}

Pentru continutul site-ului, adaugam functia urmatoare:

function content()
{
	if (!isset($_GET['action'])) // link-ul pe care ne aflam este index.php
	{	
		echo 'Continutul site-ului';
	}
	else
	{
		$action = $_GET['action'];
		if ($action == 'login') // link-ul este index.php?action=login
		{
			echo login();
		}
		elseif ($action == 'register') // link-ul este index.php?action=register
		{	
			echo register();
		}
		else if ($action == 'logout') // link-ul este index.php?action=logout
		{	
			logout();
		}
	}
}

În continuare vom include cele 3 functii de mai sus (login, register si logout).

Functia login:

function login()
{
    global $conexiune;
    $mesaj = '';
    
    /* Formularul de logare a fost trimis */
    if (isset($_POST['user']))
    {
        $user = $_POST['user'];
        $pass = $_POST['pass'];

        //-----------------------------------------
        // Verificam daca a ramas cel putin o
        // casuta necompletata
        //-----------------------------------------
        
        if ($user == '' OR $pass == '')
        {
            $mesaj = '<br /><b style="color: darkred">Cel putin un câmp a ramas necompletat!</b><br /><br />';
        }
        
        else
        {
            $sql = "SELECT * FROM `membri` WHERE nume='".htmlentities($user)."' AND parola='".criptare($pass)."' LIMIT 1";
            
            $res = mysqli_query($conexiune, $sql) or die(mysql_Error());
            
            if (mysqli_num_rows($res) == 1)
            {
                $rand = mysqli_fetch_array($res);
                
                $_SESSION['uid'] = $rand['id'];
                $_SESSION['username'] = $rand['nume'];
                
                //-----------------------------------------
                // Redirectionare pe pagina principala,
                // odata ce logarea s-a efectuat cu succes
                //-----------------------------------------
                
                echo '<meta http-equiv="refresh" content="0; url=index.php" />';
                exit();
            }
            
            //-----------------------------------------
            // Nu am gasit niciun membru in baza de
            // date cu datele introduse
            //-----------------------------------------
            
            else
            {
                $mesaj = '<br /><b style="color: darkred">Date incorecte!</b><br /><br />';
            }
        }
    }
    
    //-----------------------------------------
    // Formularul de logare
    //-----------------------------------------
    
$HTML = <<<PHP
    <center><span style="font-size: 40px;">Autentificare</span></center>
    $mesaj
    <form action="" method="post">
    <b>Utilizator</b><br /> <input type="text" name="user" value="" /><br /><br />
    <b>Parola</b><br /> <input type="password" name="pass" value="" ><br>
    <input type="submit" name="Login" value="Login" >
    </form>
PHP;
    
    return $HTML;
    
}

Functia de înregistrare:

function register()
{
        global $conexiune;
	$mesaj = "";
	
	if (isset($_POST['user']))
	{
	
		$user = $_POST['user'];
		$pass1 = $_POST['pass1'];
		$pass2 = $_POST['pass2'];
		$email = $_POST['email'];

                //----------------------------------------------
                // Cel putin o casuta a ramas necompletata
                //----------------------------------------------
		
		if ($user == '' OR $pass1 == '' OR $pass2 == '' OR $email == '')
		{
			$mesaj .= '<b style="color: darkred">Cel putin o casuta a ramas necompletata!<br /><br /></b>';
		}

                //----------------------------------------------
                // Parolele introduse nu coincid
                //----------------------------------------------
		
		if ($pass1 != $pass2)
		{
			$mesaj .= '<b style="color: darkred">Parolele nu se potrivesc<br /><br /></b>';
		}

                //----------------------------------------------
                // Adresa email este invalida
                //----------------------------------------------
		
		if (!filter_var($email, FILTER_VALIDATE_EMAIL))
		{
			$mesaj .= '<b style="color: darkred">Adresa email este invalida<br /><br /></b>';
		}
		
		if ($mesaj == "") // Nu a aparut niciun mesaj de eroare
		{
		
			//-----------------------------------------
			// Verificam daca nu exista user cu acelasi
			// username / aceeasi adresa email
			//-----------------------------------------
			
			$cerereSQL = 'SELECT * FROM membri';
			$rezultat = mysqli_query($conexiune, $cerereSQL) or die(mysql_ERROR());
			
			while($rand = mysqli_fetch_array($rezultat)) 
			{
				
				//-----------------------------------------
				// Afisam mesaj de eroare în caz ca 
				// username-ul sau adresa email introdusa
				// este / sunt deja folosite de catre
				// altcineva
				//-----------------------------------------
				
				if ($rand['nume'] == $user  OR  $rand['email'] == $email)
				{
					$mesaj .='<b style="color: darkred;">Username / email folosite</b><br /><br />';
					break;
				}
				
			}
			
			if ($mesaj == "")
			{
				
				//-----------------------------------------
				// Totul este OK, deci putem insera datele
				// introduse în baza de date
				//-----------------------------------------
				
				$sql = "INSERT INTO `membri`(`nume`, `parola`, `email`) 
                                        VALUES ('".htmlentities($user)."','".criptare($pass1)."','".$email."')";
				
				mysqli_query($conexiune, $sql) or die(mysql_Error());
				
				echo "Înregistrarea a avut loc cu succes. Veti fi redirectionat pe pagina principala";
				echo  '<meta http-equiv="refresh" content="1; url=index.php" />';
				exit();
			}
		}
	}
	
	$HTML = <<<INFO
	<center><span style="font-size: 40px;"nregistrare</span></center>
	$mesaj
	<form action="" method="post">
    <b>Utilizator</b><br /> <input type="text" name="user" value="" /><br />
    <b>Parola</b><br /> <input type="password" name="pass1" value="" ><br>
	<b>Reintrodu parola</b><br /> <input type="password" name="pass2" value="" ><br>
	<b>Adresa email</b><br /> <input type="text" name="email" value="" /><br />
	<input type="submit" name="Login" value="Creeaza cont" >
	</form>
INFO;

	return $HTML;

}

Functia delogare:

function logout()
{
	session_destroy();
	echo '<meta http-equiv="refresh" content="0; url=index.php" />';
	exit();
}

La finalul fisierului adaugam

?>

Acesta este primul meu tutorial PHP. Daca apar nereguli / aveti vreo obiectie (sunt începator), postati aici :D

P.S. Da, daca ai pierdut parola, esti ca mort.

Ma gândesc zilele astea la o functie de recuperare a parolei.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this