Izrada jednostavnog sustava registracije korisnika u PHP-u i MySQL-u. Stvaranje nevjerojatno jednostavnog sustava registracije u PHP-u i MySQL-u Kukavna registracija korisnika php

Ako jedan od odjeljaka svoje web stranice trebate učiniti dostupnim ograničenom, ali neodređenom krugu ljudi, to ćete najlakše učiniti registracijom i autorizacijom korisnika. Postoji mnogo načina za autorizaciju korisnika. Možete koristiti i alate web poslužitelja i alate za programski jezik. Govorit ćemo o slučaju kada se koriste PHP sesije.

Vjerojatno biste željeli vidjeti moderniji način stvaranja ovog oblika. Još uvijek nemam planove u potpunosti ga predstaviti na moderan i relevantan način, ali možete vidjeti da se obrazac za povratne informacije može izgraditi korištenjem objektno orijentiranih tehnika u PHP-u.

Prvo, raspravimo sve korake koje ćemo poduzeti sljedeće. Što nam uopće treba? Treba nam skripta koja će registrirati korisnika, autorizirati korisnika, preusmjeriti korisnika negdje nakon autorizacije. Također ćemo morati izraditi stranicu koja će biti zaštićena od pristupa neovlaštenih korisnika. Za registraciju i autorizaciju morat ćemo izraditi HTML obrasce. Podatke o registriranim korisnicima pohranit ćemo u bazu podataka. To znači da nam i dalje treba skripta za spajanje na DBMS. Sav naš posao obavljat će funkcije koje sami napišemo. Ove ćemo funkcije spremiti u posebnu datoteku.

Dakle, trebamo sljedeće datoteke:

  • povezivanje sa DBMS-om;
  • prilagođene funkcije;
  • ovlaštenje;
  • registracija;
  • zaštićena stranica;
  • skripta za isključivanje korisnika;
  • skripta koja provjerava status autorizacije korisnika;
  • stilski list za najjednostavniji dizajn naših stranica.

Sve će to biti besmisleno ako u bazi nemate odgovarajuću tablicu. Pokrenite svoj alat za upravljanje DBMS-om (PhpMyAdmin ili naredbeni redak, što vam više odgovara) i u njemu pokrenite sljedeći upit:

