internetul Windows. Android

Crearea unui sistem simplu de înregistrare a utilizatorilor pe PHP și MySQL. Crearea unui sistem simplu de înregistrare a utilizatorilor pe PHP și MySQL Impersonal Index PHP Înregistrare

Reg.ru: domenii și găzduire

Cel mai mare înregistrator și furnizor de găzduire din Rusia.

Mai mult de 2 milioane de nume de domenii pentru întreținere.

Promovare, poștă pentru un domeniu, soluții de afaceri.

Mai mult de 700 de mii de clienți din întreaga lume și-au făcut deja alegerea.

* Mouse-ul pentru suspendarea derulării.

Inapoi inainte

Crearea unui sistem simplu de înregistrare a utilizatorilor pentru PHP și MySQL

Crearea unui sistem de înregistrare este o treabă mare. Trebuie să scrieți un cod care execută adresele de e-mail, trimite un mesaj la confirmarea corespondenței și, de asemenea, efectuează validarea câmpurilor de formular rămas și multe altele.

Și chiar după ce scrieți toate acestea, utilizatorii se vor înregistra cu reticență, pentru că Acest lucru necesită anumite eforturi din partea lor.

În această lecție, vom crea un sistem foarte simplu de înregistrare care nu necesită și nu stochează parole în general! Rezultatul va fi ușor de schimbat și adăugați la un site PHP existent. Vrei să-ți dai seama cum funcționează? Cititi mai jos.



Iată cum va funcționa sistemul nostru super simplu:

Combinăm forma de autorizare și înregistrare. În acest formular va fi un câmp pentru introducerea unei adrese de e-mail și a unui buton de înregistrare;
- Când completați câmpul Adresa de e-mail, va fi creat un nou utilizator făcând clic pe butonul de înregistrare, dar numai dacă adresa de e-mail introdusă nu se găsește în baza de date.

După aceasta, se creează un anumit set de caractere unice aleatoriu (token), care este trimis utilizatorului specificat de utilizator sub forma unei referințe, care va fi relevantă în termen de 10 minute;
- Prin link, utilizatorul merge pe site-ul nostru. Sistemul determină prezența unui simbol și autorizează utilizatorul;

Avantajele acestei abordări:

Nu este nevoie să stocați parolele și să efectuați validarea câmpului;
- Nu este nevoie să restaurați parola, întrebări secrete etc.;
- din momentul în care utilizatorul a înregistrat / autorizat, puteți fi întotdeauna sigur că acest utilizator va fi în zona dvs. de acces (că adresa de e-mail este adevărată);
- procesul de înregistrare incredibil de simplu;

Dezavantaje:

Securitatea contului de utilizator. Dacă cineva are acces la poștă, se poate conecta.
- Emailul nu este protejat și poate fi interceptat. Rețineți că această întrebare este relevantă și în cazul în care parola a fost uitată și trebuie restabilită sau în orice sistem de autorizare care nu utilizează HTTPS pentru transferul de date (autentificare / parolă);
- în timp ce configurați modul în care aveți nevoie de un server de poștă electronică, există o șansă ca mesajele cu link-uri să autorizeze să fie în spam;

Comparând avantajele și dezavantajele sistemului nostru, se poate spune că sistemul are o gamă mare de yuzabilitate (cea mai convenabilă pentru utilizatorul final) și, în același timp, are un indicator de securitate scăzut.

Deci, utilizați-o este oferită pentru înregistrări pe forumuri și servicii care nu funcționează cu informații importante.

Cum se utilizează acest sistem

În cazul în care trebuie doar să utilizați sistemul pentru a autoriza utilizatorii de pe site-ul dvs. și nu doriți să dezasamblați această lecție pe oase, asta este ceea ce trebuie să faceți:

Trebuie să descărcați sursele atașate la lecție
- găsiți fișierul în arhivă tabele.sql. Importați-l în baza dvs. de date utilizând opțiunea de import în PhpMyAdmin. Oricare alternativă: Deschideți acest fișier printr-un editor de text, copiați interogarea SQL și executați-o;
- Deschis include / Main.php. și completați setările de comunicare cu baza de date (specificați un utilizator și o parolă pentru a comunica cu baza, precum și cu gazda și numele bazei). În același fișier, trebuie să specificați, de asemenea, e-mailul, care va fi folosit ca adresă originală pentru mesajele trimise de sistem. Unele gazde blochează mesajele de ieșire în timp ce formularul nu specifică această adresă de e-mail, care a fost creată din panoul de control al gazdei, deci specificați adresa reală;
- încărcați toate fișierele index.php., protejat.php. Și activele și include foldere prin FTP pe gazda dvs.;
- Adăugați codul de mai jos la fiecare pagină PHP, unde trebuie să afișați formularul de autorizare;

Necesită_once "include / main.php"; $ Utilizator \u003d utilizator nou (); dacă (! $ user- & gtloggedin ()) (redirecționare ("index.php");)
- Gata!

Pentru cei care sunt interesați, cum funcționează totul - înainte de a citi mai jos!

Primul pas este să scrieți codul HTM al formularului de autorizare. Acest cod este situat în fișier. index.php.. Acest fișier conține, de asemenea, un cod PHP care mașinează datele formularului și alte funcții utile ale sistemului de autorizare. Puteți afla mai multe în secțiunea de mai jos dedicată revizuirii codului PHP.

index.php.

Tutorial: Sistem Super Simple de Înregistrare cu PHP & MySQL

Conectați-vă sau înregistrați-vă.

Introduceți adresa dvs. de e-mail de mai sus și vom trimite
aveți un link de conectare.



În secțiunea Head (între etichete și) Am conectat stilurile principale (în această lecție pe care nu le înțeleg, astfel încât le puteți vedea singur. Dosarul Active / CSS / stil.css). La eticheta de închidere

Am conectat biblioteca jQuery și fișierul script.js, pe care îl vom scrie și ne întrebăm mai jos.


JavaScript.

jQuery urmărește starea butonului "Register / autoriie" utilizând funcția e.preventdefault () Și trimite cereri AJAX. În funcție de răspunsul serverului, acesta afișează acest lucru sau respectivul mesaj și determină acțiunile ulterioare /

active / JS / SCRIPT.JS

$ (Funcție () (VAR FORM \u003d $ ("# login-registru"); Form.on ("Trimiteți", Funcția (E) (dacă (Form.is ("Loading, .loggedin")) (return fals ;) Var Email \u003d Form.Find ("Input"). Val (), MASESIONHINGER \u003d FORM.FIND ("span"); E.preventDefault (); $ .post (acest lucru, e-mail: email), funcția ( M) (Form.Addclass ("Eroare"); MassageLholder.Text (M.Message);) altceva (formal.Removeclass ("eroare"). AddClass ("loggedin"); mesaj (M.Message); ));))); $ (Document) .Ajaxstart (funcția ();)); $ (document) .Ajaxcomplete (funcție () (Formular. RemoveClass ("încărcarea");)));)););

a fost adăugată la formularul de afișare a stării actuale a cererii AJAX (aceasta a devenit posibilă din cauza metodelor ajaxstart ()) I. ajaxComplete ()pe care le puteți găsi mai aproape de sfârșitul fișierului).

Această clasă prezintă un fișier GIF animat de filare (ca și cum ar sugera că cererea este procesată) și acționează ca un steag care împiedică forma de re-trimitere (când butonul de înregistrare a fost deja apăsat o dată). Clasă .conectat. - Acesta este un alt steag, este setat când e-mailul a fost trimis. Acest pavilion blochează instantaneu orice altă acțiune cu forma.

Schema bazei de date.

Sistemul nostru incredibil de simplu de înregistrare utilizează 2 mese MySQL (codul SQL este în fișier tabele.sql.). Primele stochează date despre conturile de utilizator. Cea de-a doua stocare a informațiilor despre numărul de încercări de intrare.


Circuitul tabelului de utilizator.

Sistemul nu utilizează parole, care este vizibil în diagramă. Puteți vedea coloana jeton. cu jetoane adiacente coloanei token_valitate. Tokenul este instalat de îndată ce utilizatorul se conectează la sistem, își stabilește e-mailul pentru a trimite un mesaj (mai puțin despre acest lucru în blocul următor). Coloană token_valitate Setează timpul de 10 minute mai târziu, după care Tokenul încetează să fie relevant.


Circuit de masă, care ia în considerare numărul de încercări de autorizare.

În ambele tabele, adresa IP este stocată în formularul prelucrat utilizând funcția IP2Long în câmpul Integer.

Acum putem scrie un cod PHP mic. Funcționalitatea principală a sistemului este încredințată clasei User.class.php.pe care le puteți vedea mai jos.

