Instaliranje emmeta u uzvišenom tekstu 3. Praktična upotreba Emmeta (Zen kodiranje). Dodavanje i uređivanje isječaka

Vrlo često se početnici suočavaju s problemom pisanja registracije na svojoj web stranici. U ovom članku ću vam reći kako to učiniti.
Opisaću sve korak po korak.

Korak 1. Povežite se na MySQL bazu podataka.
Kreirajmo datoteku db_connect.php:

Mysql_connect("localhost", "user", "korisnička lozinka") ili die("Greška pri povezivanju sa MySQL!");
mysql_select_db("baza podataka") ili die("Greška pri povezivanju sa MySQL bazom podataka!");
mysql_set_charset("utf8"); // postavlja kodiranje baze podataka

Korak 2. Kreirajte tabelu za korisnike.

CREATE TABLE `user_profiles` (
`user_id` int(11) NIJE NULL AUTO_INCREMENT,
`korisničko ime` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARNI KLJUČ (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Korak 3. Kreirajte fajl handler.php - ovaj fajl će sadržati proveru autorizacije korisnika.

include_once "db_connect.php"; // provjeriti vezu s bazom podataka

// provjerite da li su prijava i lozinka popunjeni u kolačićima
if(!empty($_COOKIE["korisničko ime"]) I !empty($_COOKIE["password"]))
{
// potražite korisnika u tabeli users_profiles, koristite mysql_real_escape_string kao zaštitu od sql injekcije
$search_user = mysql_query("SELECT * FROM `users_profiles` GDJE `username` = "".mysql_real_escape_string($_COOKIE["username"])."" AND `password` = "".mysql_real_escape_string("$_COOKIE]($password) ).""");
$user = (mysql_num_rows($search_user) == 1) ? mysql_fetch_array($search_user) : 0;
}
ostalo
{
$user = 0;
}
?>

Korak 4. Napišite registraciju.
Da biste to učinili, kreirajte datoteku register.php i u nju upišite sljedeći kod:


if($user) (

Izlaz();
}

Ako (!empty($_POST["login"]) I !empty($_POST["password"]))
{


// provjeriti da li je prijava u našoj bazi podataka
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `users_profiles` GDJE `username` = "".$login."" LIMIT 1;"), 0) != 0)
{
echo "Odabrana prijava je već registrovana!";
Izlaz();
}
// unesite podatke u tabelu, obratite pažnju - šifriramo lozinku u md5
mysql_query("INSERT INTO `users_profiles` (`korisničko ime`, `password`) VRIJEDNOSTI ("".$login.", ".md5($password)."")");
echo "Uspješno ste se registrovali!";
Izlaz();
}
// upisnica
eho"


Ulogovati se:



Lozinka:




";
?>

include_once "handler.php"; // provjeriti da li je korisnik ovlašten

// ako jeste, preusmjerite ga na glavnu stranicu
if($user) (
header("Lokacija: index.php");
Izlaz();
}

If(!empty($_POST["login"]) I !empty($_POST["password"]))
{
// filtriramo prijavu i lozinku
$login = mysql_real_escape_string(htmlspecialchars($_POST["login"]));
$password = mysql_real_escape_string(htmlspecialchars($_POST["password"]));

$search_user = mysql_result(mysql_query("SELECT COUNT(*) FROM `users_profiles` GDJE `username` = "".$login."" I `password` = ".md5($password)."""), 0 0 );
if($search_user == 0)
{
echo "Uneseni podaci su netačni ili korisnik nije pronađen.";
Izlaz();
}
ostalo
{
// unesite login i lozinku u kolačiće
$vrijeme = 60*60*24; // koliko dugo čuvati podatke u kolačićima
setcookie("username", $login, time()+$time, "/");
setcookie("password", md5($password), time()+$time, "/");
echo "Uspješno ste se prijavili na stranicu!";
Izlaz();
}
}
eho"


Ulogovati se:



Lozinka:




";
?>

Korak 6: Izlazak korisnika.
Svaki korisnik mora napustiti stranicu ako to želi. Da biste to uradili, kreirajte datoteku exit.php

include_once "handler.php"; // provjeriti da li je korisnik ovlašten

// provjera autorizacije korisnika
if($user) (
setcookie("username", "", time()-1, "/");
setcookie("password", "", time()-1, "/");
session_destroy();
echo "Uspješno ste izašli!";
) drugo (
echo "Morate biti prijavljeni da izvršite ovu radnju.";
}
?>