CREATE TABLE `korisnici` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` vremenska oznaka NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Datoteke skripte ću imenovati ovako (sve će biti u jednom direktoriju):

  • baza podataka.php;
  • funkcije.php;
  • prijava.php;
  • registracija.php;
  • index.php;
  • odjava.php;
  • provjeriAuth.php;
  • stil.css.

Svrha svake od njih, siguran sam, jasna vam je. Počnimo sa skriptom za povezivanje na DBMS. Već ste vidjeli. Samo spremite kôd za ovu skriptu u datoteku pod nazivom database.php. Deklarirati ćemo prilagođene funkcije u datoteci functions.php. Kako će sve ovo funkcionirati? Neovlašteni korisnik pokušava pristupiti zaštićenom dokumentu index.php, sustav provjerava da li je korisnik ovlašten, ako je korisnik neovlašten preusmjerava se na stranicu za autorizaciju. Na stranici za prijavu korisnik bi trebao vidjeti obrazac za autorizaciju. Učinimo to.

Autorizacija korisnika

Registar.



Sada našem obliku treba dati neki oblik. Istovremeno ćemo definirati pravila za ostale elemente. Gledajući unaprijed, predstavit ću sadržaj lista stilova u cijelosti.

/* style.css datoteka */ .row ( margin-bottom:10px; width:220px; ) .row label ( display:block; font-weight:bold; ) .row input.text ( font-size:1.2em; padding:2px 5px;) .to_reg (font-size:0.9em;) .instruction (font-size:0.8em; color:#aaaaaa; margin-left:2px; cursor:default;) .error (color:red; margin-left:3px; )

Ako je sve učinjeno kako treba, trebali biste imati sljedeće u svom pregledniku:

Naravno, nemamo još niti jednog registriranog korisnika, a da biste se prijavili, morate se registrirati. Napravimo obrazac za registraciju.

Registracija korisnika

" />


Vjerojatno ste primijetili da u HTML kodu postoje PHP varijable. Oni su sadržaji atributa tekstualnih polja obrazaca, sadržaji spremnika dizajniranih za prikaz pogrešaka. Ali nismo inicijalizirali ove varijable. Učinimo to.

Registracija korisnika

" />
Korisničko ime može sadržavati samo latinična slova, brojeve i simbole "_", "-", ".". Korisničko ime ne smije biti kraće od 4 znaka i ne duže od 16 znakova
U zaporci možete koristiti samo latinične znakove, brojeve i simbole "_", "!", "(", ")". Lozinka ne smije biti kraća od 6 znakova i ne duža od 16 znakova
Ponovite prethodno unesenu lozinku


U atributu akcije oznake obrasca nije naveden parametar. U tom slučaju, prilikom slanja podataka obrasca, oni će biti obrađeni u istoj skripti iz koje su poslani. To znači da moramo napisati kod koji obrađuje podatke obrasca. Ali prvo raspravimo algoritam za njihovu obradu.

Polja za prijavu i lozinku ne moraju biti prazna. Zatim morate provjeriti usklađenost prijave sa zahtjevima. Lozinka također mora ispunjavati opisane zahtjeve, a ponovno navedena lozinka mora joj odgovarati i, osim toga, moraju biti identične. Ako bilo koji od ovih uvjeta nije ispunjen, obrada podataka obrasca mora se zaustaviti, odgovarajuće upozorenje mora biti upisano u niz poruka o pogrešci i ono mora biti prikazano korisniku. Radi praktičnosti korisnika, spremit ćemo prijavu koju je unio (ako ju je naveo) upisujući njezinu vrijednost u polje $fields.

Ako je sve u redu, u prozoru vašeg preglednika, kada pristupite dokumentu registration.php, trebali biste vidjeti nešto poput ovoga:

Sada, recimo da je korisnik kliknuo na gumb za registraciju i nije ispunio polja obrasca. Prema našem algoritmu, prijava i lozinka ne mogu biti prazni. Ako ovaj uvjet nije ispunjen, registracija nije moguća. Imamo na umu da se obrada podataka obrasca odvija u trenutnom scenariju. To znači da moramo promijeniti njegov kod dodavanjem odgovarajućih provjera. Raspravimo odmah o sljedećim provjerama. Ako ste unijeli i prijavu i lozinku, morate provjeriti njihovu usklađenost s navedenim zahtjevima. Za provjeru prijave i lozinke izradit ćemo prilagođene funkcije u datoteci functions.php.

/** * functions.php * Datoteka s prilagođenim funkcijama */ // Povežite datoteku s parametrima veze na DBMS require_once("database.php"); // Provjera funkcije korisničkog imena checkLogin($str) ( // Inicijaliziranje varijable s mogućom porukom o pogrešci $error = ""; // Ako linija za prijavu nedostaje, vrati poruku o pogrešci if(!$str) ( $error = " Niste unijeli korisničko ime"; return $error; ) /** * Provjerite korisničko ime koristeći regularne izraze * Prijava ne smije biti kraća od 4, ne duža od 16 znakova * Mora sadržavati znakove latinične abecede, brojevi, * može sadržavati znakove "_", "-", "." */ $pattern = "/^[-_.a-z\d](4,16)$/i"; $result = preg_match ($pattern, $str) ; // Ako provjera ne uspije, vrati poruku o pogrešci if(!$result) ( $error = "Nevažeći znakovi u korisničkom imenu ili je korisničko ime prekratko (dugo)"; return $error; ) // Ako je sve u redu, vratite vrijednost true return true; ) // Provjera korisničke funkcije zaporke checkPassword($str) ( // Inicijalizirajte varijablu s mogućom porukom o pogrešci $error = ""; // Ako postoji nema linije za prijavu, vrati poruku o pogrešci if(!$ str) ( $error = "Niste unijeli lozinku"; povratak $greška; ) /** * Provjera korisničke lozinke pomoću regularnih izraza * Lozinka ne smije biti kraća od 6, ne duža od 16 znakova * Mora sadržavati latinična slova, brojeve, * može sadržavati znakove "_", "!", " (", ")" */ $uzorak = "/^[_!)(.a-z\d](6,16)$/i"; $rezultat = preg_match($uzorak, $str); // Ako provjera nije prošla, vrati poruku o pogrešci if(!$result) ( $error = "Nevažeći znakovi u korisničkoj lozinci ili je lozinka prekratka (duga)"; return $error; ) // Ako je sve u redu, vrati vrijednost true vraća true; )

Sada moramo modificirati datoteku registration.php kako bismo omogućili funkcije koje smo deklarirali. U skriptu ćemo dodati uvjet koji provjerava je li pritisnut gumb za registraciju. Unutar ovog uvjeta pokreće se provjera prijave i lozinke. Ako bilo koja od provjera ne uspije, ponovno prikazujemo obrazac i prikazujemo poruku o pogrešci. Ukoliko nema grešaka, registriramo korisnika, više ne prikazujemo obrazac za registraciju, obavještavamo korisnika o uspješnoj registraciji te ga funkcijom header() preusmjeravamo na obrazac za autorizaciju.

Uspješno ste se registrirali u sustav. Sada ćete biti preusmjereni na stranicu za prijavu. Ako se to ne dogodi, idite na njega pomoću izravne veze.

"; header("Refresh: 5; URL = login.php"); ) // U suprotnom, obavijestite korisnika o pogrešci else ( $errors["full_error"] = $reg; ) ) ) ?> Registracija korisnika
" />
Korisničko ime može sadržavati samo latinična slova, brojeve i simbole "_", "-", ".". Korisničko ime ne smije biti kraće od 4 znaka i ne duže od 16 znakova
U zaporci možete koristiti samo latinične znakove, brojeve i simbole "_", "!", "(", ")". Lozinka ne smije biti kraća od 6 znakova i ne duža od 16 znakova
Ponovite prethodno unesenu lozinku


Trebali ste primijetiti još jednu novu funkciju u skripti - register() . Ali to još nismo objavili. Učinimo to.

// Funkcija registracije korisnika function registration($login, $password) ( // Inicijaliziraj varijablu s mogućom porukom o pogrešci $error = ""; // Ako nema retka za prijavu, vrati poruku o pogrešci if(!$login) ( $ error = "Nije navedena prijava"; return $error; ) elseif(!$password) ( $error = "Nije navedena lozinka"; return $error; ) // Provjerite je li korisnik već registriran // Povežite se na DBMS connect() ; // Napišite niz upita $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Napravite upit bazi podataka $query = mysql_query ($sql) ili die( ""); // Gledamo broj korisnika s ovom prijavom, ako postoji barem jedan, // vraćamo poruku o pogrešci if(mysql_num_rows($query) > 0) ( $error = "Korisnik s navedenom prijavom je već registriran"; return $ error; ) // Ako ne postoji takav korisnik, registrirajte ga // Napišite niz upita $sql = "INSERT INTO `users` (`id`,` login`,`password`) VRIJEDNOSTI (NULL, "" . $login . " ","" . $lozinka. "")"; // Napravite upit bazi podataka $query = mysql_query($sql) ili die("

Nije moguće dodati korisnika: " . mysql_error() . ". Došlo je do pogreške u retku ". __LINE__."

"); // Ne zaboravite prekinuti vezu s DBMS-om mysql_close(); // Vrati vrijednost true, što ukazuje na uspješnu registraciju korisnika return true; )

Ako je sve u redu, vaš će korisnik biti registriran. Možete testirati obrazac. Pokušajte registrirati korisnike s istim prijavama. Nakon uspješne registracije, korisnik će biti preusmjeren na obrazac za autorizaciju. Prethodno smo jednostavno stvorili oznake za prikaz ovog obrasca. Budući da u atributu radnje nije naveden parametar, podaci poslani putem obrasca bit će obrađeni u istoj skripti. To znači da moramo napisati kod za obradu i dodati ga u login.php dokument.

Autorizacija korisnika

;">

Ako niste registrirani u sustavu, registrirajte se.



Vjerojatno ste primijetili da u autorizacijskoj skripti sada imamo još jednu nepoznatu funkciju - authorization() . Ova funkcija mora autorizirati korisnika tako da najprije provjeri postoji li registrirani korisnik s istom prijavom i lozinkom u bazi podataka. Ako se takav korisnik ne pronađe, autorizacija će biti prekinuta i prikazat će se poruka o neuspjehu. Ako je provjera uspješna, funkcija autorizacije() pokrenut će sesiju i u nju upisati korisničku vrijednost za prijavu i lozinku, obavijestiti skriptu da je autorizacija bila uspješna, a skripta će preusmjeriti korisnika na zaštićenu stranicu resursa.

/** * Funkcija autorizacije korisnika. * Autorizacija korisnika bit će provedena * pomoću PHP sesija. */ autorizacija funkcije($login, $password) ( // Inicijalizirajte varijablu s mogućom porukom o pogrešci $error = ""; // Ako nema retka za prijavu, vratite poruku o pogrešci if(!$login) ( $error = " Prijava nije navedena"; return $error; ) elseif(!$password) ( $error = "Password not specified"; return $error; ) // Provjerite je li korisnik već registriran // Povežite se na DBMS connect( ); // Moramo provjeriti je li takav korisnik među registriranima // Sastavite niz upita $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND ` password`="".$password ."""; // Izvršite upit $query = mysql_query($sql) ili die("

Nije moguće izvršiti upit: " . mysql_error() . ". Došlo je do pogreške u retku ". __LINE__."

"); // Ako ne postoji korisnik s takvim podacima, vrati poruku o pogrešci if(mysql_num_rows($query) == 0) ( $error = "Korisnik s navedenim podacima nije registriran"; return $error; ) // Ako korisnik postoji, pokrenite sesiju session_start(); // I upišite korisničku prijavu i lozinku // Za ovo koristimo superglobalni niz $_SESSION $_SESSION["login"] = $login; $_SESSION[ "password"] = $password; / / Ne zaboravite zatvoriti vezu s bazom podataka mysql_close(); // Vrati true za označavanje uspješne korisničke autorizacije return true; )

Kada korisnik dođe na zaštićenu stranicu, trebali biste provjeriti ispravnost njegovih autorizacijskih podataka. Da bismo to učinili, potrebna nam je još jedna prilagođena funkcija. Nazovimo to checkAuth() . Njegova će zadaća biti provjeriti autorizacijske podatke korisnika s onima pohranjenima u našoj bazi podataka. Ako se podaci ne podudaraju, korisnik će biti preusmjeren na stranicu za prijavu.

Funkcija checkAuth($login, $password) ( // Ako nema prijave ili lozinke, vrati false if(!$login || !$password) vrati false; // Provjerite je li takav korisnik registriran // Spojite se na DBMS connect(); // Sastavite niz upita $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`=".$password.""" ; // Izvršite upit $ query = mysql_query($sql) ili die("