Această clasă utilizează în mod activ qorm (Docs), aceste biblioteci sunt instrumente minim necesare pentru a lucra cu baze de date. Ea procesează accesul la baza de date, generarea de jetoane și validarea acestora. Este o interfață simplă care vă permite să conectați cu ușurință sistemul de înregistrare pe site-ul dvs. dacă acesta utilizează PHP.

User.class.php.

Utilizator de clasă (// Caz privat ORM Private $ ORM; / ** * Găsiți un utilizator pe Tocken. Numai jetoanele valide sunt luate în considerare. Tocken este generat doar timp de 10 minute de la * @param string $ token. Acesta este Tocken dorit * @return Utilizator. Returnați valoarea utilizatorului Funcție * / Funcția statică publică FindByToken ($ token) (// Găsiți un jeton în baza de date și asigurați-vă că prețul curent de timp $ rezultat \u003d Orm :: for_table (" Reg_Users ") -\u003e Unde (" token ", $ token) -\u003e unde_raw (" token_valitate\u003e acum () ") -\u003e gind_one (); dacă (! $ Rezultat) (return fals;) Returnați utilizator nou ($ rezultat) ;) / ** * Autorizați sau înregistrați un utilizator * @param String $ email. Adresa de e-mail personalizată * @ utilizator * / adresa publică ($ email) (// Dacă un astfel de utilizator există deja, returnați valoarea funcției utilizatorului de la adresa de e-mail specificată stocată în baza de date dacă (Utilizator :: există ($ email)) (returnați utilizatorul nou ($ email);) // Creați altfel un utilizator nou TV în baza de date și returnați valoarea utilizatorului funcției :: Creați din utilizatorul de returnare de e-mail specificat :: Creați ($ email); ) / ** * Creați un utilizator nou și salvați în baza de date * @param String $ email. Adresa de e-mail a utilizatorului * @ReTurn Utilizator * / Funcție statică privată Creați ($ email) (// Scrieți un utilizator nou și returnați rezultatul funcției utilizatorului de la aceste valori $ rezultat \u003d Orm :: for_table ("reg_Users") - \u003e Creare (); $ rezultat-\u003e email \u003d $ e-mail; $ rezultat-\u003e salvați (); returnați utilizatorul nou ($ rezultat);) / * * Verificați dacă un astfel de utilizator există în baza de date și returnați valoarea variabilă a Variabila * @param String $ email. Adresa de e-mail personalizată * @return boolean * / funcția statică publică există ($ e-mail) (// există un utilizator în baza de date? $ Rezultat \u003d orrm :: for_table ("reg_Users") -\u003e Unde ("Email", $ email ) -\u003e Contele (); Return $ rezultat \u003d\u003d 1;) / ** * Creați un obiect utilizator nou * @param instanță $ PARAM ORM, ID, e-mail sau 0 * @ utilizator utilizator * / funcția publică __construct ($ param \u003d null) (dacă ($ PARAM INIPORTOF ORM) (// verificarea ORM este trecut $ acest-\u003e orrm \u003d $ param; altceva dacă (is_string ($ param)) (// verificarea e-mailului $ acest-\u003e om \u003d om :: FOR_TABLE ("REG_USERS") -\u003e Unde ("Email", $ PARAM) -\u003e Find_One ();) altceva ($ id \u003d 0; dacă (IS_Numeric ($ param)) (// identificatorul utilizatorului este transmis la valoarea lui valoarea $ PARAM $ ID Value \u003d $ param;) altfel dacă (Isset (sesiune de $ _ ["LOGINID"])) (// a se vedea în caz contrar sesiunea $ id \u003d $ _session ["loginid"];) $ Acest-\u003e ORM \u003d Orm :: for_table ("reg_Users") -\u003e Unde ("ID", $ ID) -\u003e Find_one ();)) / ** * Generați noul token de autorizare SHA1, scrie În baza de date și returnează valoarea * @return șir * / funcția publică GenerateToken (// Generați un jeton pentru un utilizator autorizat și salvați-l la $ token \u003d SHA1 ($ acest-\u003e email.Time (). Rand (0) , 1000000)); // salvați jetoanele în baza de date // și marcați-o că este relevantă numai în 10 din următoarele minute $ Acest-\u003e ORM-\u003e Set ("token", $ token); $ acest-\u003e orrm-\u003e set_expr ("token_validy", "addtime (acum ()," 0:10 ")"); $ this-\u003e om-\u003e salvați (); Returnați $ token; ) / ** * Autorizați utilizatorul * @return Void * / funcția publică Login () (// marca un utilizator ca autorizat $ _session ["Loginid"] \u003d $ Acest-\u003e id-\u003e id; // reîmprospătați valoarea de The Last_Login Field de bază $ acest-\u003e om-\u003e set_expr ("last_login", "acum ()"); $ this-\u003e orrm-\u003e salvați ();) / ** * distruge sesiunea și divide utilizatorul * @return Void * / Funcție publică Logout () ($ _session \u003d matrice (); UNSET ($ _ sesiune);) / ** * Verificați dacă utilizatorul a venit * @return boolean * / funcția publică loggedin () (return isset ($ Acest-\u003e ORM-\u003e ID) && $ _session ["loginid"] \u003d\u003d $ this-\u003e orrm-\u003e id;) / ** * verificare este administratorul de utilizator * @return boolean * / funcția publică isadmin () (return $ acest-\u003e rang () \u003d \u003d "administrator";) / * * * găsi un tip de utilizator, poate fie administrator sau regular * @return string * / funcție de funcții publice () (dacă ($ this-\u003e orrm-\u003e rang \u003d\u003d 1) (Return "Administrator";) Returnați metoda "Regular";) / ** * vă permite să obțineți informații private Contul de utilizator în * Proprietăți de calitate ale utilizatorului * @param String $ Caracteristică de proprietate cheie care primește accesul * @return Mixt * / Funcție publică __Get (tasta $) (dacă ($ this-\u003e ор -\u003e tasta $)) (revenire $ this-\u003e key orm -\u003e $; ) Returnați null; ))

Jetoanele sunt generate folosind algoritmul SHA1 și sunt stocate în baza de date. Folosesc funcțiile de timp MySQL, pentru a stabili o restricție de 10 minute a relevanței TOKENY.

Când tokenul trece procedura de validare, vorbim direct cu manipulatorul pe care îl considerăm doar jetoanele care nu au date de expirare, stocate în coloana TKEN_VALIDid.

Rețineți că folosesc metoda magică __obține. Bibliotecile Docs la sfârșitul fișierului pentru a intercepta accesul la proprietățile obiectului utilizator.

Datorită acestui fapt, devine posibilă accesarea informațiilor stocate în baza de date, datorită proprietăților $ User-\u003e email, $ user-\u003e token și colab. În următorul fragment de cod, ia în considerare pentru un exemplu, cum să utilizați aceste clase.


Pagina protejată

Un alt fișier care stochează funcționalitatea utilă și necesară este un fișier. funcții.php.. Există mai mulți așa-numitele funcții asistente - asistent care vă permit să creați un cod mai curat și lizibil în alte fișiere.

funcții.php.

Funcție Send_email ($ de la, $ la, $ subiect, Mesaj $) (// helper, trimiterea e-mail $ headers \u003d "Mime-version: 1.0" \\ r \\ n "; $ antets \u003d" Content Tip: Text / Simplu; CHARSET \u003d UTF-8 ". \\ R \\ n"; € antets. \u003d "De la:" $ de la. "\\ R \\ n"; retur e-mail ($ la, $ subiect, $ mesaj, $ antete );) FUNCȚIA GET_PAGE_URL () (// determină adresa URL a fișierului PHP din SUA \u003d "http". (Goală ($ _ server ["https"]? "": "S"). ": //" $ _ server ["Server_name"]; dacă (ISSET (serverul $ _ ["solicitare_uri"]) && $ _Server ["solicitare_uri"]! \u003d "") ($ URL. \u003d $ _Server ["solicitare_uri"];) altceva ($ URL . \u003d $ _SERVER ["PATH_INFO"];) RETURN $ URL;) Funcție Rate_limit ($ IP, $ Limit_Hour \u003d 20, $ Limit_10_min \u003d 10) (// Numărul de încercări de intrare pentru ultima oră pe această adresă IP $ Count_Hour \u003d Orm:: For_Table ("Reg_login_Attempt") -\u003e Unde ("IP", Sprintf ("% U", IP2Long ($ IP))) -\u003e Unde_Rew ("TS\u003e SubTime (acum ()," 1:00 " ) ") -\u003e Numărul (); // Numărul de încercări de intrare în ultimele 10 minute pe această adresă IP $ Count_10_min \u003d Orm :: for_table (" reg_login_Attempt ") -\u003e Unde (" IP ", Sprint f ("% u", ip2long ($ IP))) -\u003e unde_rw ("Ts\u003e Subtime (acum ()," 0:10 ")") -\u003e Count (); Dacă ($ numără_hour\u003e $ limit_hour || $ Count_10_min\u003e $ limit_10_min) (arunca o excepție nouă ("prea multe încercări de conectare!");)))))) funcția rata_limit_tick ($ IP, $ email) (// creați o nouă intrare în tabel Acest lucru ia în considerare numărul de încercări de intrare $ Login_Attempt \u003d Orm :: for_table ("reg_login_Attempt") -\u003e Creare (); $ login_Attempt-\u003e email \u003d $ email; $ login_Attempt-\u003e IP \u003d sprintf ("% U", IP2Long ($ IP )); $ login_Attempt-\u003e Salvare ();) Redirecționarea funcției ($ URL) (antet ("Locație: $ url"); Ieșire;)

Funcții ratat_limit. și ritm_limit_tick. Acestea sunt urmate de numărul de încercări de autorizare pentru perioada expirată de timp din momentul primei încercări. Încercarea de intrare este înregistrată în baza de date în coloana Reg_login_Attempt. Aceste funcții sunt numite la procesarea și trimiterea datelor formularului după cum puteți vedea de la fragmentul de cod următor.

Codul este preluat din fișierul de mai jos. index.php. Și procesează trimiterea formularului. Returnează un răspuns JSON, care, la rândul său, este procesat de jQuery în dosar active / JS / SCRIPT.JSpe care le-am dezasamblat deja mai devreme.

index.php.

Încercați (dacă (! Gol ($ _ Post) && izset ($ _ server [http_x_requsted_with "])) (// ieșire un antet antet JSON (" conținut-tip: aplicație / json "); // este această adresă de e-mail Valid dacă (_ ISET ($ _ Post ["Email"]) ||! Filter_var ($ _ Postați ["Email"], Filter_valided_email)) (aruncați o excepție nouă ("Introduceți un e-mail valid");) // Verificați . Indiferent dacă utilizatorul este permis să se conecteze, depășește numărul de conexiuni admise? (Funcții Funcții.php pentru mai multe informații) RATE_LIMIT ($ _ Server ["Remote_Addr"]); // Înregistrați această încercare de a autoriza rata_limit_tick ($ _ Server ["Remote_Addr"], $ _post ["e-mail"]); // trimite o scrisoare către utilizator $ message \u003d ""; $ email \u003d $ _post ["email"]; $ subiect \u003d "link-ul dvs. de conectare" ; dacă (! Utilizator :: există ($ email)) ($ subiect \u003d "vă mulțumesc pentru înregistrare!" $ message \u003d "vă mulțumesc pentru înregistrarea la site-ul nostru! \\ n \\ n";) // Încercați să autorizați sau Înregistrați utilizatorul $ Utilizator \u003d utilizator :: LoginorRregister ($ _ Post ["Email"]); $ mesaj. \u003d "Vă puteți conecta din această adresă URL: \\ n" ; $ mesaj. \u003d get_page_url (). "? tkn \u003d". $ user-\u003e genatetoken () "\\ n \\ n"; $ Mesaj. \u003d "Linkul va expira automat după 10 minute."; $ rezultand \u003d Send_email ($ de la email, $ _post ["Email"], $ subiect, $ mesaj); Dacă (! $ Rezultat) (a aruncat o nouă excepție ("A apărut o eroare la trimiterea de e-mail. Încercați din nou.");) Die (JSON_ENCODE (ARRAY ("Mesaj" \u003d\u003e "Mulțumesc! Am trimis un link În căsuța de e-mail. Verificați și folderul spamului. ")));))))) De captură (JSON_ENCODE (matrice (eroare" \u003d\u003e 1, "Mesaj" \u003d\u003e $ e-\u003e getMessage ())));)

După o autorizație de succes / cod de înregistrare, utilizatorul va trimite un link către autorizația utilizatorului. Tocken devine accesibil, pentru că Acesta este transmis ca o variabilă în metoda de legătură generată $ _Get. Cu marker TKN.

index.php.

Dacă (_ _ obține ["tkn"])) (// este acest jetken valabil pentru autorizare? $ User \u003d utilizator :: FindbyToken ($ _ obține ["tkn"]); dacă ($ utilizator) (/// Da este. Pentru a face o redirecționare a paginii protejate de $ user-\u003e Login (), redirecționare ("protejat.php");) // Nu, tokenul nu este valid. Implementați o redirecționare, pe pagină cu formularul de autorizare / înregistrare a redirecționării ("index.php");)

$ Utilizator-\u003e Login ()

creați variabilele necesare pentru sesiune, astfel încât utilizatorul, privindu-se prin paginile ulterioare ale site-ului, va rămâne autorizat tot timpul.

În mod similar, prelucrarea funcției de ieșire a sistemului este, de asemenea, aranjată.

index.php.

Dacă ($ _ obține ["logout"])) ($ Utilizator \u003d utilizator nou (); dacă ($ user-\u003e loggedin ()) ($ user-\u003e logout ();) redirecționare ("index.php" );););

