Cum se construiește un sistem de conectare completă

În acest tutorial vă voi arăta cum să faceți un sistem simplu de conectare, care constă dintr-o pagină de conectare, o pagină de înregistrare, o pagină de parolă uitată, o activare a e-mailului, o pagină de logout și, în final, o pagină de utilizatori online. Am făcut acest tutorial pentru a viza, în principal, dezvoltatorii noi pentru PHP, datorită faptului că, la început, am observat lipsa cantității de sisteme de conectare de bază. Prin urmare, am decis să fac unul singur oferind sfaturi de înaltă calitate cu privire la modul de a vă face primul sistem de autentificare cu un script de utilizatori on-line!


1. Efectuarea unei foi de bază de bază

Vom crea o foaie de stil CSS foarte simplă doar pentru a adăuga un pic de design și aranja modul în care arată acest sistem de autentificare. Deci, începeți cu deschideți editorul de text și putem începe să realizăm foaia de stil.

corp font-family: arial; font-size: 10pt;  tabel font-size: 10pt; marja: 0 auto;  #border border: 2px solid # 999; fundal: #CCC; padding: 15px; marja: 0 auto; lățime: 300px; 

Salvați acest fișier ca style.css astfel încât să putem lega la ea ori de câte ori avem nevoie. Acolo avem stilul nostru simplu de stil! Acum putem începe să facem paginile fără să ne îngrijorăm prea mult de a le face să pară relativ bune.



2. Crearea paginii de conectare

Bine, deci avem o foaie de stil definită, acum este momentul să scoatem lucrurile pe paginile noastre. Deschideți un fișier nou în editorul dvs. de text, acesta va fi al nostru login.php pagină!

  
Nume de utilizator:
Parola:
Înregistrare | A uitat pasul

Bine, asta e ceea ce login.php fișierul va arăta ca înainte de a ne face PHP să facă formularul de autentificare să funcționeze corect. În momentul de față veți observa că nu funcționează. Acest lucru se datorează faptului că nu am spus paginii ce să facă dacă formularul este trimis.

Planificare

Acum, hai să facem niște planificări înainte să ne aruncăm în PHP. Trebuie să ne întrebăm "Care este pagina care va verifica când se va trimite formularul?". Pentru pagina de conectare aici este o listă a ceea ce vom verifica -

  • Că ambele cutii de nume de utilizator și parolă au fost completate
  • Că numele de utilizator furnizat există în baza noastră de date
  • Că dacă numele de utilizator există în baza noastră de date, parola se potrivește cu cea pentru numele de utilizator
  • În cele din urmă, utilizatorul și-a activat contul

Dacă PHP poate da răspuns la toate cele patru puncte, atunci conectați-l. Acum, în aceste patru puncte, veți observa că există o bază de date menționată. Vom folosi o bază de date MySQL pentru a stoca toate informațiile despre fiecare dintre utilizatorii noștri. Deci, înainte de a începe PHP, trebuie să facem această bază de date. În acest moment este nevoie de o planificare mai mult. Trebuie să decidem ce informații trebuie să stocăm despre utilizatori, ce tipuri de date stocăm, avem nevoie de o valoare implicită etc. Aici este planul meu de mai jos -

  • Trebuie să stocăm un nume de utilizator pentru utilizatorul care va fi un varchar
  • Avem nevoie de o parolă la care să fie și un varchar
  • Vom avea nevoie de un e-mail pentru funcția noastră de activare prin e-mail, aceasta poate fi și varchar
  • Un câmp spune dacă contul a fost activat sau nu, acesta va fi un număr întreg
  • Un câmp care oferă informații despre faptul că utilizatorul este online sau nu, acesta va fi un număr întreg
  • În cele din urmă, un câmp care ne dă un timp utilizatorului înregistrat, acesta este, de asemenea, un număr întreg

Construirea bazei de date

Acum putem vedea cum să construim masa noastră în baza noastră de date. Mai întâi creați o bază de date numită loginTut. Apoi, în această bază de date dorim să executăm SQL-ul pe care l-am furnizat mai jos -

Notă: Toate tabelele conțin o cheie primară. Acesta este un identificator unic pentru fiecare rând din tabel!

CREATE TABLE DACA NU EXISTĂ "utilizatori" ('id' int (11) NOT NULL auto_increment, 'username' varchar (32) NOT NULL, '0', 'rtime' int (20) NOT NULL implicit '0', PRIMARY KEY ('id')) MOTOR = MyISAM DEFAULT CHARSET = utf8;