Nije moguće izvršiti upit: " . mysql_error() . ". Došlo je do pogreške u retku ". __LINE__."

"); // Ako ne postoji korisnik s takvim podacima, vratite false; if(mysql_num_rows($query) == 0) ( return false; ) // Ne zaboravite zatvoriti vezu s bazom podataka mysql_close(); // Inače vrati istinito vrati istinito; )

Sada kada je korisnik stigao na zaštićenu stranicu, moramo pozvati funkciju za provjeru autorizacijskih podataka. Skriptu poziva i provjere smjestit ćemo u zasebnu datoteku checkAuth.php i povezati je s onim stranicama koje će biti zatvorene za javni pristup.

/** * Skripta za provjeru autorizacije korisnika */ // Pokretanje sesije iz koje ćemo izdvojiti login i lozinku // ovlaštenih korisnika session_start(); // Povežite datoteku s prilagođenim funkcijama require_once("functions.php"); /** * Da bismo utvrdili je li korisnik ovlašten, moramo * provjeriti postoje li zapisi u bazi podataka za njegovu prijavu * i lozinku. Da bismo to učinili, koristit ćemo prilagođenu funkciju * ​​za provjeru točnosti prijavljenih korisničkih podataka. * Ako ova funkcija vrati false, tada nema autorizacije. * Ako nema autorizacije, jednostavno preusmjeravamo * korisnika na stranicu za autorizaciju. */ // Ako sesija sadrži podatke za prijavu i lozinku, // provjerite ih if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["password"]) ( // Ako provjera postojećih podataka ne uspije if(!checkAuth($_SESSION["login"], $_SESSION["password"])) ( // Preusmjerava korisnika na zaglavlje stranice za prijavu( "location: login.php"); // Zaustavite izvršavanje izlazne skripte; ) ) // Ako nema podataka ni o korisnikovoj prijavi ni o lozinci, // pretpostavljamo da nema autorizacije, preusmjeravamo korisnika // na autorizacijsku stranicu else ( header("location: login.php"); // Zaustavi izvršavanje izlazne skripte; )

Kreirajmo sada kôd za našu sigurnu stranicu. Bit će to sasvim jednostavno.

Autorizacija i registracija korisnika

Uspješna autorizacija.

Pristupili ste sigurnoj stranici. Možete se odjaviti.



Kao što vidite, u zaštićeni dokument uključujemo samo jednu datoteku - checkAuth.php. Sve ostale datoteke povezane su u drugim skriptama. Stoga naš kod ne izgleda glomazno. Organizirali smo registraciju i autorizaciju korisnika. Sada morate dopustiti korisnicima da se odjave. Da bismo to učinili, izradit ćemo skriptu u datoteci logout.php.

/** * Skripta za odjavu korisnika. Budući da se korisnici * prijavljuju kroz sesije, njihova prijava i lozinka pohranjeni su * u superglobalnom polju $_SESSION. Da biste se * odjavili sa sustava, jednostavno uništite vrijednosti * polja $_SESSION["login"] i $_SESSION["password"], nakon čega * preusmjeravamo korisnika na stranicu za prijavu */ // Budite obavezno započeti sesiju session_start(); poništi($_SESSION["prijava"]); poništi($_SESSION["lozinka"]); zaglavlje("lokacija: login.php");

Skripta za registraciju, autorizaciju i provjeru korisnika je spremna. Možete ga koristiti za sebe, dopunjavati, mijenjati prema svojim potrebama. Ako imate pitanja, možete ih postaviti u komentarima. Možete preuzeti sve datoteke o kojima se raspravlja ovdje, spakirane u jednu arhivu.

p.s. Znam da je bolje pisati objektno orijentirani kod, znam da se ne isplati prenositi i pohranjivati ​​lozinku u čistom tekstu, da se podaci uneseni u bazu moraju unaprijed provjeriti. Znam. Neću o tome ovdje.

Zdravo! Sada ćemo pokušati implementirati najjednostavniju registraciju na web mjestu koristeći PHP + MySQL. Da biste to učinili, Apache mora biti instaliran na vašem računalu. Princip rada naše skripte prikazan je u nastavku.