La sfârșitul codului, am pus din nou o redirecționare pe index.php, astfel parametrul ? Logout \u003d 1 Nu este necesar de către adresa URL nu este necesară.

Fișierul nostru. index.php. necesită adăugare. Protecție - Nu vrem ca oamenii care au fost vreodată conectați la sistem au văzut din nou formularul de înregistrare. În aceste scopuri, folosim metoda $ User-\u003e loggedin ().

index.php.

$ Utilizator \u003d utilizator nou (); dacă ($ user-\u003e loggedin ()) (Redirect (protejat.php ");)

În cele din urmă, aici este o bucată de cod care vă permite să protejați paginile site-ului dvs. și să îl puneți la dispoziție numai după autorizare.

protejat.php.

// Pentru a proteja fiecare pagină de pe site-ul dvs., conectați fișierul // Main.php la acesta și creați un nou obiect utilizator. Așa este cât de ușor este! Necesită_once "include / main.php"; $ Utilizator \u003d utilizator nou (); Dacă (! $ Utilizator-\u003e Loggedin ()) (Redirect ("index.php");)

După această verificare, puteți fi siguri că utilizatorul a fost autorizat cu succes. De asemenea, puteți accesa informațiile stocate în baza de date utilizând proprietățile obiectului. $ Utilizator.. Pentru a afișa e-mailurile și utilizatorul și starea acestuia, utilizați acest cod:

ECHO "Emailul dvs.:" $ Utilizator-\u003e Email; ECHO "Rangul dvs .:" $ user-\u003e rang ();

Metodă rang () Folosit aici deoarece baza de date este de obicei stocată (0 pentru un utilizator obișnuit, 1 pentru administrator) și trebuie să convertim aceste date la statusurile la care se referă la noi și această metodă ajută.

Pentru a face un administrator de la un utilizator obișnuit, editați pur și simplu intrarea utilizatorului prin PHPMYADMIN (sau orice alt program care vă permite să gestionați bazele de date). Starea administratorului nu oferă niciun privilegii, în acest exemplu pe pagina va fi afișată că sunteți administrator - și asta este.

Dar ce să faceți cu el - rămâne la discreția dvs., puteți scrie și crea un cod care definește anumite privilegii și oportunități pentru administratori.

Am terminat!

Cu această formă incredibil de super-cvasi simplă, am terminat! Puteți să o utilizați în site-urile PHP, este destul de ușor. De asemenea, îl puteți modifica în sine și îl puteți face așa cum doriți.

Material preparat Denis Baby special pentru site-ul site-ului

P.S. Doriți să treceți în Mastering PHP și OOP? Acordați atenție lecțiilor premium asupra diferitelor aspecte ale clădirilor site-ului, inclusiv programarea PHP, precum și un curs gratuit pentru crearea sistemului CMS pe PHP de la zero utilizând OOP:

Ți-a plăcut materialul și vrei să-i mulțumesc?
Doar împărtășiți cu prietenii și colegii!


Buna! Acum vom încerca să implementăm cea mai simplă înregistrare pe site folosind PHP + MySQL. Pentru aceasta, Apache trebuie instalat pe computer. Principiul funcționării scenariului nostru este prezentat mai jos.

1. Să începem cu crearea rețelelor de utilizatori din baza de date. Acesta va conține date de utilizator (login și parolă). Du-te la PhpMyAdmin (dacă creați o bază pe PC http: // localhost / phpmyadmin /). Creați un tabel utilizatori.Va avea 3 domenii.

Îl creez în baza de date MySQL, puteți crea într-o altă bază de date. Apoi, setați valorile ca în imagine:

2. Este necesar să se conecteze la acest tabel. Să creăm un fișier bd.php.. Conținutul său:

$ db \u003d mysql_connect ("Serverul MySQL", "Conectați-vă la acest server", "Parolă la acest server");
mysql_select_db ("numele bazei la care vă conectați", $ db);
?>

În cazul meu arată astfel:

$ db \u003d mysql_connect ("localhost", "utilizator", "1234");
mysql_select_db ("mysql", $ db);
?>

Salvați bd.php..
Excelent! Avem o masă în baza de date, conexiunea la ea. Acum puteți începe să creați o pagină pe care utilizatorii își vor părăsi datele.

3. Creați un fișier reg.php cu conținut (toate comentariile din interior):



verifica


verifica


















4. Creați un fișiercare va permite datele în baza de date și va salva utilizatorul. sAVE_USER.PHP.(Comentariile din interior):



{
}
// Dacă sunt introduse datele de conectare și parola, le procesați astfel încât etichetele și scripturile să nu funcționeze, nu știți niciodată ce pot intra oamenii


// eliminați lacunele suplimentare
$ login \u003d Trim ($ login);
$ parola \u003d ornamente ($ parola);
// Conectați la baza de date
// verificați existența unui utilizator cu aceeași autentificare
$ rezultat \u003d mysql_query ("Selectați ID de la utilizatorii în care Login \u003d" $ Login ", $ db);
Dacă (! Goală ($ myrow ["id"])) (
Ieșiți ("Ne pare rău, autentificarea introdusă deja înregistrată. Introduceți o altă autentificare.");
}
// Dacă nu, salvăm datele
$ rezultat2 \u003d mysql_query ("introduceți în utilizatori (login, parolă) (" $ login "," $ parola ")");
// verificați dacă există erori
dacă ($ rezultatul2 \u003d\u003d "adevărat")
{
ECHO "Sunteți înregistrați cu succes! Acum puteți merge la site. Pagina de pornire";
}
Altfel (
ECHO "Eroare! Nu sunteți înregistrat.";
}
?>

5. Acum, utilizatorii noștri se pot înregistra! Apoi, trebuie să faceți "ușa" pentru a intra în site-ul deja înregistrat utilizatorii. index.php. (Comentariile din interior):

// Întreaga procedură funcționează la sesiuni. Este în el că datele utilizatorului sunt stocate în timp ce se află pe site. Este foarte important să le lansați la începutul paginii!
sesiune_start ();
?>


Pagina principală


Pagina principală











Inregistreaza-te



// Verificați dacă variabilele de e-mail și ID-urile utilizatorului
dacă (goală (sesiune $ _ ["LOGIN"]) sau goală (sesiune de $ _ ["ID"]))
{
// Dacă este gol, atunci nu afișăm legătura
Echo "Ați intrat pe site ca un oaspete
Acest link este disponibil numai utilizatorilor înregistrați. "
}
Altfel.
{

În dosar index.php. Vom retrage o referință care va fi deschisă numai pentru utilizatorii înregistrați. Aceasta este întreaga esență a scenariului - pentru a limita accesul la orice date.

6. A rămas un fișier cu verificarea conectării și a parolei introduse. Testreg.php (Comentarii):

session_start (); // întreaga procedură funcționează la sesiuni. Este în el că datele utilizatorului sunt stocate în timp ce se află pe site. Este foarte important să le lansați la începutul paginii!
dacă (Isset ($ _ Post ["Login"])) ($ login \u003d $ _post ["login"]; dacă ($ login \u003d\u003d "") (dezactivare ($ login);))) // Introducem numele de utilizator înscris de variabila de utilizator USD $ dacă este goală, apoi distrugeți variabila
Dacă (Isset ($ _ Postare ["parolă"])) ($ parolă \u003d $ _ Postați ["parolă"]; dacă ($ parola \u003d\u003d "") (dezordine ($ parola);))
// Introducem parola introdusă de utilizator în variabila de parolă $, dacă este goală, apoi distruge variabila
dacă (goală ($ login) sau goală ($ parolă)) // Dacă utilizatorul nu a introdus o autentificare sau o parolă, atunci dau o eroare și opriți scriptul
{
Ieșiți ("Ați introdus toate informațiile, reveniți și completați toate câmpurile!");
}
// Dacă sunt introduse datele de conectare și parola, le procesați astfel încât etichetele și scripturile să nu funcționeze, nu știți niciodată ce pot intra oamenii
$ login \u003d stripslashes ($ login);
$ login \u003d htmlscelChars ($ login);
$ parola \u003d stripslashes ($ parola);
$ parola \u003d htmlspecialchars ($ parola);
// eliminați lacunele suplimentare
$ login \u003d Trim ($ login);
$ parola \u003d ornamente ($ parola);
// Conectați la baza de date
Includeți fișierul "bd.php"); // bd.php fișier trebuie să fie în același folder ca oricine altcineva, dacă nu, atunci pur și simplu schimbați calea

$ rezultat \u003d mysql_query ("Selectați * de la utilizatorii în care Login \u003d" $ Login ", $ db); // Eliminați toate datele despre utilizator din autentificare din baza de date.
$ myrow \u003d mysql_fetch_array (rezultatul $);
dacă (gol ($ myrow ["parola"]))
{
// Dacă utilizatorul cu datele de conectare nu există
}
Altfel (
// Dacă există, atunci efectuăm parole
dacă ($ myrow ["parolă"] \u003d\u003d $ parola) (
// Dacă se potrivește parolele, începem sesiunea utilizatorului! Îi poți felicita, a intrat el!
$ _Session ["login"] \u003d $ myrow ["login"];
$ _Session ["ID"] \u003d $ myrow ["id"]; // aceste date sunt utilizate foarte des, aici vor "purta cu tine" incluse utilizator
ECHO "Ați introdus cu succes site-ul! Pagina principală";
}
Altfel (
// Dacă parolele nu au venit împreună

Ieșiți ("Ne pare rău, introdus de o autentificare sau o parolă greșită");
}
}
?>

Asta este! Poate o lecție și plictisitoare, dar foarte utile. Numai ideea de înregistrare este afișată aici, apoi vă puteți îmbunătăți: Adăugați protecție, design, câmpuri cu date, încărcarea avatarelor, ieșirea din cont (pentru aceasta, distrugeți doar variabilele din sesiune cu o funcție cu o funcție dezactivați.) etc. Noroc!

Am verificat totul, funcționează bine!

Datorită faptului că există foarte multe întrebări despre variabilele globale și problemele asociate cu deconectarea Directivei Register_Globals, vom încerca să dezvăluim acest subiect un pic în acest articol.

Pentru a începe cu, definim ce variabile externe sunt. Acestea sunt variabile care vin la program din exterior, adică. Nu este definită în programul însuși. Pentru un script pe PHP, toate variabilele care sunt transmise printr-un șir de browser sau prin formular sunt externe.
Luați în considerare modul în care acestea sunt create.

Dacă directiva server_globals \u003d pe (în PHP.ini) este activată pe server, atunci când transmiteți variabile prin formularul sau prin șirul browserului, în scriptul la care sunt destinate aceste variabile, acestea vor fi create automat. Acestea. Dacă ați scris în rândul browserului: www.server.ru/index.php?var\u003d1, atunci variabila $ var va fi creată automat în scriptul index.php cu o valoare de 1.

cometariu

Directiva specificată este una dintre cele mai multe momente de discuție din limba PHP. Pe de o parte, utilizarea sa poate genera de fapt probleme reale cu protecția scenariilor PHP, în contabilitate necorespunzătoare a posibilelor situații eronate și mulți dezvoltatori remarcă în mod corect că scripturile de scriere fără utilizarea variabilelor globale cu 90% reduce vulnerabilitatea scripturilor la diverse atacuri. Pe de altă parte, la începutul apariției PHP, nu o mie de utilizatori au fost încredințați dezvoltatorilor limbii (versiunea PHP 4.3, această directivă a fost activată în mod implicit), care este în prezent de milioane de funcționări efective Scripturile scrise utilizând variabile globale (în valoare de notare, care în scopuri de formare sunt uneori complet necorespunzătoare pentru a scrie scripturi folosind variabile globale, deoarece de la înlocuirea unor matrice superglobale se înrăutățește foarte mult lizibilitatea codului).

În prezent, majoritatea furnizorilor gazdă au această directivă și, aparent, vor rămâne incluzive de mult timp, deoarece altfel continuitatea codului poate fi perturbată.

Cu Directiva Register_Globals dezactivată, accesul la astfel de variabile este posibil în două moduri:

  • prin matrice asociative http _ *** _ Vars (http_post_vars etc.)
  • prin intermediul matricelor superglobale ($ _env, $ _get, $ _post, $ _Server, $ _cookie, $ _files etc.)

Arrays superglobal sunt disponibile în orice zonă de vizibilitate. Dezvoltatorii PHP sunt recomandați să dezactiveze Directiva Register_Globals pe server și să lucreze cu variabile prin matrice superglobale. Această recomandare este legată de problemele de securitate care ar putea apărea atunci când directiva Register_Globals este activată.

Deși până de curând, pe hostings, Directiva Register_Globals a rămas activată. Situația a început să se schimbe cu producția PHP 5, în cazul în care această directivă implicită este dezactivată și caracterul Host nu se grăbește să îl transforme (poate corect).

Deci, ce anume pentru a obține variabile - trebuie să le luați din matricele superglobale. De exemplu, pentru a obține variabile transmise prin șirul browserului, utilizați o matrice de $ _Get. Să presupunem că este scris în șirul browserului www.server.ru/index.php?var\u003d1, apoi pentru a obține o variabilă variană în index.php Trebuie să scrieți:

$ var \u003d $ _ obține ["var"];

Și, de exemplu, pentru a obține variabile transferate de la formular prin metoda post într-un script de formare, trebuie să scrieți:

$ var \u003d $ _ Post ["var"];

13.9k.

Bună ziua Stimate Web Master, articolul spune cât de periculos să părăsiți opțiunea Register_globals activată. S-ar putea să fi auzit că utilizarea acestuia poate duce la munca nesigură a programului dvs. (script). Dar să ne dăm seama de modul în care această opțiune poate fi folosită în scopuri opoziționale și cum să vă protejați.

Ce este register_globals?
Această opțiune în PHP.ini, care indică necesitatea înregistrării variabilelor primite de postare sau de a obține metoda într-o matrice globală globală.

Pentru claritate, voi aduce un exemplu când register_globals \u003d On.
Există un fișier "index.php" cu conținut:

", ECHO Globale [" ASD "]." - Link în Globale Global Globals
"; ECHO $ \u200b\u200b_GET [" ASD "]." - $ _get ["ASD"] ";?\u003e

În bara de adrese, scrieți: index.php? Asd \u003d 123

După cum putem vedea, au fost create 2 variabile: un loc local (+ link la Globals $), celălalt în matricea $ _GET. Mulți nu folosesc deloc o matrice de $ _GET, acestea continuă să proceseze variabila "$ ASD" după ce a primit-o din exterior.
Dar să ne gândim la asta, de ce "poluăm" matricea globală $? Pentru aceasta, avem o matrice speciale care stochează datele adoptate de metodele de obținere (matrice $ _get) și postare (matrice $ _post).

Același exemplu, dar când Register_Globals \u003d Off:

Asa de Variabila locală nu a fost creată și pentru manipularea cu "$ ASD" trebuie să folosim o matrice $ _GET.

Poate că acum v-ați schimbat opinia despre Register_Globals.
Probabil trebuie să rescrieți ceva în programele dvs., dar merită.

Și acum vă voi spune cum un hacker poate lua această opțiune în scopuri proprii, adică. Când înregistrați_globale \u003d pe
Voi începe de la simplu la complex.

Adesea vedem avertismente:

Notă: Variabilă nedefinită: ASD (nume variabil) în ****

Ce înseamnă? Aceasta înseamnă că variabila "ASD" nu a fost definită în mod explicit.
De exemplu, unii oameni se dedau în similare:

Acestea. Fără a determina variabila, începeți imediat să o utilizați. Codul dat în teorie nu este frică, dar gândiți-vă la asta, dacă aceasta este variabila "ASD", este consecința fișierului? De exemplu, vom scrie următoarele în bara de adrese: "Index.php? Asd \u003d Luxger +" și obțineți: "LUSER 0123456789". Ei bine, va fi frumos să vezi asta? Nu cred.

Să presupunem că scriem sistemul de autentificare a utilizatorului:

Am condus un sistem Holey evident, ar trebui să scriem numai în bara de adrese "index.php? Valid_user \u003d 1" și vom primi inscripția "Bună ziua, utilizator"

Asta nu s-ar întâmpla dacă am scris așa:

Acestea. Ei înșiși au identificat variabila $ valid_user ca falsă în caz de eșec.

Voi da un exemplu cu injecția SQL:

În bara de adrese, scrieți: "Index.php? Unde \u003d Id \u003d 0 + Union + All + Selectați + Login, + Parolă, + Null + de la + Admin + Unde + LOGIN \u003d" Admin "Apreciem SQL Injection:

Iar hackerul primește aspectul și parolele: (

După cum vedeți toate exemplele, aveți găuri în protecția care pot fi operate prin intermediul register_globals inclus.

Puteți face față acestui lucru, dacă definiți întotdeauna o variabilă indiferent de condiții. Sau să utilizați încapsularea variabilelor în funcții, adică Când definiți funcția, atunci variabilele pe care le-o vor fi închise din exterior, de exemplu:

Acum, dacă scriem în bara de adrese: "index.php? Unde \u003d 123"
Da: "$ unde nu există"
Dar acest lucru este prevăzut că nu instalați $ unde variabilă ca globală, adică "Global $ unde"

Pot să vin cu o mulțime de exemple, dar cred că vei fi de ajuns pentru mine să înțeleg.
Vreau să spun că toate aceste probleme sunt rotunde în vară când setați opțiunea Register_Globals \u003d Off și încercați din nou toate exemplele de mai sus.

Se poate face ca în php.ini, dar majoritatea furnizorilor de găzduire nu vă vor permite, pentru că trebuie să utilizați fișierul ".htaccess"

În acest articol veți învăța cum se creează un formular de înregistrare și autorizareUtilizând HTML, JavaScript, PHP și MySQL. Astfel de forme sunt utilizate aproape pe fiecare site, indiferent de tipul său. Acestea sunt, de asemenea, create pentru forum și pentru Internet al magazinului și pentru rețelele sociale (cum ar fi Facebook, Twiter, Odnoklasniki) și pentru multe alte tipuri de site-uri.

Dacă aveți un site pe un computer local, atunci sper că aveți deja serverul local este instalat și rulează. Fără ea, nimic nu va funcționa.

Crearea unui tabel în baza de date

Pentru a implementa înregistrarea utilizatorilor, în primul rând avem nevoie de o bază de date. Dacă aveți deja acest lucru, atunci minunat, altfel trebuie să îl creați. În articol, explic în detaliu cum să o fac.

Și așa avem o bază de date (bază de date abreviată), acum trebuie să creăm o masă utilizatori. În care vom adăuga utilizatorii noștri înregistrați.

Cum se creează un tabel în baza de date, am explicat și în articol. Înainte de a crea un tabel, trebuie să determinăm ce câmpuri vor conține. Aceste câmpuri vor corespunde câmpurilor din formularul de înregistrare.

Așa că au crezut, au prezentat ce domenii ar fi forma noastră și creați o masă utilizatori. Cu astfel de câmpuri:

  • iD. - Identificator. Camp iD. Trebuie să aibă fiecare masă din baza de date.
  • nume. - Pentru a salva numele.
  • numele de familie. - Pentru a salva numele de familie.
  • e-mail - Salvarea adresei poștale. E-mail Vom folosi ca un autentificare, astfel încât acest câmp ar trebui să fie unic, adică să aibă un indice unic.
  • email_status. - Câmpul pentru instrucțiuni este confirmat prin poștă sau nu. Dacă poșta este confirmată, va avea o valoare de 1, în caz contrar valoarea este 0.
  • parola. - Pentru a salva parola.


Dacă doriți ca forma dvs. de înregistrare să aibă alte câmpuri, atunci le puteți adăuga și aici.

Tot, masa noastră utilizatori. Gata. Du-te la următoarea etapă.

Conectarea la baza de date

Am creat o bază de date, acum trebuie să vă conectați la acesta. Conexiunea va fi efectuată utilizând PHP Expansion Mysqli.

În dosarul site-ului nostru, creați un fișier numit dbconnect.php.Și scriem următorul script în ea:

Eroare la conectarea la baza de date. Descrierea erorii: ".mysqli_connect_error ()."

"Ieșire ();) // Setați codarea conexiunii $ mysqli-\u003e Set_Charit (" UTF8 "); // Pentru comoditate, adăugați o variabilă aici, care va conține numele site-ului nostru $ adresa_site \u003d" http: //testsite.local ";?\u003e

Acest fișier dbconnect.php. Va fi necesar să vă conectați la manipulatori de formular.

Acordați atenție variabilei $ Adresa_site.Aici am indicat numele site-ului meu de testare, pe care voi lucra. Respectiv, specificați numele site-ului dvs.

Structura site-ului

Acum, să ne dăm seama cu structura HTML a site-ului nostru.

Antetul și subsolul site-ului vor fi depuse la fișiere individuale, header.php. și footer.php.. Le vom conecta la toate paginile. Și anume pe principalul (fișier index.php.), pe pagina cu forma de înregistrare (dosar form_register.php.) și pe pagină cu forma de autorizare (fișier form_auth.php.).

Blocați cu referințele noastre verifica și autorizare, Adăugați la antetul site-ului, astfel încât acestea să fie afișate pe toate paginile. O legătură va intra pe pagina cu formularul de înregistrare (fişier form_register.php.) și celălalt la pagină cu formă de autorizare (fişier form_auth.php.).

Header.php Conținutul fișierului:

Numele site-ului nostru

Ca rezultat, pagina principală, arătăm astfel:


Desigur, puteți avea o structură complet diferită pe site, dar acest lucru nu este important pentru noi acum. Principalul lucru este de a avea referințe (butoane) de înregistrare și autorizare.

Acum, să ne întoarcem la forma înregistrării. După cum ați înțeles deja, ea este în dosar form_register.php..

Mergem la baza de date (în PhpMyAdmin), deschideți structura mesei utilizatori. Și ne uităm la ce domenii avem nevoie. Deci, avem nevoie de câmpuri pentru a introduce numele și prenumele, câmpul Adresa poștală (e-mail) și câmpul de introducere a parolei. Și chiar și din motive de securitate, adăugați un câmp de închidere.

Pe server, ca urmare a procesării formularului de înregistrare, pot apărea diferite erori, datorită cărora utilizatorul nu se poate înregistra. Prin urmare, pentru ca utilizatorul să înțeleagă de ce înregistrarea nu este supusă, este necesar să se afișeze mesaje despre aceste erori.

Înainte de afișarea formularului, adăugați un bloc la mesajele de eroare de ieșire din sesiune.

Și un alt moment, dacă utilizatorul este deja autorizat și vine vorba de pagina de înregistrare, scriind în browser-ul din bara de adrese adresa_sight / form_register.php.În acest caz, în acest caz, în loc de formularul de înregistrare, îi vom aduce un titlu pe care îl este deja înregistrat.

În general, codul fișierului form_register.php. Am primit astfel:

Esti deja inregistrat

În browser, pagina cu forma de înregistrare arată astfel:


Prin intermediul atributul necesar, am făcut toate câmpurile obligatorii pentru a umple.

Acordați atenție codului codului de înregistrare unde cAPTCHA este derivată:


Noi, în valoarea atributului SRC pentru imagine, am indicat calea către fișier captch.php.care generează această captură.

Să ne uităm la codul de fișier captch.php.:

Codul este bine comentat, așa că voi locui doar la un moment dat.

În interiorul funcției imagettftext ()Calea indicată către font verna.ttf.. Deci, pentru lucrarea corectă Capcha, trebuie să creăm un dosar fonturi.și puneți un fișier de font acolo verna.ttf.. Puteți găsi și descărca de pe Internet sau luați de la arhivă cu materialele acestui articol.

Cu structura HTML am terminat, este timpul să mergem mai departe.

Email de verificare privind validitatea utilizând jQuery

Orice formă trebuie să verifice validitatea datelor introduse, atât pe partea clientului (utilizând JavaScript, JQuery), cât și pe partea serverului.

Trebuie să plătim o atenție deosebită domeniului de e-mail. Este foarte important ca adresa poștală introdusă să fie valabilă.

Pentru acest câmp de introducere, setați tipul de e-mail (tipul de e-mail "), acesta este puțin precaut de formate incorecte. Dar acest lucru nu este suficient, deoarece prin intermediul codului de cod, pe care ni-l oferă browserul, puteți schimba cu ușurință valoarea atributului tip din e-mail pe tEXT.Și tot, cecul nostru va fi nevalid.


Și în acest caz, trebuie să facem o verificare mai fiabilă. Pentru a face acest lucru, utilizați Biblioteca JavaScript JQuery.

Pentru a conecta biblioteca JQuery, în fișier header.php.Între etichete În fața etichetei de închidere , Adăugați această linie:

Imediat după această linie, adăugați codul de verificare a validării prin e-mail. Aici voi adăuga codul pentru verificarea lungimii parolei introduse. Lungimea sa ar trebui să fie de cel puțin 6 caractere.

Folosind acest script, verificăm adresa poștală introdusă pe valabilitate. Dacă utilizatorul a intrat în e-mail greșit, atunci îl aducem o greșeală despre acest lucru și dezactivați butonul de trimitere. Dacă totul este bine, eliminăm eroarea și activăm butonul de trimitere.

Și așa, cu o verificare a formei Partea clientului pe care am terminat-o. Acum îl putem trimite la serverul unde veți face și câteva cecuri și adăugați date în baza de date.

Înregistrare utilizator

Forma pe care o trimitem la procesarea fișierului register.php., prin metoda post. Numele acestui fișier de mână este indicat în valoarea atributului. acțiune.. Și metoda de trimitere este indicată în valoarea atributului. metodă..

Deschideți acest fișier register.php. Și primul lucru pe care trebuie să-l facem este să scrieți o funcție de lansare a sesiunii și să conectați fișierul creat anterior dbconnect.php. (În acest fișier, ne-am conectat la baza de date). Și, de asemenea, declarați imediat celulele mesaje de eroare. și succes_messages. În matricea globală a sesiunii. ÎN error_mesaje. Vom înregistra toate mesajele de eroare apărute în timpul procesării formularului și în succes_Messages.Vom scrie mesaje pline de bucurie.

Înainte de a continua, trebuie să verificăm a existat deloc o formă. Atacatorul poate privi valoarea atributului acțiune. Din formular și aflați ce fișier este angajat în procesarea acestui formular. Și el poate veni în minte gândul de a se deplasa direct la acest fișier, formând în bara de adrese a browserului o astfel de adresă: http: //ãs_site/register.php.

Prin urmare, trebuie să verificăm prezența unei celule în matricea post-globală, numele care corespunde numelui butonului nostru "Register" din formular. Deci, verificăm dacă butonul "Înregistrare" este apăsat sau nu.

Dacă atacatorul încearcă să meargă direct la acest fișier, el primește un mesaj de eroare. Vă reamintesc că variabila $ adrese_site conține numele site-ului și a fost anunțat în fișier dbconnect.php..

Eroare! Pagina principală.

"); } ?>

Valoarea CAPTCHA în sesiune a fost adăugată la generarea acestuia, în dosar captch.php.. Pentru a vă reaminti arătați această bucată de cod din fișier captch.php.În cazul în care valoarea CAPTCHA este adăugată la sesiune:

Acum treceți la verificarea însăși. În dosar register.php., în interiorul blocului, unde verificați dacă butonul "Înregistrare" a fost apăsat sau mai degrabă în cazul în care este indicat comentariul ". // (1) loc pentru următoarea bucată de cod"Noi scriem:

// verificați captcha // Reducerea golurilor de la început și de la capătul $ CAPTCHA \u003d Trim ($ _ Postare ["CAPTCHA"]); Dacă ($ _ Postare ["captcha"]) && goale ($ captcha)) (// comparați valoarea cu valoarea din sesiune. Dacă (($ _ sesiune ["RAND"]! \u003d $ Captcha ) && ($ _session ["rand"]! \u003d "")) (// dacă PIN-ul nu este corect, atunci returnăm utilizatorul la pagina de înregistrare și i-a dat un mesaj despre eroarea pe care a introdus-o greșit capping. $ error_message \u003d "

Eroare! Ai intrat în limitele greșite

"// salvăm un mesaj de eroare în sesiune. $ _Session [" error_mesages "] \u003d $ error_message; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ Adresa_site." / Form_register.php "); // porniți scriptul de ieșire ();) // (2) loc pentru următoarea bucată de cod) altceva (// dacă captcha nu este transmisă sau este goală Ieșire ("

Eroare! Nu există cod de verificare, adică codul Cappitch. Puteți merge la pagina principală.

"); }

Apoi, trebuie să procesăm datele obținute, de la Massivul Post. În primul rând, trebuie să verificăm conținutul masivului postal global, adică dacă celulele sunt acolo, ale căror nume corespund numelor câmpurilor de intrare din forma noastră.

Dacă există celula, apoi tăiați spațiile de la început și de la capătul liniei din această celulă, în caz contrar, redirecționarea utilizatorului înapoi la pagina Formular de înregistrare.

Apoi, după tăierea spațiilor, adăugați un șir la variabila și verificați această variabilă la nivelul gol, dacă nu este gol, apoi mergem mai departe, altfel sunteți redirecționat înapoi la pagină cu formularul de înregistrare.

Acest cod insert în locația specificată " // (2) loc pentru următoarea bucată de cod".

/ * Verifică dacă în matrice Global $ _post există date trimise din formular și încheie datele transmise la variabilele normale. * / IF (ISSET ($ _ Post ["First_Name"]) (// tăiați spațiile de la Începând și de la sfârșitul șirului de $ First_Name \u003d Trim ($ _ Post ["First_Name"]); // verificați variabila la golf_name (! gol ($ First_Name)) (// Pentru securitate, transformăm caractere speciale În entitatea HTML $ First_Name \u003d HtmlSpecialChars ($ First_Name, ENT_Quotes);) altceva (// salvăm un mesaj de eroare în sesiune. $ _session ["Error_Messages"]. \u003d "

Specificați numele dvs.

Câmpul lipsă numit

"// returnați un utilizator la antetul paginii de înregistrare (http / 1.1 301 mutat permanent"); antet ("locație:". $ Adresa_site. "/ Form_register.php"); // porniți scriptul de ieșire (); ) dacă (ISSET ($ _ Post ["Last_Name"])) (// tăiați spațiile de la început și de la sfârșitul $ last_name \u003d Trim ($ _ Postare ["Last_name"]; Dacă (! $ last_name) (// Pentru securitate, transformăm caractere speciale în esența HTML a $ last_name \u003d htmlspecialchars ($ last_name, ent_quotes);) altceva (// salvăm un mesaj de eroare la sesiune. $ _session ["Error_Messages" ]. \u003d "

Specificați numele dvs. de familie

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

Câmpul lipsă cu numele de familie

"// returnați un utilizator la antetul paginii de înregistrare (http / 1.1 301 mutat permanent"); antet ("locație:". $ Adresa_site. "/ Form_register.php"); // porniți scriptul de ieșire (); ) dacă (ISSET ($ _ Post ["Email"])) (// tăiați spațiile de la început și de la sfârșitul e-mailului $ \u003d Trim ($ _ Post ["Email"]; Dacă (! $ email)) ($ email \u003d htmlspeccialchars ($ email, ent_quotes); // (3) locația codului pentru a verifica formatul adresei poștale și unicitatea acestuia) altceva (// salvăm un mesaj de eroare în sesiune . $ _session ["error_mesages"]. \u003d "

Specificați adresa dvs. de e-mail

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

"// returnați un utilizator la antetul paginii de înregistrare (http / 1.1 301 mutat permanent"); antet ("locație:". $ Adresa_site. "/ Form_register.php"); // porniți scriptul de ieșire (); ) dacă (ISSET ($ _ Postare ["Parolă"])) (// tăiați spațiile de la început și de la sfârșitul parolei $ \u003d Trim ($ _ Post ["parolă"]); dacă (! $ Password)) ($ parola \u003d htmlscelChars ($ parola, ent_quotes); // Enciprate Paparol $ parola \u003d MD5 ($ parola ");) altceva (// salvăm un mesaj de eroare la sesiune. $ _session [ "Error_Messages"]. \u003d "

Specificați parola

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

"; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); ) // (4) loc pentru codul de adăugare a unui utilizator în baza de date

Importanța specială are un domeniu e-mail. Trebuie să verificăm formatul adresei poștale primite și unicitatea acestuia în baza de date. Adică, nu mai există nici un utilizator cu aceeași adresă de e-mail.

În locul specificat " // (3) locația codului pentru a verifica formatul adresei poștale și unicitatea acestuia"Adăugați următorul cod:

// verificați formatul adresei poștale primite utilizând o expresie regulată $ reg_email \u003d "/ ^ ** @ (+ (+)) * (.) + + / I"; // Dacă formatul adresei poștale primite nu corespunde unei expresii regulate dacă (! Preg_match ($ reg_email, $ email)) (// salvăm un mesaj de eroare în sesiune. $ _Session ["error_mesages"]. \u003d "

Ați introdus un e-mail neplătit

"; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); ) // verificarea dacă există deja o astfel de adresă în baza de date. $ Rezultat_Query \u003d $ mysqli-\u003e query ("selectați" e-mail "de la" utilizatorii "în cazul în care" email` \u003d "" $ email. "" ") / În cazul în care numărul de rânduri primite unitate, ceea ce înseamnă că utilizatorul cu o astfel de adresă poștală este deja înregistrat dacă ($ rezultatul_query-\u003e Num_rows \u003d\u003d 1) (// dacă rezultatul rezultat nu este egal cu fals dacă (($ rând \u003d $ rezultat_Query-\u003e Fetch_ASSOC ())! \u003d FALSE) (// Salvăm un mesaj de eroare în sesiune. $ _session ["Error_Messages"]. \u003d "

Utilizatorul cu o astfel de adresă poștală este deja înregistrat

"// returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_register.php ");) altfel (// salvăm o eroare mesaj în sesiune. $ _Session ["Error_Messages"]. \u003d "

Eroare în cererea bazei de date

"; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_register.php ");) / * Ștergerea eșantionului * / $ rezultat_Query -\u003e închide (); // opriți scriptul de ieșire ();) / * închiderea probei * / $ rezultat_Query-\u003e Închide ();

Și așa am terminat cu toate verificările, este timpul să adăugăm un utilizator în baza de date. În locul specificat " // (4) loc pentru codul de adăugare a unui utilizator în baza de date"Adăugați următorul cod:

// solicitarea de a adăuga un utilizator în baza de date $ rezultat_query_insert \u003d $ mysqli-\u003e query ("inserați în" (inserați în primul, Last_name, Email, parolă) Valori ("$ First_Name", "" $ Last_Name. "" "" $ E-mail. "", "" $ Parola. "") "); Dacă (! $ Rezultate_query_insert) (// salvați un mesaj de eroare în sesiune. $ _Session ["error_mesages"]. \u003d "

Cerere de eroare pentru adăugarea utilizatorului în baza de date

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); ) Altceva ($ _session ["succes_mesages"] \u003d "

Înregistrarea a fost finalizată cu succes!
Acum vă puteți conecta utilizând datele de conectare și parola.

"; // trimite un utilizator la pagina de autorizare a antetului (http / 1.1 301 mutat permanent"); antet ("locație:". $ adresa_site. "/ form_auth.php");) / * finalizarea cererii * / $ rezultat_query_insert-\u003e Închide (); // Închideți conexiunea la baza de date $ Mysqli-\u003e Închide ();