Acum avem un tabel pentru a stoca toate informațiile de care avem nevoie despre utilizatorii noștri, să adăugăm un utilizator în scopuri de testare. Pentru aceasta, executați SQL-ul furnizat mai jos -

INSERT IN 'utilizatori' ('id', 'username', 'parola', 'online', 'email', 'activ', 'rtime') VALUES (1, @ noemail.co.uk ', 0, 0);

Deci avem acum un utilizator cu numele de utilizator testarea, parola testarea și e-mail [email protected]. Acum putem să ajungem la PHP și să facem munca de formular de autentificare!

Adăugarea PHP

În primul rând trebuie să ne gândim mai întâi la securitate și cât de sigur va fi acest formular de autentificare. Pentru a ajuta la prevenirea injectării SQL, care este o formă foarte comună de hacking de baze de date, vom face o funcție care va proteja toate șirurile stocate în baza de date. Acest lucru vom pune într-un fișier extern numit functions.php. Iată sursa -

 

Această funcție va tăia șirul (șterge orice spațiu alb la începutul sau sfîrșitul șirului), va eticheta cu benzi (va elimina toate etichetele html și PHP din șir) și apoi va adăuga slash-uri la șirul de caractere (') și ghilimele (").

Înapoi la login.php

Acum avem un loc pentru a stoca și a verifica informații de la utilizator, o funcție de a proteja șiruri de caractere fiind transmise la baza de date și un aspect frumos aspect pentru pagina noastră de conectare! Mai jos puteți vedea codul comentat pentru site-ul nostru login.php fișier cu nou adăugat PHP-

  Trebuie să completați a Nume de utilizator și a Parola!"altceva // dacă verificarea continuă / selectați toate rândurile din tabel unde numele de utilizator se potrivește cu cel introdus de utilizator $ res = mysql_query (" SELECT * FROM 'users' WHERE 'username' = '". $ num = mysql_num_rows ($ res); // verificați dacă nu a existat o potrivire dacă ($ num == 0) // dacă nu apare un mesaj de eroare echo "
Nume de utilizator pe care le furnizați nu există!
"altceva // dacă a existat o potrivire a continuării verificării // selectați toate rândurile în care numele de utilizator și parola se potrivesc cu cele trimise de utilizator $ res = mysql_query (" SELECT * FROM 'users' WHERE 'username' = ' $ num = mysql_num_rows ($ res); // verificați dacă nu a existat o potrivire dacă ($ num == 0) / / dacă nu afișați mesajul de eroare ecou "
Parola pe care ați furnizat-o nu se potrivește cu cea pentru numele de utilizator respectiv!
"; altceva // dacă a continuat verificarea // divizați toate câmpurile pentru rândul corect într-o matrice asociativă $ row = mysql_fetch_assoc ($ res); // verificați dacă utilizatorul nu și-a activat încă contul dacă ( $ row ['active']! = 1) // dacă nu apare mesajul de eroare echo "
Încă nu ai făcut-o activat contul tău!
"; altfel // dacă le-au logat // setați sesiunea de conectare stocând id-ul - folosim acest lucru pentru a vedea dacă sunt logați sau nu $ _SESSION ['uid'] = $ row ['id'] ; // afișează mesajul ecou "
V-ați conectat cu succes!
"; // actualizați câmpul online la 50 de secunde în viitor $ time = date ('U') + 50; mysql_query (" UPDATE "utilizatori SET 'online' = ' => "". $ _ SESSION ['uid']. ''); // redirecționați-le către antetul paginii usersonline ('Location: usersOnline.php');?
Nume de utilizator:
Parola:
Înregistrare | A uitat pasul

Cele mai multe dintre acestea se explică prin comentarea, dar o parte pe care nu am explicat-o este domeniul online. Când vă conectați cu succes, am actualizat câmpul online la 50 de secunde înainte de acum. Funcția dată ('U') ne dă o sumă de secunde de la 1 ianuarie 1970 00:00:00 GMT (epocii Unix). Aceasta înseamnă că data ("U") nu va fi niciodată mai mică, valoarea va crește întotdeauna. Dacă setăm câmpul online la 50 de secunde înaintea acum, atunci când Utilizatori online pagina este încărcată putem verifica pentru a găsi toți utilizatorii în cazul în care valoarea online este mai mare decât momentul în care pagina este încărcată, dacă este cazul, apoi afișați fiecare dintre numele lor.

Acum nu ezitați să vă testați pagina de conectare. Asigurați-vă că toate verificările sunt efectuate corect și că odată ce ați fost conectat (ă) cu succes, veți fi redirecționat (ă) către pagina online non-existentă a utilizatorilor. De asemenea, puteți să verificați dacă a actualizat cu succes domeniul online, verificând tabelul utilizatorilor!



3. Crearea paginii de înregistrare

Ce bun este o pagină de conectare fără o pagină de înregistrare? Nu prea mult, deci cred că acesta va fi următorul pas pentru noi. Crearea paginii de înregistrare va fi foarte asemănătoare cu crearea paginii noastre de conectare. Trebuie să facem o verificare de bază pentru a vedea dacă numele de utilizator dorit este deja luat, dar nu se întâmplă nimic nou acolo. Mai jos puteți vedea codul paginii de înregistrare comentate -

  Trebuie să completați toate fișierele necesare! "; Altceva // dacă au fost completate verificați continuu // Verificați dacă numele de utilizator dorit este mai mare de 32 sau mai puțin de 3 caractere lungime dacă (strlen ($ username)> 32 || strlen ($ username) < 3) //if it is display error message echo "
Ta Nume de utilizator trebuie să aibă între 3 și 32 de caractere!
"; altceva // dacă nu continuați verificarea // selectați toate rândurile din tabelul utilizatorilor în cazul în care numele de utilizator postat se potrivește cu numele de utilizator stocat $ res = mysql_query (" SELECT * FROM "utilizatorii WHERE 'username' = ' nume $ "= $ num = mysql_num_rows ($ res); // a verifica dacă există o potrivire dacă ($ num == 1) // dacă da numele de utilizator este luat astfel încât mesajul de eroare să fie afișat echo"
Nume de utilizator pe care ați ales-o deja!
"; altceva // continuați verificarea // verificați dacă parola este mai mică de 5 sau mai mare de 32 de caractere dacă (strlen ($ password) < 5 || strlen($password) > 32) // dacă este mesaj de eroare de afișare echo "
Ta Parola trebuie să aibă între 5 și 32 de caractere!
"; altceva // continua verificarea // verifica daca parola si confirmarea parolei se potrivesc daca ($ password! = $ passconf) // daca nu apare mesajul de eroare echo"
Parola pe care ați furnizat-o nu corespundea parolei de confirmare!
"; altceva // Continuați verificarea // Setați formatul pe care dorim să-l verificăm pe adresa de e-mail împotriva $ checkemail =" /^[a-z0-9]+([_\\.-][a-z0- 9] +) * (([a-z0-9] + ([-] [a-z0-9] +) *) + \\ [az] 2, verificați dacă formatele se potrivesc dacă (! preg_match ($ checkemail, $ email)) // dacă nu apare mesajul de eroare echo "
E-mail nu este validă, trebuie să fie [email protected]!
"; altfel // dacă o fac, continuați verificarea // selectați toate rândurile din tabelul utilizatorilor în care e-mailurile se potrivesc cu $ res1 = mysql_query (" SELECT * FROM 'users' WHERE 'email' = '$ $ email. $ num1 = mysql_num_rows ($ res1); // dacă numărul de potriviri este 1 dacă ($ num1 == 1) // adresa de e-mail furnizată este luată astfel încât să se afișeze mesajul de eroare echo "
E-mail adresa pe care ați furnizat-o este deja luată
"else // în cele din urmă, înregistrați acolo contul // timpul de înregistrare (unix) $ registerTime = date ('U'); // a face un cod pentru cheia de activare $ code = md5 ($ username). ("username", "parola", "email", "rtime") VALUES (". $ username", " "") "; // trimiteți e-mailul cu un e-mail care conține legătura de activare la adresa de e-mail furnizată ($ email). , $ INFO ['chatName'], 'confirmare de înregistrare', 'Vă mulțumim că ne-ați înregistrat'. $ Username. ', \ N \ nAcesta este link-ul de activare. browser address bar. \ n \ nhttp: //www.yourwebsitehere.co.uk/activate.php? code = ". $ code, 'From: [email protected]'); // afișați mesajul de succes ecou "
Ați înregistrat cu succes, vă rugăm să vă accesați căsuța poștală pentru a vă activa contul!
";?>
Nume de utilizator:
Parola:
Confirma parola:
E-mail:
Conectare | A uitat pasul

Funcții noi

Acest fișier conține câteva lucruri noi pe care probabil că nu le cunoașteți, prin urmare voi trece peste tot. În primul rând, funcția strlen (), aceasta returnează numărul de caractere dintr-un șir, permițându-ne să verificăm cât de mult sunt șiruri de caractere. Apoi, funcția preg_match () verifică dacă formatarea unui șir corespunde formatării pe care o specificați (în acest caz fiind un format de e-mail). În cele din urmă, funcția mail (), acesta trimite un e-mail de la server către orice e-mail la alegere, conținând orice doriți. Ar trebui să salvați acest fișier ca register.php

Acum vă puteți testa pagina de înregistrare, puteți vedea când introduceți adresa de e-mail corectă veți primi un e-mail cu un link de activare conținut în interiorul. De asemenea, puteți vedea că un rând care conține datele completate în formular este introdus în tabelul utilizatorilor. Valoarea activă este 0 arătând că acest cont nu a fost încă activat!



4. Activați pagina Contului

Aceasta este doar o pagină mică, cu un cod foarte mic necesar, dar este încă foarte important și joacă un rol imens într-un sistem de autentificare securizat. Sursa pentru această pagină este prezentată mai jos - activate.php

  Din păcate, a existat o eroare acolo! "; Altceva // alt înțelept continuați verificarea // selectați toate rândurile unde conturile nu sunt active $ res = mysql_query (" SELECT * FROM "utilizatori" WHERE 'active' = '0 '); / / buclă prin acest script pentru fiecare rând găsit nu este activ în timp ce ($ row = mysql_fetch_assoc ($ res)) // verificați dacă codul din rândul din baza de date se potrivește cu cel de la utilizator dacă ($ code = $ md5 ($ row ['username']) $ row ['rtime']) // daca activa apoi contul si afiseaza mesajul de succes $ res1 = mysql_query ("UPDATE" '1' unde 'id' = ''. $ Row ['id'] "