1. Započnimo stvaranjem tablice korisnika u bazi podataka. Sadržat će korisničke podatke (prijavu i lozinku). Idemo na phpmyadmin (ako kreirate bazu podataka na računalu http://localhost/phpmyadmin/). Napravi tablicu korisnika, imat će 3 polja.

Ja ga kreiram u bazi podataka mysql, možete ga kreirati u drugoj bazi podataka. Zatim postavite vrijednosti kao na slici:

2. Potrebna je veza s ovom tablicom. Kreirajmo datoteku bd.php. Njegov sadržaj:

$db = mysql_connect("vaš MySQL poslužitelj","prijava za ovaj poslužitelj","lozinka za ovaj poslužitelj");
mysql_select_db ("naziv baze podataka na koju se spajamo", $db);
?>

U mom slučaju to izgleda ovako:

$db = mysql_connect("localhost","user","1234");
mysql_select_db("mysql",$db);
?>

Uštedjeti bd.php.
Sjajno! Imamo tablicu u bazi i vezu s njom. Sada možete krenuti u izradu stranice na kojoj će korisnici ostavljati svoje podatke.

3. Napravite reg.php datoteku sa sadržajem (svi komentari unutra):



Registracija


Registracija


















4. Napravite datoteku, koji će unijeti podatke u bazu i spremiti korisnika. spremi_korisnika.php(komentari unutra):



{
}
//ako se unese prijava i lozinka, onda ih obrađujemo tako da oznake i skripte ne rade, nikad se ne zna što ljudi mogu unijeti


//ukloni dodatne razmake
$login = trim($login);
$lozinka = trim($lozinka);
// povezivanje s bazom podataka
// provjerite postoji li korisnik s istom prijavom
$result = mysql_query("SELECT id FROM korisnika WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Nažalost, prijava koju ste unijeli je već registrirana. Unesite drugu prijavu.");
}
// ako to nije slučaj, spremite podatke
$result2 = mysql_query("INSERT INTO korisnici (login,password) VALUES("$login","$password")");
// Provjerite ima li grešaka
ako ($result2=="TRUE")
{
echo "Uspješno ste se registrirali! Sada možete ući na stranicu. Početna stranica";
}
drugo(
echo "Greška! Niste registrirani.";
}
?>

5. Sada se naši korisnici mogu registrirati! Zatim morate stvoriti "vrata" za već registrirane korisnike za ulazak na stranicu. indeks.php(komentari unutra):

// cijeli postupak radi u sesijama. Tu se pohranjuju podaci korisnika dok je on na stranici. Vrlo je važno pokrenuti ih na samom početku stranice!!!
početak_sesije();
?>


Početna stranica


Početna stranica











Registar



// Provjerite jesu li varijable prijava i ID korisnika prazne
if (prazno($_SESSION["login"]) ili prazno($_SESSION["id"]))
{
// Ako je prazno, tada ne prikazujemo vezu
echo "Prijavljeni ste kao gost
Ovaj link je dostupan samo registriranim korisnicima";
}
drugo
{

U datoteci indeks.php Prikazat ćemo poveznicu koja će biti otvorena samo registriranim korisnicima. To je cijela poanta skripte - ograničiti pristup svim podacima.

6. Ostaje datoteka s provjerom unesene prijave i lozinke. testreg.php (komentari unutra):

session_start();// cijeli postupak radi na sesijama. Tu se pohranjuju podaci korisnika dok je on na stranici. Vrlo je važno pokrenuti ih na samom početku stranice!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //unesite prijavu koju ste unijeli korisnika u varijablu $login, ako je prazna, uništite varijablu
if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
//stavite lozinku koju je unio korisnik u varijablu $password, ako je prazna, uništite varijablu
if (empty($login) or empty($password)) //ako korisnik nije unio prijavu ili lozinku, izdajemo pogrešku i zaustavljamo skriptu
{
exit("Niste unijeli sve podatke, vratite se i ispunite sva polja!");
}
//ako se unese prijava i lozinka, onda ih obrađujemo tako da oznake i skripte ne rade, nikad se ne zna što ljudi mogu unijeti
$login = stripslashes($login);
$login = htmlspecialchars($login);
$lozinka = stripslashes($lozinka);
$lozinka = htmlspecialchars($lozinka);
//ukloni dodatne razmake
$login = trim($login);
$lozinka = trim($lozinka);
// povezivanje s bazom podataka
include("bd.php");// datoteka bd.php mora biti u istoj mapi kao i sve ostale, ako nije, samo promijenite putanju

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //dohvati iz baze sve podatke o korisniku s unesenom prijavom
$myrow = mysql_fetch_array($rezultat);
ako (prazno($myrow["lozinka"]))
{
//ako korisnik s upisanom prijavom ne postoji
}
drugo(
//ako postoji, provjerite lozinke
if ($myrow["password"]==$password) (
//ako se lozinke podudaraju, pokrećemo sesiju za korisnika! Možete mu čestitati, ušao je!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//ovi podaci se vrlo često koriste, tako da će ih prijavljeni korisnik “nositi sa sobom”
echo "Uspješno ste ušli na stranicu! Početna stranica";
}
drugo(
//ako se lozinke ne podudaraju

Izlaz ("Žao nam je, prijava ili lozinka koju ste unijeli nisu točni.");
}
}
?>

OK, sada je sve gotovo! Lekcija može biti dosadna, ali vrlo korisna. Ovdje je prikazana samo ideja registracije, a zatim je možete poboljšati: dodati zaštitu, dizajn, podatkovna polja, učitavanje avatara, odjavu s računa (da biste to učinili, jednostavno uništite varijable iz sesije s funkcijom nepostavljeno) i tako dalje. Sretno!

Sve sam provjerio, radi kako treba!

Stvaranje stranice temeljene na članstvu isprva se čini kao zastrašujući zadatak. Ako ste ikada htjeli ovo učiniti sami, a onda ste jednostavno odustali kada ste počeli razmišljati kako ćete to sastaviti pomoću svojih PHP vještina, onda je ovaj članak za vas. Provest ćemo vas kroz svaki aspekt stvaranja web stranice koja se temelji na članstvu, sa sigurnim područjem za članove zaštićenim lozinkom.

Cijeli proces sastoji se od dva velika dijela: registracije korisnika i autentifikacije korisnika. U prvom dijelu obradit ćemo izradu registracijske forme i pohranu podataka u MySQL bazu podataka. U drugom dijelu izradit ćemo obrazac za prijavu i koristiti ga da korisnicima omogućimo pristup u sigurnom području.

Preuzmite kod

Cijeli izvorni kod za sustav registracije/prijave možete preuzeti na donjoj poveznici:

Konfiguracija i prijenos
Datoteka ReadMe sadrži detaljne upute.

Otvori izvor\include\membersite_config.php datoteku u uređivaču teksta i ažurirajte konfiguraciju. (Prijava u bazu podataka, naziv vaše web stranice, vaša adresa e-pošte itd.).

Prenesite cijeli sadržaj imenika. Testirajte register.php slanjem obrasca.

Obrazac za registraciju

Kako bismo kreirali korisnički račun, moramo prikupiti minimalnu količinu informacija od korisnika. Trebamo njegovo ime, adresu e-pošte i željeno korisničko ime i lozinku. Naravno, možemo zatražiti više informacija u ovom trenutku, ali dugačak obrazac je uvijek odbojnost. Dakle, ograničimo se samo na ta polja.

Ovdje je obrazac za registraciju:

Registar

Dakle, imamo tekstualna polja za ime, email i lozinku. Imajte na umu da koristimo za bolju upotrebljivost.

Provjera valjanosti obrasca

U ovom trenutku dobra je ideja postaviti kod za provjeru valjanosti obrasca kako bismo bili sigurni da imamo sve podatke potrebne za kreiranje korisničkog računa. Moramo provjeriti jesu li ime i adresa e-pošte i lozinka popunjeni i je li adresa e-pošte u ispravnom formatu.

Rukovanje podnošenjem obrasca

Sada moramo obraditi podatke obrasca koji su poslani.

Evo slijeda (pogledajte datoteku fg_membersite.php u preuzetom izvoru):

funkcija RegisterUser() ( if(!isset($_POST["submitted"])) ( return false; ) $formvars = array(); if(!$this->ValidateRegistrationSubmission()) ( return false; ) $this- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( return false; ) if(!$this->SendUserConfirmationEmail($formvars)) ( return false; ) $this->SendAdminIntimationEmail($ formvars); vrati istinito; )

Prvo potvrđujemo predaju obrasca. Zatim prikupljamo i ‘saniramo’ podatke o slanju obrazaca (uvijek to učinite prije slanja e-pošte, spremanja u bazu podataka itd.). Podneseni obrazac zatim se sprema u tablicu baze podataka. Šaljemo e-poruku korisniku tražeći potvrdu. Zatim obavještavamo administratora da je korisnik registriran.

Spremanje podataka u bazu podataka

Sada kada smo prikupili sve podatke, moramo ih pohraniti u bazu podataka.
Evo kako spremamo poslani obrazac u bazu podataka.

funkcija SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Prijava u bazu podataka nije uspjela!"); return false; ) if(!$this->Ensuretable()) ( return false; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Ova e-pošta je već registrirana"); return false; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Ovo korisničko ime je već korišteno. Pokušajte s drugim korisničkim imenom"); return false; ) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Umetanje u bazu podataka nije uspjelo!"); return false; ) return true; )