Dacă a apărut o eroare la solicitarea de a adăuga un utilizator în baza de date, adăugăm un mesaj despre această eroare în sesiune și returnați utilizatorul la pagina de înregistrare.

În caz contrar, dacă totul a mers bine, în sesiune, adăugăm și un mesaj, dar este deja mai plăcut, și anume vorbim utilizatorul că înregistrarea a trecut cu succes. Și redirecționați-o deja spre pagină cu forma de autorizare.

Scriptul pentru verificarea formatului adresei poștale și lungimea parolei este în fișier header.php., deci va acționa pe câmpurile din această formă.

Sesiunea de lansare are loc, de asemenea, în dosar header.php.Deci, în dosar form_auth.php. Nu este nevoie să conduceți sesiunea, pentru că avem o greșeală.


Așa cum am spus, scenariul pentru verificarea formatului adresei poștale și lungimea parolei aici acționează. Prin urmare, dacă utilizatorul introduce adresa de corespondență greșită sau o parolă scurtă, primește imediat un mesaj de eroare. Și butonul a intra Nu va fi activă.

După eliminarea butonului de eroare a intra Ea devine activă, iar utilizatorul va putea trimite formularul serverului unde va fi procesat.

Autorizarea utilizatorului

În valoarea atributului acțiune. Forma de autorizare este specificată fișier auth.php.Aceasta înseamnă că forma va fi procesată în acest fișier.