Ați activat contul dvs. cu succes!
";?>

Există două lucruri noi în acest fișier, vom folosi metoda GET în loc de POST și, de asemenea, vom folosi o buclă while (). Metoda get obține pur și simplu date de la bara de adrese din partea de sus a browserului utilizatorului (în acest caz codul trimis împreună cu adresa de e-mail la adresa lor de e-mail). Buclele while () se perfectează pentru verificarea prin mai multe rânduri de date selectate din baza de date (în acest caz, pentru a vedea dacă există o potrivire cu codurile).

Prezentare generală atât de departe

Până acum, ar fi trebuit să învățați multe lucruri noi dacă noul dvs. în PHP și ați creat cu succes o jumătate de sistem de conectare. Paginile completate până acum sunt -

  • style.css
  • functions.php
  • login.php
  • register.php
  • activate.php

Unele funcții utile utilizate până acum sunt -

  • mysql_connect () - Conectați-vă la o bază de date MySQL
  • mysql_select_db () - Selectați baza de date cu care ar trebui să lucrăm
  • mysql_query () - Trimiteți interogări în baza de date pentru a obține, insera sau edita date
  • trim () - Tăiați spațiul alb nedorit de la începutul și sfârșitul unui șir
  • strip_tags () - Eliminați etichetele html și PHP dintr-un șir
  • addslashes () - Adăugați slash-uri la șirul s, permițând utilizarea în siguranță a citatelor și mărcilor de vorbire
  • strlen () - Obțineți numărul de caractere dintr-un șir
  • preg_match () - Preg meciul trebuie să se potrivească formatării unui șir
  • mail () - Trimiteți e-mailuri de la server la adresa de e-mail specificată
  • md5 () - Aceasta calculează hash-ul md5 al unui șir