Imajte na umu da ste konfigurirali podatke za prijavu u bazu podataka u datoteci membersite_config.php. U većini slučajeva možete koristiti “localhost” za host baze podataka.
Nakon prijave provjeravamo da tablica postoji. (Ako ne, skripta će kreirati traženu tablicu).
Zatim se uvjeravamo da su korisničko ime i email jedinstveni. Ako nije jedinstven, korisniku vraćamo grešku.

Struktura tablice baze podataka

Ovo je struktura tablice. Funkcija CreateTable() u datoteci fg_membersite.php stvara tablicu. Evo koda:

funkcija CreateTable() ( $qry = "Stvori tablicu $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT," "ime VARCHAR(128) NOT NULL," "e-pošta VARCHAR(64) NOT NULL," " "broj_telefona VARCHAR(16) NOT NULL ," "korisničko ime VARCHAR(16) NOT NULL ," "lozinka VARCHAR(32) NOT NULL ," "potvrdni kod VARCHAR(32) ," "PRIMARNI KLJUČ (id_user)." ")"; if( !mysql_query($qry,$this->connection)) ( $this->HandleDBError("Greška pri stvaranju tablice \nupit je bio\n $qry"); return false; ) return true; )

Polje id_user sadržavat će jedinstveni ID korisnika, a također je primarni ključ tablice. Imajte na umu da dopuštamo 32 znaka za polje za lozinku. To činimo jer ćemo, kao dodatnu sigurnosnu mjeru, pohraniti lozinku u bazu podataka šifriranu pomoću MD5. Imajte na umu da budući da je MD5 jednosmjerna metoda šifriranja, nećemo moći oporaviti lozinku u slučaju da je korisnik zaboravi.

Umetanje registracije u tablicu

Ovdje je kod koji koristimo za umetanje podataka u bazu podataka. Svi naši podaci bit će dostupni u nizu $formvars.

funkcija InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = "umetni u ".$this->tablename."(ime, e-pošta, korisničko ime, lozinka, confirmcode) values ​​​​("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["username"]) . "", "" . md5($formvars["password"]) . "", "" . $confirmcode . "")"; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Pogreška pri umetanju podataka u tablicu\nquery:$insert_query"); return false; ) return true; )

Primijetite da koristimo PHP funkciju md5() za šifriranje lozinke prije umetanja u bazu podataka.
Također, iz e-mail adrese korisnika izrađujemo jedinstveni kod za potvrdu.

Slanje e-pošte

Sada kada imamo registraciju u našoj bazi podataka, korisniku ćemo poslati e-poruku potvrde. Korisnik mora kliknuti poveznicu u potvrdnoj e-poruci kako bi dovršio postupak registracije.

funkcija SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["name"]) ; $mailer->Subject = "Vaša registracija na ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Hello ".$formvars["name"]."\r\ n\r\n". "Hvala na vašoj registraciji na ".$this->sitename."\r\n". "Molimo kliknite donju poveznicu da potvrdite svoju registraciju.\r\n." "$confirm_url\r \n". "\r\n". "Pozdrav,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Neuspješno slanje e-pošte potvrde registracije."); return false; ) return true; )

nadopune

9. siječnja 2012
Dodane su značajke poništavanja lozinke/promjene lozinke
Kod se sada dijeli na GitHubu.

Dobrodošao natragPuno ime korisnika(); ?>!

Licenca


Kod se dijeli pod licencom LGPL. Možete ga slobodno koristiti na komercijalnim ili nekomercijalnim web stranicama.

Nema povezanih postova.

Komentari na ovaj unos su zatvoreni.

Posljednju izmjenu napravio Vincy 23. srpnja 2019.

Korisnička registracija ili prijava sastavni je dio mnogih web aplikacija i ključno je da bude ispravna za uspjeh aplikacije. To je početna točka angažmana korisnika s vašom aplikacijom.