Și așa, deschideți fișierul auth.php. Și scrie codul pentru procesarea unui formular de autorizare. Primul lucru pe care trebuie să-l faceți este să executați sesiunea și să conectați fișierul dbconnect.php. Pentru a vă conecta la baza de date.

// Declarați o celulă pentru a adăuga erori care pot apărea în timpul procesării formularului. $ _Sesion ["error_mesages"] \u003d ""; // declară o celulă pentru a adăuga mesaje de succes $ _session ["succes_mesages"] \u003d "";

/ * Verificăm dacă formularul a fost trimis, adică, este apăsat un buton pentru a intra. Dacă da, atunci mergem mai departe dacă nu, atunci veți retrage utilizatorul un mesaj despre eroare, că a venit direct la această pagină. * / IF (ISSET ($ _ Postare ["btn_submit_auth]) && goale ($ _ Post [" btn_submit_auth "]) (// (1) loc pentru următoarea bucată de cod) altceva (ieșire ("

Eroare! Ați vizitat direct această pagină, deci nu există date pentru procesare. Puteți merge la pagina principală.

"); }

// Verificați CAPTCHA recepționat dacă (ISSET ($ _ Postare ["CAPTCHA"]) (// tăiați spațiile de la început și de la sfârșitul $ CAPTCHA \u003d String Trim ($ _ Post ["CAPTCHA"] ; dacă (! goală ($ captcha)) (// comparați valoarea cu valoarea din sesiune. Dacă ($ _ sesiune ["rand"]! \u003d $ captcha) && ($ _session ["rand"]! \u003d "")) (// În cazul în care CAPTCHA nu este adevărat, întoarcem utilizatorul la pagina de autorizare și va da un mesaj despre eroarea pe care a introdus-o în mod greșit. $ Error_message \u003d "

Eroare! Ai intrat în limitele greșite

"; // salvăm un mesaj de eroare în sesiune. $ _Session [" error_mesages "] \u003d $ error_message; // returnați utilizatorul la pagina de autorizare a antetului (" http / 1.1 301 mutat permanent "); antet (" Locație: "$ Adresa_site." / Form_auth.php "); // începe scriptul de ieșire ();)) altceva ($ erry_message \u003d"

Eroare! Câmpul de acoperire nu trebuie să fie gol.

"; // salvăm un mesaj de eroare în sesiune. $ _Session [" error_mesages "] \u003d $ error_message; // returnați utilizatorul la pagina de autorizare a antetului (" http / 1.1 301 mutat permanent "); antet (" Locație: "$ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire ();) // (2) Locul de procesare a adresei poștale // (3) Spațiul de procesare a parolei // (4) loc pentru a compila A Cerere către baza de date) altceva (// dacă captcha nu este transmisă pentru a ieși ("

Eroare! Nu există cod de verificare, adică codul Cappitch. Puteți merge la pagina principală.

"); }

Dacă utilizatorul a intrat corect codul de verificare, atunci mergem mai departe, altfel îl întoarcem la pagina de autorizare.

Verificarea adresei postale.

// tăiați spațiile de la început și de la sfârșitul e-mailului $ \u003d Trim ($ _ Post ["Email"]); Dacă (ISSET ($ _ Postare ["Email"])) (dacă (email gol (email)) ($ email \u003d htmlspecialchars ($ email, ent_quotes); // verificați formatul adresei poștale primite utilizând o expresie regulată $ reg_email \u003d "/ ^ ** @ (+ (* +)).) ++ / i"; // Dacă formatul adresei poștale recepționate nu se potrivește cu expresia regulată (! preg_match ($ reg_email, $ email ) (// salvăm mesajul de eroare de sesiune. $ _Session ["error_mesages"]. \u003d "

Ai intrat în e-mail greșit

"; // returnați un utilizator la pagina de autorizare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

Câmpul adresei de e-mail (e-mail) nu trebuie să fie gol.

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: "$ adresa_site." / Form_register.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

Nu există niciun câmp pentru introducerea e-mailului

"; // returnați un utilizator la pagina de autorizare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); ) // (3) Spațiul de procesare a parolei

Dacă utilizatorul a introdus adresa de corespondență în formatul greșit sau valoarea câmpului adresei de e-mail este gol, apoi îl reamintim la pagina de autorizare unde îl aducem un mesaj despre el.

Verificarea parolei.

Următorul câmp de procesare este un câmp de parolă. În locația specificată " // (3) loc pentru procesarea parolei", Noi scriem:

Dacă (ISSET ($ _ Post ["Parolă"])) (// tăiați spațiile de la început și de la sfârșitul parolei $ \u003d Trim ($ _ Postează ["Parolă"]); Dacă (! Goală ($ parola)) ($ parola \u003d htmlspecialchars ($ parola, entiquotes); // enciprează parola $ parola \u003d md5 ($ parolă "); altceva (// salvați un mesaj de eroare în sesiune. $ _session [" error_messages "]. \u003d"

Specificați parola

"; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); )) Altceva (// salvăm un mesaj de eroare în sesiune. $ _Session ["Error_Messages"]. \u003d "

Lipsește câmpul de introducere a parolei

"; // returnați un utilizator la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); )

Aici folosim funcția MD5 () pentru a cripta parola recepționată, deoarece în parolele bazei de date suntem în forma criptată. Cuvântul secret suplimentar în criptare, în cazul nostru " top_secret."Trebuie să fie utilizat și atunci când înregistrați un utilizator.

Acum este necesar să se efectueze o cerere la baza de date la o probă de utilizator a cărei adresă de e-mail este egală cu adresa poștală primită și parola este egală cu parola recepționată.

// Cerere în baza de date la eșantionul de utilizator. $ rezultate_query_select \u003d $ mysqli-\u003e interogare ("Selectați * de la" Utilizatori "în cazul în care e-mail \u003d" "$ e-mail." "și parola \u003d" "$ parola." ""); Dacă (! $ Rezultate_query_select) (// salvăm un mesaj de eroare la sesiune. $ _Session ["error_mesages"]. \u003d "

Solicitați eroarea la eșantionul de utilizator din baza de date

"; // returnați utilizatorul la pagina de înregistrare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); ) Altfel (// Verificați dacă nu există niciun utilizator cu astfel de date în baza de date, apoi afișați un mesaj de eroare ($ rezultat_Query_Select-\u003e Num_rows \u003d\u003d 1) (// dacă datele introduse coincide cu datele din baza de date Salvăm autentificarea și parola la matricea de sesiuni. $ _session ["email"] \u003d $ email; $ _session ["parola"] \u003d $ parola; // returnați un utilizator la pagina de pornire a antetului ("http / 1.1 301 Mutat permanent "); antet (" locație: "$ adresa_site." / Index.php ");) altceva (// salvați un mesaj de eroare la sesiune. $ _Session [" error_mesages "]. \u003d"

Numele de utilizator și / sau parola incorectă

"; // returnați un utilizator la pagina de autorizare a antetului (" http / 1.1 301 mutat permanent "); antet (" locație: ". $ Adresa_site." / Form_auth.php "); // porniți scriptul de ieșire (); ))

Ieșiți de la site.

Și ultimul lucru pe care îl realizăm este procedura de ieșire de pe site. În prezent, în antetul oferim legături către pagina de autorizare și pe pagina de înregistrare.

În capacul site-ului (fișier header.php.), Utilizând sesiunea, verificăm dacă utilizatorul este deja autorizat. Dacă nu, afișăm legături și linkuri de autorizare, altfel (dacă este autorizată), în loc de legăturile de înregistrare și autorizare, afișăm un link Ieșire.

Piesa de cod modificată din fișier header.php.:

verifica

Ieșire

Când faceți clic pe linkul de ieșire de pe site, intrăm în fișier logout.php.unde distrugeți pur și simplu celulele cu adresa poștală și parola din sesiune. După aceea, returnați utilizatorul înapoi la pagina pe care a fost apăsată linkul ieșire.

Codul fișierului. logout.php:

Asta e tot. Acum știi cum implementarea și formularele de înregistrare și autorizare Utilizator pe site-ul dvs. Aceste formulare se găsesc aproape pe fiecare site, astfel încât fiecare programator ar trebui să știe cum să le creeze.

De asemenea, am învățat să verificăm datele introduse de pe partea clientului (în browser, folosind JavaScript, jQuery) și pe partea serverului (utilizând limba PHP). De asemenea, am aflat implementați procedura de ieșire de pe site.

Toate scripturile sunt verificate și lucrătorii. Puteți descărca arhiva cu fișierele acestui site mic pe acest link.

În viitor, voi scrie un articol în care voi descrie. Și am de asemenea planific să scriu un articol în care voi explica (fără a reporni pagina). Deci, pentru a fi conștienți de eliberarea articolelor noi, vă puteți abona la site-ul meu.

Dacă aveți întrebări, vă rugăm să contactați, de asemenea, dacă ați observat o anumită eroare în articolul pe care vă întreb, spuneți-mi despre asta.

Planul de lecție (partea 5):

  1. Creați o structură HTML pentru formularul de autorizare
  2. Prelucrarea datelor obținute
  3. Spuneți salutul utilizatorului în antetul site-ului

Ți-a plăcut articolul?