am facut un tutorial despre inregistrare si logare cu php si mysql, sper sa fie util la cineva
aici e ahriva cu fisierele, si mai jos voi explica ce face scriptul.
prima data trebuie creeat un tabel numit users cu campurile id,username,password si email. in arhiva e si un fisier, users.sql, la care puteti sa ii dati import in mysql si creeaza tabelul
acum sa vedem ce fac fisierele
deci, primul fisier e
index.php - Cod:
-
ob_start();
functia asta trimite header-ele in ordinea corecta, asa am citit pe php.net
- Cod:
-
session_start();
daca nu initializam sesiunea nu putem lucra cu array-ul $_SESSION
- Cod:
-
mysql_connect("localhost","root","");
mysql_select_db("test");
aici ne conectam la baza de date mysql, trebuie modificat
- Cod:
-
if(isset($_GET['q']) && ($_GET['q'] == "reg" || $_GET['q'] == "login" || $_GET['q'] == "logout" || $_GET['q'] == "alta_pagina")){
$page = $_GET['q'];
}else{
$page = "home";
}
cu liniile astea ne uitam ce valoare are
q din adresa, si daca nu are paginile declarate de noi $page ia valoarea home, adica prima pagina
- Cod:
-
include $page.".php";
includem pagina ceruta
- Cod:
-
ob_end_flush();
trimitem headerele in ordinea corecta, are legatura cu prima functie
reg.php - fisierul pentru inregistrare
cu primul if verificam daca user-ul e logat, iar cu al doilea daca a apasat butonul de inregistrare
$userCheck si $mailCheck sunt interogarile pt mysql sa verificam username-ul si emailul, sa nu mai fie inregistrate in baza de date
if-ul ala lung verifica sa fie datele corecte, o sa explic mai jos ce face fiecare conditie
- Cod:
-
empty($_POST['username'])
daca campul username a fost lasat gol, aratam eroarea
- Cod:
-
mysql_num_rows($userCheck) > 0
rezultatul trebuie sa fie mai mic ca zero, adica username-ul nu mai exista in baza de date
- Cod:
-
strlen($_POST['username']) > 16
username-ul trebuie sa fie mai mic de 16 caractere
- Cod:
-
!ereg("(^[a-zA-Z0-9]+([a-zA-Z0-9\_\-]*))$",$_POST['username'])
aici putin regex, username-ul trebuie sa inceapa numai cu o litera sau cifra, si sa contina numai litere, cifre _ si -
la fel e si la parola, ne uitam sa nu fie mai mare de 16 caractere si sa nu fie goala
- Cod:
-
!eregi("([0-9a-zA-Z_]|\-|\_)",$_POST['password1'])
iar regex, parola trebuie sa aiba numai litere cifre, _ si -
- Cod:
-
$_POST['password1'] != $_POST['password2']
parola pentru confirmare trebuie sa fie identica cu prima
- Cod:
-
$sql = mysql_query("INSERT INTO users (username, email, password) VALUES ('".$_POST['username']."','".$_POST['email']."','".md5($_POST['password1'])."')");
daca datele sunt corecte, adaugam user-ul noi in baza de date cu parola criptata md5
acum sa trecem la
login.php unde se face logarea
primul if verifica daca a fost apasat butonul de logare
- Cod:
-
$sql = mysql_query(" SELECT * FROM `users` WHERE `username` = '".$_POST['username']."' AND `password` = '".md5($_POST['password'])."'");
facem un select in baza de date cu username-ul si parola introduse, iar daca rezultatul e mai mare ca zero, inseamna ca datele sunt corecte
- Cod:
-
$info = mysql_fetch_assoc($sql);
$_SESSION['userID'] = $info['id'];
$_SESSION['username'] = $_POST['username'];
$_SESSION['email'] = $info['email'];
$_SESSION['login'] = "1";
punea in array-ul $_SESSION cateva date despre user
- Cod:
-
header("Location: index.php");
daca user-ul s-a logat il trimitem la pagina principala
in
alta_pagina.php si
home.php e numai un if unde ne uitam daca user-ul e logat sau nu si afisam continut in functie de asta
asta e tot
e valid Xhtml