Trebao bi biti što jednostavniji s najboljim UI/UX-om. Implementacija funkcije registracije korisnika pomoću PHP-a jednostavan je zadatak i ja ću vas provesti kroz korake s primjerima u ovom članku.

Što je unutra?

Kako funkcionira ovaj primjer registracije PHP korisnika?

Ovaj primjer koda može se podijeliti u 3 dijela.

  1. Dobivanje podataka o korisniku putem HTML obrasca.
  2. Provjera podataka koje je korisnik poslao na slanju obrasca.
  3. Rukovanje bazom podataka za spremanje registriranog korisnika u bazu podataka nakon provjere valjanosti.

Treći korak će se izvršiti nakon što se uvjerimo da korisnik već nije dodan. Ova provjera jedinstvenosti podataka izvršit će se na temelju njihove e-pošte i korisničkog imena koje su unijeli.

Tijekom registracije općenito prikupljamo podatke o korisnicima koji su spremni registrirati se s našom aplikacijom. Neki od njih će biti obvezni, a neki izborni.

Dakle, ova funkcionalnost također može uključivati ​​dio za provjeru valjanosti kako bi se osiguralo da korisnički podaci nisu prazni i format. Validacija se može obaviti na strani klijenta ili na strani poslužitelja.

Uvijek je bolje imati provjeru valjanosti na strani poslužitelja. Možete odabrati da ga imate na strani klijenta također radi lakšeg korištenja korisnicima. Ali posjedovanje na strani poslužitelja nije izborno i minimalni zahtjev.

Struktura datoteke

HTML obrazac koji korisniku omogućuje registraciju

U ovom primjeru obrazac za registraciju sadrži polja Korisničko ime, Ime (ime za prikaz), Lozinka i Email. Također ima polje za potvrdu lozinke koje omogućuje korisniku da ponovno unese svoju lozinku za potvrdu. Ove dvije lozinke usporedit će se kasnije u vrijeme .

Slanjem ovog obrasca od korisnika se očekuje da se slaže s uvjetima. Stoga se polje za potvrdu dodaje prije gumba Registriraj kako bi se to osiguralo.

PHP obrazac za registraciju korisnika

Prijavite se
"; } ?>
">
">
">
Prihvaćam odredbe i uvjete


A stilovi su,

Body (font-family: Arial; color: #333; font-size: 0.95em; ) .form-head (boja: #191919; font-weight: normal; font-weight: 400; margin: 0; text-align : centar; veličina fonta: 1.8em; ) .poruka-o pogrešci ( padding: 7px 10px; pozadina: #fff1f2; granica: #ffd5da 1px puna; boja: #d6001c; border-radius: 4px; margina: 30px 0px 10px 0px ; ). #ffffff; razmak obruba: početni; margina: 15 px automatski; prijelom riječi: prelomna riječ; raspored tablice: automatski; visina retka: 1,8 em; boja: #333; radijus obruba: 4 px; ispuna : 20px 40px; širina: 380px; granica: 1px puna; boja granice: #e5e6e9 #dfe0e4 #d0d1d5; ) .demo-table .label ( boja: #888888; ) .demo-table .field-column ( padding: 15px 0px; ) .demo-input-box ( padding: 13px; border: #CCC 1px solid; border-radius: 4px; width: 100%; ) .btnRegister (padding: 13px; background-color: #5d9cec; boja: #f5f7fa; kursor: pokazivač; rubni radijus: 4px; širina: 100%; granica: #5791da 1px puna; veličina fonta: 1.1em; ) .response-text ( max-width: 380px; font-size: 1.5em; text-align: center; background: #fff3de; padding: 42px; border-radius: 3px; border: #f5e9d4 1px solid; font-family : arial; line-height: 34px; margin: 15px auto; ) .terms ( margin-bottom: 5px; )

Kako potvrditi korisničke podatke na slanju obrasca

Skripta za provjeru valjanosti obrasca na strani poslužitelja dodana je u ovom primjeru za provjeru podataka o registraciji korisnika. Ova PHP skripta za provjeru valjanosti bit će pozvana nakon podnošenja obrasca za registraciju.

Ova skripta provjerava valjanost svih polja obrasca kako bi provjerila da svako polje nije prazno. Zatim potvrđuje format korisničke e-pošte pomoću PHP filter_var() funkcije.

Budući da registracija uključuje značajku potvrde lozinke, usporedba lozinki odvijat će se u ovom dijelu ovog primjera.

Na kraju, skripta za provjeru valjanosti provjerit će prihvaća li korisnik odredbe i uvjete označavanjem odgovarajućeg okvira na obrascu.

Nakon što je sva provjera valjanosti dovršena vraćanjem boolean true, tada će se dogoditi stvarni proces registracije.

Funkcija validateMember() ( $valid = true; $errorMessage = array(); foreach ($_POST as $key => $value) ( ​​​​if (empty($_POST[$key])) ( $valid = false; ) ) if($valid == true) ( ​​​​if ($_POST["password"] != $_POST["confirm_password"]) ( $errorMessage = "Lozinke bi trebale biti iste."; $valid = false; ) if (! isset ($error_message)) ( if (! filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL)) ( $errorMessage = "Nevažeća adresa e-pošte."; $valid = false; ) ) if (! isset( $error_message)) ( if (! isset($_POST["terms"])) ( $errorMessage = "Prihvatite odredbe i uvjete."; $valid = false; ) ) ) else ( $errorMessage = "Sva su polja obavezna. "; ) if ( $valid == false) ( return $errorMessage; ) return; )

PHP MySQL kod za pristup bazi podataka za spremanje registriranog korisnika

Provjera korisničkog obrasca na strani poslužitelja

Ovo je PHP ulazna točka za rukovanje svim skriptama na strani poslužitelja za provjeru valjanosti obrasca i rukovanje operacijama baze podataka na temelju rezultata provjere valjanosti.

validateMember($username, $displayName, $password, $email); if (empty($errorMessage)) ( $memberCount = $member->isMemberExists($username, $email); if ($memberCount == 0) ( $insertId = $member->insertMemberRecord($username, $displayName, $ lozinka, $e-pošta); if (! empty($insertId)) ( header("Lokacija: thankyou.php"); ) ) else ( $errorMessage = "Korisnik već postoji."; ) ) ) ?>

Provjerite postoji li korisnik već

Funkcija isMemberExists() koristi se za provjeru jedinstvenosti korisničkih podataka na temelju njihove e-pošte i korisničkog imena. Ako uneseno korisničko ime ili email postoji u korisničkoj bazi, tada će se proces registracije zaustaviti vraćanjem i potvrdom.