Korak 7. Kreiranje glavne stranice stranice.
Kreirajmo zadnji fajl - index.php

include_once "handler.php"; // provjeriti da li je korisnik ovlašten

If($user) (
// prikazuje informacije za korisnika
echo "Zdravo, ".$user["username"]."!

- Izači

";
) drugo (
// prikaz informacija za gosta
eho"
- Autorizacija

- Registracija

";
}
?>

Da biste konfigurirali, kreirajte .htaccess datoteku i u nju unesite sljedeće:

php_value register_globals 0
php_value magic_quotes_gpc 0

Php_value zlib.output_compression 1

AddDefaultCharset UTF-8

Za one koji su previše lijeni za sve ovo, preuzmite

Ako trebate učiniti jedan od odjeljaka Vaše web stranice dostupnim ograničenom, ali neodređenom krugu ljudi, najlakši način za to je registracija i autorizacija korisnika. Postoji mnogo načina za autorizaciju korisnika. Možete koristiti i alate web servera i alate programskog jezika. Govorićemo o slučaju kada se koriste PHP sesije.

Verovatno biste voleli da vidite više moderan način stvaranje takve forme. Još uvijek nemam planove da ga u potpunosti predstavim na moderan i relevantan način, ali možete vidjeti da se obrazac za povratne informacije može napraviti korištenjem objektno orijentisanih tehnika u PHP-u.

Prvo, razgovarajmo o svim koracima koje ćemo dalje poduzeti. Šta nam uopće treba? Potrebna nam je skripta koja će registrirati korisnika, autorizirati korisnika, preusmjeriti korisnika negdje nakon autorizacije. Također ćemo morati kreirati stranicu koja će biti zaštićena od pristupa neovlaštenih korisnika. Za registraciju i autorizaciju trebat ćemo kreirati HTML forme. Podatke o registrovanim korisnicima čuvat ćemo u bazi podataka. To znači da nam je i dalje potrebna skripta za povezivanje sa DBMS-om. Sav naš posao obavljat će funkcije koje sami napišemo. Ove funkcije ćemo sačuvati u zasebnoj datoteci.

Dakle, potrebni su nam sljedeći fajlovi:

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

Sve ovo će biti besmisleno ako nemate odgovarajuću tabelu u bazi podataka. Pokrenite svoj DBMS alat za upravljanje (PhpMyAdmin ili komandna linija, kako god je zgodnije) i pokrenite sljedeći upit u njemu:

CREATE TABLE `users` (`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_TIMEEYSTAMP (` id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Nazvat ću naše skript datoteke ovako (sve će biti u jednom direktoriju):

  • baza podataka.php;
  • functions.php;
  • login.php;
  • registracija.php;
  • index.php;
  • logout.php;
  • checkAuth.php;
  • style.css.

Svrha svakog od njih vam je, siguran sam, jasna. Počnimo sa skriptom za povezivanje sa DBMS-om. Već ste to vidjeli. Samo sačuvajte kod za ovu skriptu u datoteci pod nazivom database.php. Prilagođene funkcije ćemo deklarisati u datoteci functions.php. Kako će sve ovo funkcionirati? Neovlašćeni korisnik pokušava da pristupi zaštićenom dokumentu index.php, sistem proverava da li je korisnik autorizovan, ako korisnik nije autorizovan, preusmerava se na stranicu za autorizaciju. Na stranici za prijavu korisnik bi trebao vidjeti obrazac za autorizaciju. Hajde da to uradimo.

Autorizacija korisnika

registar.



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

/* style.css fajl */ .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 urađeno kako treba, trebalo bi da imate sledeće u pretraživaču:

Naravno, još nemamo ni jednog registrovanog korisnika, a da biste se prijavili, potrebno je da se registrujete. Napravimo formular za registraciju.

Registracija korisnika

" />


Verovatno ste primetili da postoje PHP varijable u HTML kodu. Oni su sadržaj atributa tekstualnih polja obrazaca, sadržaj kontejnera dizajniranih za prikaz grešaka. Ali ove varijable nismo inicijalizirali. Uradimo to.

Registracija korisnika

" />
Korisničko ime može sadržavati samo latinične znakove, brojeve i simbole "_", "-", ".". Korisničko ime ne smije biti kraće od 4 karaktera i ne duže od 16 znakova
U svojoj lozinki 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 unetu 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 hajde da prvo razgovaramo o algoritmu za njihovu obradu.

Potrebna su nam polja za prijavu i lozinku da ne budu prazna. Zatim morate provjeriti usklađenost prijave sa zahtjevima. Lozinka također mora ispunjavati opisane zahtjeve, a ponovo specificirana lozinka mora joj odgovarati i, osim toga, moraju biti identične. Ako bilo koji od ovih uslova nije ispunjen, obrada podataka obrasca mora prestati, odgovarajuće upozorenje mora biti upisano u niz poruka o grešci i mora se prikazati korisniku. Radi udobnosti korisnika, sačuvaćemo prijavu koju je uneo (ako ju je naveo) tako što ćemo njenu vrednost upisati u niz $fields.

Ako je sve u redu, u prozoru vašeg pretraživača, kada pristupite dokumentu register.php, trebalo bi da vidite nešto ovako:

Sada, recimo da je korisnik kliknuo na dugme za registraciju i nije popunio polja obrasca. Prema našem algoritmu, login i lozinka ne mogu biti prazni. Ukoliko ovaj uslov 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. Hajdemo odmah razgovarati o sljedećim provjerama. Ako ste unijeli i login i lozinku, morate provjeriti njihovu usklađenost sa navedenim zahtjevima. Da bismo potvrdili prijavu i lozinku, kreiraćemo prilagođene funkcije u datoteci functions.php.

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

Sada moramo modificirati datoteku register.php da omogućimo funkcije koje smo deklarirali. Skripti ćemo dodati uslov koji provjerava da li je kliknuto na dugme za registraciju. U okviru ovog stanja pokreće se provjera login i lozinki. Ako bilo koja od provjera ne uspije, ponovo prikazujemo obrazac i prikazujemo poruku o grešci. Ako nema grešaka, registrujemo korisnika, više ne prikazujemo formular za registraciju, obavještavamo korisnika o uspješnoj registraciji i pomoću funkcije header() ga preusmjeravamo na formular za autorizaciju.

Uspješno ste se registrovali u sistemu. Sada ćete biti preusmjereni na stranicu za prijavu. Ako se to ne dogodi, idite na njega koristeći direktnu vezu.

"; header("Osvježi: 5; URL = login.php"); ) // U suprotnom obavijestite korisnika o grešci inače ( $errors["full_error"] = $reg; ) ) ) ?> Registracija korisnika
" />
Korisničko ime može sadržavati samo latinične znakove, brojeve i simbole "_", "-", ".". Korisničko ime ne smije biti kraće od 4 karaktera i ne duže od 16 znakova
U svojoj lozinki 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 unetu lozinku


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

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

Nije moguće dodati korisnika: " . mysql_error() . ". Došlo je do greške na liniji " . __LINE__ ."

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

Ako je sve u redu, vaš korisnik će biti registrovan. Možete testirati obrazac. Pokušajte registrirati korisnike sa istim prijavama. Nakon uspješne registracije, korisnik će biti preusmjeren na formular za autorizaciju. Ranije smo jednostavno kreirali oznake za prikaz ovog obrasca. Budući da u njegovom atributu akcije nije specificiran parametar, podaci koje je obrazac dostavio će biti 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 registrovani u sistemu, registrujte se.



Vjerovatno ste primijetili da u autorizacijskoj skripti sada imamo još jednu nepoznatu funkciju - autorizaciju() . Ova funkcija mora ovlastiti korisnika tako što će prvo provjeriti postoji li registrirani korisnik s istim login 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() će pokrenuti sesiju i u nju upisati korisničke vrijednosti za prijavu i lozinku, obavijestiti skriptu da je autorizacija uspjela, a skripta će preusmjeriti korisnika na stranicu zaštićenog resursa.

/** * Funkcija autorizacije korisnika. * Autorizacija korisnika će se izvršiti * korištenjem PHP sesija. */ function authorization($login, $password) ( // Inicijaliziranje varijable sa mogućom porukom o grešci $error = ""; // Ako nema linije za prijavu, vratite poruku o grešci if(!$login) ( $error = " Prijava nije navedena"; vrati $error; ) elseif(!$password) ( $error = "Lozinka nije navedena"; vrati $error; ) // Provjerite da li je korisnik već registriran // Povežite se na DBMS konekciju( ); // Moramo provjeriti da li je takav korisnik među registriranim // Sastavite string upita $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" I ` password`="".$password ."""; // Izvršite upit $query = mysql_query($sql) ili umri("

Nije moguće izvršiti upit: " . mysql_error() . ". Došlo je do greške na liniji " . __LINE__ ."

"); // Ako nema korisnika sa takvim podacima, vrati poruku o grešci if(mysql_num_rows($query) == 0) ( $error = "Korisnik sa navedenim podacima nije registrovan"; vrati $error; ) // Ako korisnik postoji, pokrenite sesiju session_start(); // I upišite korisničko ime i lozinku u nju // Za ovo koristimo superglobalni niz $_SESSION $_SESSION["login"] = $login; $_SESSION[ "password"] = $password; / / Nemojte zaboraviti zatvoriti vezu s bazom podataka mysql_close(); // Vratite true da naznačite uspješnu autorizaciju korisnika vratite true; )

Kada korisnik dođe na zaštićenu stranicu, potrebno je provjeriti ispravnost njegovih autorizacijskih podataka. Da bismo to učinili potrebna nam je još jedna prilagođena funkcija. Nazovimo to checkAuth() . Njegov zadatak će biti da provjeri autorizacijske podatke korisnika s onima koji su pohranjeni 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, vratite false if(!$login || !$password) return false; // Provjerite da li je takav korisnik registriran // Povežite se na DBMS connect(); // Sastavite string upita $sql = "IZABIR `id` FROM `users` GDJE `login`="".$login."" I `password`="".$password.""" ; // Izvršite upit $ query = mysql_query($sql) ili die("

Nije moguće izvršiti upit: " . mysql_error() . ". Došlo je do greške na liniji " . __LINE__ ."

"); // Ako nema korisnika s takvim podacima, vratite false; if(mysql_num_rows($query) == 0) ( return false; ) // Ne zaboravite zatvoriti vezu s bazom podataka mysql_close(); // U suprotnom vrati true vrati true; )

Sada kada je korisnik stigao na zaštićenu stranicu, moramo pozvati funkciju da provjerimo autorizacijske podatke. Skriptu za poziv i verifikaciju stavićemo u zasebnu datoteku checkAuth.php i povezati je sa onim stranicama koje će biti zatvorene za javni pristup.

/** * Skripta za provjeru autorizacije korisnika */ // Pokreni sesiju iz koje ćemo izdvojiti login i lozinku // ovlaštenih korisnika session_start(); // Povezivanje datoteke sa prilagođenim funkcijama require_once("functions.php"); /** * Da bismo utvrdili da li je korisnik ovlašten, moramo * provjeriti da li postoje zapisi u bazi podataka za njegovu prijavu * i lozinku. Da bismo to učinili, koristit ćemo prilagođenu funkciju * ​​za provjeru ispravnosti prijavljenih korisničkih podataka. * Ako ova funkcija vrati false, onda nema autorizacije. * Ako nema autorizacije, jednostavno preusmjeravamo * korisnika na stranicu za autorizaciju. */ // Ako sesija sadrži 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"])) ( // Preusmjerite korisnika na zaglavlje stranice za prijavu( "location: login.php"); // Zaustavite izvršavanje skripte exit; ) ) // Ako nema podataka ni o korisničkoj prijavi ni o lozinki, // pretpostavljamo da nema autorizacije, preusmjeravamo korisnika // na stranicu autorizacije else ( header("location: login.php"); // Zaustavite izvršavanje skripte exit; )

Sada kreirajmo kod za našu sigurnu stranicu. Biće prilično jednostavno.

Autorizacija i registracija korisnika

Uspješno odobrenje.

Pristupili ste sigurnoj stranici. Možete se odjaviti.



Kao što vidite, u zaštićeni dokument uključujemo samo jednu datoteku - checkAuth.php. Svi ostali fajlovi su povezani u drugim skriptama. Stoga naš kod ne izgleda glomazno. Organizirali smo registraciju i autorizaciju korisnika. Sada morate omogućiti korisnicima da se odjave. Da bismo to uradili, kreiraćemo skriptu u datoteci logout.php.

/** * Skripta za odjavu korisnika. Pošto se korisnici * prijavljuju kroz sesije, njihova prijava i lozinka su pohranjeni * u superglobalnom nizu $_SESSION. Da * se odjavite sa sistema, jednostavno uništite vrijednosti * niza $_SESSION["login"] i $_SESSION["password"], nakon čega * preusmjeravamo korisnika na stranicu za prijavu */ // Budite obavezno započeti sesiju session_start(); unset($_SESSION["login"]); unset($_SESSION["password"]); header("location: login.php");

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

P.S. Znam da je bolje pisati objektno orijentisani kod, znam da se ne isplati prenositi i čuvati šifru u čistom tekstu, da se podaci uneseni u bazu moraju unaprijed provjeriti. Znam. Neću o ovome ovdje.