Î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!
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.
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ă!
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.
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 -
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 -
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!
Î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 (").
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');?
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!
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! ";?>
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!
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).
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 -
Unele funcții utile utilizate până acum sunt -
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! ";?>
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).
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!
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.