Ova potvrda će vas obavijestiti da "korisnik već postoji". Šifra je

Funkcija isMemberExists($username, $email) ( $query = "select * FROM registered_users WHERE user_name = ? OR email = ?"; $paramType = "ss"; $paramArray = array($username, $email); $memberCount = $this->ds->numRows($query, $paramType, $paramArray); return $memberCount; )

Unesite podatke o članovima u bazu podataka

Ako vrati 0, to znači da ne postoje takvi korisnici s unesenom e-poštom ili korisničkim imenom. I tako će podaci o registraciji biti umetnuti u bazu podataka. Sljedeći kod prikazuje metodu umetanja člana.

Funkcija insertMemberRecord($username, $displayName, $password, $email) ( $passwordHash = md5($password); $query = "INSERT INTO registered_users (user_name, display_name, password, email) VRIJEDNOSTI (?, ?, ?, ? )"; $paramType = "ssss"; $paramArray = array($username, $displayName, $passwordHash, $email); $insertId = $this->ds->insert($query, $paramType, $paramArray); vrati $insertId; )

DataSource.php

Ovo je generička klasa izvora podataka u PHP-u za izvođenje operacija baze podataka. Uključuje funkcije za povezivanje baze podataka i izvršavanje raznih upita za dobivanje rezultata baze podataka, broj redaka, izvršenje umetanja i više.

Ova klasa izvora podataka je generička i održava se što jednostavnijom. Učinkovit je i koristim ga u većini svojih mikro projekata i tutorijala. Možete ga slobodno preuzeti i koristiti.

Važna stvar je nikada ne zaboravite koristiti pripremljene izjave. Pomaže vam u zaštiti od napada SQL injekcijom i prvi je korak u smislu implementacije sigurnosti u web aplikaciji.

conn = $this->getConnection(); ) /** * Ako je potreban objekt veze, koristite ovu metodu i pristupite mu. * U suprotnom, koristite donje metode za umetanje / ažuriranje / itd. * * @return \mysqli */ javna funkcija getConnection() ( $conn = new \mysqli(self::HOST, self::USERNAME, self::PASSWORD, self::DATABASENAME); if (mysqli_connect_errno()) ( trigger_error ("Problem s povezivanjem s bazom podataka."); ) $conn->set_charset("utf8"); return $conn; ) /** * Za dobivanje rezultata baze podataka * @param string $query * @param string $paramType * @ param polje $paramArray * @return polje */ javna funkcija select($query, $paramType="", $paramArray=array()) ( $stmt = $this->conn->prepare($query); if(! prazni($paramType) && !empty($paramArray)) ( $this->bindQueryParams($sql, $paramType, $paramArray); ) $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) ( while ($row = $result->fetch_assoc()) ( $resultset = $row; ) ) if (! empty($resultset)) ( return $resultset; ) ) / ** * Za umetanje * @param string $query * @param string $paramType * @param array $paramArray * @return int */ public function insert($query, $paramType, $paramArray) ( print $query; $stmt = $this->conn->prepare($query); $this->bindQueryParams($stmt, $paramType, $paramArray); $stmt->izvrši(); $insertId = $stmt->insert_id; vrati $insertId; ) /** * Za izvršenje upita * @param string $query * @param string $paramType * @param array $paramArray */ public function execute($query, $paramType="", $paramArray=array()) ( $ stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) ( $this->bindQueryParams($stmt, $paramType="", $paramArray= array()); ) $stmt->execute(); ) /** * 1. Priprema vezanje parametara * 2. Povezivanje parametara sa sql naredbom * @param niz $stmt * @param niz $paramType * @param niz $ paramArray */ javna funkcija bindQueryParams($stmt, $paramType, $paramArray=array()) ( $paramValueReference = & $paramType; for ($i = 0; $i)< count($paramArray); $i ++) { $paramValueReference = & $paramArray[$i]; } call_user_func_array(array($stmt, "bind_param"), $paramValueReference); } /** * To get database results * @param string $query * @param string $paramType * @param array $paramArray * @return array */ public function numRows($query, $paramType="", $paramArray=array()) { $stmt = $this->conn->pripremi($upit); if(!empty($paramType) && !empty($paramArray)) ( $this->bindQueryParams($stmt, $paramType, $paramArray); ) $stmt->execute(); $stmt->store_result(); $recordCount = $stmt->num_rows; povratak $recordCount; ) )

Skripta baze podataka

Ova skripta baze podataka ima naredbu za kreiranje za tablicu registered_users. Uvezite ovu skriptu u svoje razvojno okruženje za pokretanje ovog koda.

Struktura tablice za tablicu `registered_users` -- STVARAJ TABLICU AKO NE POSTOJI `registered_users` (`id` int(8) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) NOT NULL, `first_name` varchar(255) NOT NULL, ` prezime` varchar(255) NIJE NULL, `lozinka` varchar(25) NIJE NULL, `email` varchar(55) NIJE NULL, `spol` varchar(20) NIJE NULL, PRIMARNI KLJUČ (`id`));

Ako provjera valjanosti obrasca za registraciju ne uspije, korisniku će se prikazati poruka o pogrešci kao što je prikazano u nastavku.

Komentari na “PHP korisnički obrazac za registraciju (prijava) s MySQL bazom podataka”

    Bok Vincy, dobivam sljedeće pogreške prilikom pokretanja registracijskog koda, molim za pomoć.

    INSERT INTO registered_users (user_name, display_name, password, email) VRIJEDNOSTI (?, ?, ?, ?)
    Upozorenje: call_user_func_array() očekuje da parametar 1 bude važeći povratni poziv, prvi član polja nije važeći naziv klase ili objekt u C:\xampp\htdocs\PHP\JAMII-CASH\DataSource.php na liniji 136

    Fatalna pogreška: Neuhvaćena pogreška: Poziv funkciji članice execute() na boolean u C:\xampp\htdocs\PHP\JAMII-CASH\DataSource.php:99 Stack trace: #0 C:\xampp\htdocs\PHP\JAMII -CASH\Member.php(83): Phppot\DataSource->insert('INSERT INTO reg...', 'ssss', Array) #1 C:\xampp\htdocs\PHP\JAMII-CASH\index.php (20 ): Phppot\Member->insertMemberRecord('chuki10', 'Ray', '202020', 'raf.yah.s.1@gma…') #2 (main) bačeno u C:\xampp\htdocs\ PHP\ JAMII-CASH\DataSource.php na liniji 99