5. Ați uitat parola?

Următoarea este pagina de parolă uitată. Dacă utilizatorul uită parola, le putem trimite prin e-mail acum, știm că au dat o adresă de e-mail reală din cauza activării. Așadar, fără alte cuvinte, este codul comentat forgot.php -

  Trebuie să completați dvs. E-mail adresa! "; altceva // continuați verificarea // setați formatul pentru a verifica e-mailul împotriva $ checkemail =" /^[-z0-9]+([_\\.-][a-z0-9 ] +) * @ ([a-z0-9] + ([\ -] [a-z0-9] +) *) + \\ [az] 2, dacă e-mailul nu se potrivește cu formatul dorit dacă (! preg_match ($ checkemail, $ email)) // dacă nu atunci afișați mesajul de eroare echo "
E-mail nu este validă, trebuie să fie [email protected]!
"altceva // continuați să verificați // selectați toate rândurile din baza de date în care e-mailurile se potrivesc cu $ res = mysql_query (" SELECT * FROM 'users' WHERE 'email' = '$. $ num = mysql_num_rows ($ res); // verifica daca numarul de randuri potrivite este egal cu 0 daca ($ num == 0) // daca este mesaj de eroare echo "
E-mail pe care ați furnizat-o nu există în baza noastră de date!
"altfel // altfel completat uitat funcția pass // divizați rândul într-o matrice asociativă $ row = mysql_fetch_assoc ($ res); // trimiteți e-mail care conține parola lor la adresa lor de e-mail mail ($ email, 'Password Forgotten' , "Aici este parola ta:" $ row ['password']. "\ N \ nTrebuie sa nu pierdeti din nou!", 'From: [email protected]'); "
A fost trimis și un e-mail cu adresa dvs. de e-mail care conținea parola!
";?>
E-mail:
Înregistrare | Logare