Funkcija registracije i autorizacije korisnika na web mjestu provodi se na sljedeći način: kada se korisnik registrira na web mjestu, on ispunjava obrazac za registraciju u kojem navodi različite podatke, uključujući prijavu i lozinku. Obrazac šalje ove podatke na poslužitelj i oni se zapisuju u bazu podataka.

  1. Korisnik upisuje prijavu i lozinku u obrazac za autorizaciju i šalje ga na poslužitelj.
  2. Poslužitelj provjerava postoji li u bazi podataka korisnik s istom prijavom i lozinkom.
  3. Ako je korisnik pronađen, informacija o tome se bilježi u sesiji ili kolačiću.
  4. Na stranicama web mjesta provjerava se sadrži li sesija podatke da je korisnik ovlašten i, ovisno o tome, stranica se prikazuje u jednom ili drugom obliku.

U sesiji ne možete samo naznačiti činjenicu autorizacije, već i zabilježiti neke korisničke podatke za prikaz na stranici, na primjer, ime ili nadimak. Odluka o tome hoćete li koristiti sesije ili kolačiće donosi se za svaku pojedinačnu stranicu. Ako stranica sadrži važne informacije, onda je bolje koristiti sesije, jer je mnogo teže saznati tuđe registracijske podatke.

Obrasci za autorizaciju i registraciju

Obrazac za autorizaciju obično se nalazi na glavnoj stranici ili može biti na svim stranicama stranice. U osnovi, za obrazac za registraciju kreira se posebna stranica. Napravit ćemo samo jednu stranicu koja će sadržavati oba obrasca, a na njoj će biti prikazani korisnički podaci. Za sada će sadržavati samo HTML kod, ali odmah ćemo napraviti PHP datoteku, jer će u budućnosti to biti skripta. Nazovimo to formreg.php. Kod stranice će biti ovakav:

formreg.php:

Registracija

Podatke o registraciji korisnika evidentirat ćemo u tablici korisnika. Ako još nemate takvu tablicu, izradite je. Treba sadržavati polja id, login i pas. Nećemo koristiti druga polja. Ako su u tablici, ostat će prazni.

registracija.php:

3
4
5
6
7
8
9
10

$login=$_POST["login"]; $pas=$_POST["lozinka"]; $db=mysqli_connect("localhost", "root", "", "mybase"); $query="INSERT INTO korisnici (prijava, pas) VRIJEDNOSTI ("$login", "$pas""); $rezultat=mysqli_upit($db, $upit); if ($result) header("Lokacija: formreg.php"); mysqli_close($db);

U retku 9 postavili smo da se vrati na stranicu obrazaca. Budući da se izvršavanje skripte i ponovno učitavanje stranice događa vrlo brzo na lokalnom poslužitelju, vizualno će izgledati kao da se ništa ne događa kada kliknete gumb "Registracija". Na pravim stranicama obično idu na posebnu stranicu s informacijama da je korisnik registriran i podacima o registraciji. Pokušajte se prijaviti i provjerite pojavljuju li se novi unosi u bazi podataka.

Autorizacija

Obrazac za autorizaciju pokreće datoteku authorization.php na poslužitelju. Ova skripta preuzima ulogu prijave i primarnu ulogu te provjerava postoji li takav korisnik. Ako postoji, prijava će biti zabilježena u sesiji. Ako se takav korisnik ne pronađe, informacija o tome bit će zabilježena u sesiji. To je potrebno kako bi stranica koja će se otvoriti nakon izvršavanja skripte primila te informacije i prikazala poruku da je unesena netočna prijava ili lozinka. Kod skripte je ovakav:

autorizacija.php:

3
4
5
6
7
8
9
10
11
12
13
14

početak_sesije(); $login=$_POST["login"]; $pas=$_POST["lozinka"]; $db=mysqli_connect("localhost", "root", "", "mybase"); $query="SELECT * FROM users WHERE login="$login" AND BINARY pas="$pas""; $rezultat=mysqli_upit($db, $upit); if (mysqli_num_rows($result)) $_SESSION["login"]=$login; else $_SESSION["login"]="prijava"; zaglavlje ("Lokacija: formreg.php"); mysqli_close($db);

U retku 7 generira se zahtjev za odabir retka s prijavom i lozinkom primljenom iz obrasca. Ključna riječ BINARY piše se prije polja pas. Potrebno je kako bi se pri usporedbi pomoću ovog polja uzela u obzir velika i mala slova. Ako trebate uzeti u obzir velika i mala slova pri usporedbi prijave, tada prije nje treba napisati BINARY. Primjer postavlja zahtjev za odabir svih polja. U praksi možete odabrati samo ona polja čiji će podaci morati biti prikazani na stranici.

Nakon primitka rezultata provjerava se je li pronađen navedeni zapis. Ako postoji zapis, tada se prijava bilježi u sesiji. Ako korisnik nije pronađen, tada se umjesto prijave piše niz "er login". Možete napisati drugačiji tekst, ali morate biti sigurni da neće odgovarati nijednoj prijavi. Zatim se vraćate na stranicu s obrascima.

Stranice web mjesta moraju sadržavati kod koji provjerava postoji li prijava u sesiji. I ovisno o tome, određuje se kako stranica treba izgledati. U našem primjeru postoji samo jedna stranica. Napravit ćemo test na tome. Samo kod će biti podijeljen u dva dijela. Sesija se mora otvoriti prije izlaza bilo kakvih podataka, odnosno prije HTML koda. Stoga se ovaj dio nalazi na samom početku stranice. A ostatak koda je unutar oznake , jer dodaje sadržaj na stranicu. Dodajte sljedeći redak na vrh stranice:

Ako u sesiji postoji prijava, ali sadrži redak "er login", tada se prikazuje poruka da su prijava ili lozinka netočni. Nakon što se poruka prikaže, prijava postaje prazna. To je učinjeno tako da se poruka prikazuje samo jednom i ne pojavljuje se prilikom prelaska na druge stranice. Ako je prijava drugačija, tada je korisnik autoriziran i stranica se generira kao za registrirane korisnike. Ako nema prijave, tada još nije bilo autorizacije i stranica se prikazuje za neregistrirane korisnike.

Razmotrili smo samo opće načelo stvaranja funkcije registracije i autorizacije. Na pravim stranicama to je kompliciranije. Obrasci bi se trebali prikazivati ​​samo neovlaštenim korisnicima. Osim toga, potrebno je dodati gumb "Odjava", koji poništava autorizaciju. Prilikom registracije morate provjeriti obrazac, provjeriti jedinstvenost prijave i dodati potvrdu lozinke.