Această pagină constă în nimic nou, prin urmare, voi petrece mai puțin timp în căutarea peste ea. Un lucru pe care vreau să-l menționez este că dacă nu ați observat pentru că am inclus fișierul nostru css în fiecare pagină, aspectul pe care îl folosim pentru fiecare pagină rămâne foarte asemănător păstrând un design inteligent frumos pe tot parcursul site-ului.

Următoarea și ultima pagină pe care o vom face în acest tutorial va fi ușor diferită. Această pagină are controlul pentru a vedea dacă utilizatorul este conectat sau nu și în acest caz afișează toți utilizatorii online la acel moment (sau pentru a fi exact în ultimele 50 de secunde).



6. Pagina utilizatorilor online

Bine, așa că am făcut-o secțiunii site-ului pe care trebuie să vă autentificați pentru a le vizualiza. După cum am menționat mai devreme, acesta va fi ușor diferit față de ceilalți, datorită faptului că trebuie să verificăm dacă utilizatorul este conectat sau nu. Dacă nu sunt conectați și încercați să vizualizați pagina, avem câteva opțiuni pe care le putem face. Primul fiind faptul că putem afișa un mesaj de eroare spunând ceva de-a lungul liniilor "Trebuie să fii autentificat pentru a vedea această pagină!" Sau le putem redirecționa înapoi la pagina de conectare. Pentru acest tutorial cred că voi folosi metoda mesajului de eroare.

Deci, aici este usersOnline.php pagina sursei -

  Trebuie să fiți conectat (ă) pentru a utiliza această caracteristică! "; Altfel // continuați în continuare pagina // acesta este un script de actualizare care ar trebui să fie folosit în fiecare pagină pentru a actualiza utilizatorii online ora $ time = date (' ) +50; $ update = mysql_query ("UPDATE" utilizatori SET 'online' = ''. $ Time. '' WHERE 'id' 
Utilizatori online: ($ res = mysql_fetch_assoc ($ res)) // echo fiecare nume de utilizator gasit a fi online cu o bord pentru a le imparti echo $ [ 'username'] rândul.“ - ";?>
Deconectare

După cum am menționat, puteți vedea că această pagină este ușor diferită. Nu numai că ne asigurăm că sunt conectați, dar actualizăm timpul online păstrând câmpul online înainte de ora curentă. De fiecare dată când o pagină este încărcată cu acest script, se va actualiza pentru a le pune online. Acum avem o pagină finală de făcut și apoi am terminat. Odată ce un utilizator sa conectat, trebuie să se poată deconecta!



Logout.php

Aceasta trebuie să fie considerată cea mai ușoară pagină de făcut, ceea ce sunt sigur că majoritatea dintre dvs. sunteți bucuroși să auzim. Acum este codul comentat pentru logout.php fişier -

  Trebuie să fiți conectat (ă) pentru a vă deconecta! "; Altceva // dacă continuă să verificați // update pentru a seta acest câmp utilizator online la momentul actual mysql_query (" UPDATE "utilizatori SET 'online' = '". "/" distruge toate sesiunile care anulează sesiunea de conectare session_destroy (); // afișează succesul mesajului ecou "(" U ")" 'WHERE' id '
Te-ai deconectat cu succes!
";>>

Cred că comentariile din acest dosar o explică suficient și cred că cunoștințele dvs. PHP ar trebui să fie mult mai mari și ar trebui să înțelegeți mai mult acum.

Cod