Ați creat vreodată un cont la un site web și vi sa solicitat să verificați adresa dvs. de e-mail și să faceți clic pe un link de verificare trimis de companie pentru ao activa? Acest lucru reduce foarte mult numărul conturilor de spam. În această lecție, vom învăța cum să facem acest lucru!
Acest tutorial te învață să construiești un script de verificare prin e-mail de la zero, dar dacă vrei ceva pe care îl poți folosi imediat pe site-ul tău, verifică e-mailul Verify pe Envato Market.
Email Verify este un script PHP care vă permite să verificați adresele de e-mail fără a memora nimic în orice bază de date. Acesta va trimite utilizatorilor un e-mail care le cere să facă clic pe un link pentru a verifica e-mailurile lor înainte ca e-mailul lor să fie adăugat la tot ceea ce doriți să îl adăugați.
E-mail Verificați pe Envato MarketVom construi un script frumos de înscriere PHP în care un utilizator poate crea un cont pentru a avea acces la o "secțiune a membrilor" a unui site web.
După ce utilizatorul își creează contul, contul va fi blocat până când utilizatorul dă clic pe un link de verificare pe care îl va primi în inboxul său de e-mail.
Mai întâi avem nevoie de o pagină simplă în care vizitatorii noștri să-și poată înscrie conturile; deci este primul lucru pe care îl vom construi.
Aș dori să vă reamintesc că acesta este un tutorial PHP și, în opinia mea, cred că trebuie să cunoașteți elementele de bază ale HTML înainte de a continua cu PHP. Voi adăuga comentarii la HTML & CSS pentru a descrie fiecare linie de cod.
index.php - Aceasta este pagina noastră de înscriere cu un formular de bază.
NETTUTS> Înscrie-te NETTUTS> Înscrie-te
Formular de înscriere
Introduceți numele dvs. și adresa de e-mail pentru a vă crea contul
css / style.css - Aceasta este o foaie de stil pentru index.php și alte pagini.
/ * Stiluri globale * / * padding: 0; / * Resetati toate padding-ul la 0 * / margin: 0; / * Resetați toate marjele la 0 * / corp background: # F9F9F9; / * Setați culoarea de fundal HTML * / font: 14px "Lucida Grande"; / * Setați dimensiunea fontului global și familia * / color: # 464646; / * Setați culoarea textului global * / p margin: 10px 0px 10px 0px; / * Adăugați unele materiale de umplutură în partea de sus și de jos aetichete * / / * Header * / #header height: 45px; / * Setarea înălțimii antetului * / background: # 464646; / * Setați culoarea fundalului antetului * / #header h3 culoare: # FFFFF3; / * Setarea titlului antetului (titlul din stânga sus) culoare * / padding: 10px; / * Setați umplutura, pentru ao centra în interiorul antetului * / font-weight: normal; / * Setați greutatea fontului la normal, implicit a fost setată îngroșată * / / * Wrap * / #wrap background: #FFFFFF; / * Setați fundalul de conținut în alb * / lățime: 615px; / * Setați lățimea zonei de conținut * / margine: 0 auto; / * Centrează conținutul nostru în browser-ul nostru * / margin-top: 50px; / * Marginea de sus pentru a face un spațiu între antet și conținutul * / padding: 10px; / * Padding pentru a face mai mult spatiu pentru textul nostru * / border: 1px solid #DFDFDF; / * Mărimea frontală mică pentru atingerea finală * / text-align: center; / * Centrează textul nostru de conținut * / #wrap h3 font: italic 22px Georgia; / * Setați fontul pentru titlul 2 care va fi afișat în câmpurile noastre wrap / / / * Stiluri de câmp Form & Input * / form margin-top: 10px; / * Faceți o distanță mai mare față de textul descrierii * / .submit_button background: # F9F9F9; / * Setare buton fundal * / margine: 1px solid #DFDFDF; / * Mărimea frontierei mici în jurul butonului nostru de trimitere * / padding: 8px; / * Adăugați mai mult spațiu în jurul textului butonului nostru * / introducere font: normal 16px Georgia; / * Setați fontul pentru câmpurile de intrare * / border: 1px solid #DFDFDF; / * Mărimea frontierei mici în jurul câmpului de intrare * / padding: 8px; / * Adăugați mai mult spațiu în jurul textului nostru * /
După cum puteți vedea, am adăugat un comentariu la fiecare rând care descrie ceea ce fac. De asemenea, este posibil să fi observat următorul comentariu în fișierul index.php:
Vom scrie PHP între aceste două linii!
Primul lucru pe care îl vom construi este o bucată de cod care va valida informațiile. Iată o scurtă listă care detaliază ce trebuie făcut.
Prin urmare, primul nostru pas este să verificăm dacă formularul este înaintat și că câmpurile nu sunt goale.
Timp pentru o defalcare! Începem cu o instrucțiune IF și validăm mai întâi câmpul cu numele:
if () // Dacă instrucțiunea este un adevărat cod de rulare între paranteze isset ($ _ POST ['name']) // Se afișează câmpul de nume; nu contează dacă este goală sau plină. && // Acesta este același lucru cu AND din declarația noastră; vă permite să verificați declarațiile multiple. ! $ _ POST ['name']) // Verificați dacă numele câmpului nu este gol isset ($ _ POST ['email']) // Se afișează câmpul de e-mail; nu contează dacă este goală sau plină. && // Acesta este același lucru cu AND din declarația noastră; vă permite să verificați declarațiile multiple. ! gol ($ _ POST ['email']) // Verificați dacă e-mailul de pe câmp nu este gol
Deci, dacă ați depune formularul acum cu câmpuri goale, nu se întâmplă nimic. Dacă completați ambele câmpuri, scriptul nostru va rula codul între paranteze.
Acum vom crea o bucată de cod care va verifica dacă o adresă e-mail este validă. Dacă nu este, vom întoarce o eroare. De asemenea, să transformăm variabilele noastre post în variabile locale:
($ _ POST ['name']) &&! empty ($ _ POST ['name']) nume = mysql_escape_string ($ _ POST ['nume']); // Transformați postarea într-o variabilă locală $ email = mysql_escape_string ($ _ POST ['email']); // Transformați postarea într-o variabilă locală
Acum putem ajunge la datele noastre prin intermediul variabilelor noastre locale. După cum puteți vedea, am adăugat, de asemenea, un șir de evadare MySQL pentru a preveni injectarea MySQL la introducerea datelor în baza de date MySQL.
"Funcția mysql_real_escape_string () scapă de caractere speciale într-un șir pentru a fi utilizat într-o instrucțiune SQL."
Următorul este un fragment mic care verifică dacă adresa de e-mail este validă.
$ nume = mysql_escape_string ($ _ POST ['nume']); $ email = mysql_escape_string ($ _ POST ['e-mail']); în cazul în care (eregi ( "^ [_-o Z0-9 -]! + (\ [_-o Z0-9 -]. +) * @ [a-Z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ email)) // Eroare de returnare - E-mail nevalid altceva // Return Success -
Rețineți că nu am scris personal această expresie regulată, este un fragment mic de la php.net.
Practic, acesta verifică dacă e-mailul este scris în următorul format:
[email protected]
Acum, în eregi, puteți vedea că verifică dacă e-mailul conține caractere din alfabet, dacă are numere sau o fantă fantomă (_) și, bineînțeles, cerințele de bază pentru un e-mail ("email") un punct)'.' Dacă nu se găsește niciunul dintre aceste caractere, expresia returnează "false". Bine, deci acum trebuie să adăugăm câteva mesaje de eroare de bază.
în cazul în care (eregi ( "^ [_-o Z0-9 -]! + (\ [_-o Z0-9 -]. +) * @ [a-Z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ email)) // Eroare returnează - E-mail nevalid $ msg = 'E-mailul pe care l-ați introdus este nevalid, încercați din nou.'; altceva // Return Success - Valid Email $ msg = 'Contul dvs. a fost efectuat,
verificați-l făcând clic pe link-ul de activare care a fost trimis la adresa dvs. de e-mail. ';
După cum puteți vedea că am făcut o variabilă locală "$ msg", acest lucru ne permite să afișăm eroarea sau mesajul de succes oriunde pe pagină.
Și o vom afișa între textul instrucțiunii și formular.
Formular de înscriere
Introduceți numele și adresa de e-mail pentru a vă crea contul
'$ Msg.'
Adăugați acest lucru la style.css, pentru a schimba un mesaj de stare.
#wrap .statusmsg font-size: 12px; / * Setați dimensiunea fontului mesajului * / padding: 3px; / * Câteva vopsea pentru a face mai mult spațiu pentru textul nostru * / background: #EDEDED; / * Adăugarea unei culori de fundal la mesajul nostru de stare * / border: 1px solid #DFDFDF; / * Adăugați o margine în jurul mesajului nostru de stare * /
Acum trebuie să stabilim o conexiune la baza de date și să creăm un tabel pentru a introduce datele contului. Deci, hai să mergem la PHPMyAdmin și să creăm o nouă bază de date cu numele înregistrări și să creați un cont de utilizator care are acces la acea bază de date pentru a introduce și actualiza date.
Să ne creăm utilizatori tabel, cu 5 câmpuri:
Deci, acum trebuie să introduceți detalii pentru aceste domenii:
Pentru cei care nu doresc să introducă manual aceste date, puteți executa următorul cod SQL.
CREATE TABLE "utilizatori" ('id' INT (10) NU NULL AUTO_INCREMENT PRIMARY KEY, 'username' VARCHAR (32) NOT NULL, 'password' VARCHAR (32) NU NULL, 'activ' INT (1) NOT NULL DEFAULT '0') MOTOR = MISAM;
Baza noastră de date este creată, acum trebuie să stabilim o conexiune folosind PHP. Vom scrie următorul cod la începutul scriptului nostru chiar sub următoarea linie:
Vom folosi următorul cod pentru a vă conecta la serverul de bază de date și selectați înregistrări Bază de date. (conexiune MySQL de bază)
mysql_connect ("localhost", "username", "password") sau muri (mysql_error ()); // Conectați-vă la serverul de bază de date (localhost) cu numele de utilizator și parola. mysql_select_db ("înregistrări") sau mor (mysql_error ()); // Selectați baza de date pentru înregistrări.Acum, că am stabilit o conexiune la baza noastră de date, putem trece la pasul următor și puteți introduce detaliile contului.
Pasul 4 - Introduceți cont
Acum este momentul să introduceți datele de cont trimise în baza noastră de date și să generați o hash de activare. Scrieți următorul cod sub această linie:
// Return Success - Valid Email $ msg = 'Contul tău a fost făcut,
verificați-l făcând clic pe link-ul de activare care a fost trimis la adresa dvs. de e-mail. ';Activarea hash
În baza noastră de date am făcut un câmp numit hash, acest hash este un șir de caractere de 32 de caractere. De asemenea, trimitem acest cod la adresa de e-mail a utilizatorului. Apoi pot face clic pe link-ul (care conține hash-ul) și vom verifica dacă se potrivește cu cel din baza de date. Să creăm o variabilă locală numită $ hash și să generăm un hash md5 aleator.
$ hash = md5 (rand (0,1000)); // Generați hash random cu 32 de caractere și alocați-l unei variabile locale. // Exemplu de ieșire: f4552671f8909587cf485ea990207f3bCe am facut? Ei bine, folosim funcția PHP "rand" pentru a genera un număr aleator între 0 și 1000. Apoi, funcția noastră MD5 va transforma acest număr într-un șir de 32 de caractere de text pe care îl vom folosi în e-mailul de activare. Alegerea mea este să folosesc MD5, deoarece generează un hash de 32 de caractere care este sigur și, în acest caz, imposibil de spart.
Crearea unei parole aleatoare
Următorul lucru de care avem nevoie este să creați o parolă aleatorie pentru membrul nostru:
$ password = rand (1000.5000); // Generați un număr aleator între 1000 și 5000 și îl atribuiți unei variabile locale. // Exemplu de ieșire: 4568Introduceți următoarele informații în baza noastră de date utilizând o interogare MySQL
mysql_query ("INSERT INTO utilizatorii (nume utilizator, parola, e-mail, hash) VALUES (" mysql_escape_string ($ name) ", mysql_escape_string (md5 $ password) ")," mysql_escape_string ($ hash). ") sau să mori (mysql_error ());După cum puteți vedea, vom introduce toate datele cu un șir de evacuare MySQL în jurul acestuia pentru a preveni orice injectare MySQL.
De asemenea, s-ar putea să observați că funcția MD5 modifică parola aleatoare într-un hash securizat pentru protecție. Exemplu: dacă o persoană "rea" câștigă acces la baza de date, nu poate citi parolele.Pentru testare, completați formularul și verificați dacă datele sunt introduse în baza noastră de date.
Pasul 5 - Trimiteți e-mailul de verificare
Imediat după ce am introdus informațiile în baza noastră de date, trebuie să trimitem un e-mail utilizatorului cu linkul de verificare. Deci, haideți să folosim funcția "mail" PHP pentru a face exact acest lucru.
$ to = $ email; // trimiteți un e-mail utilizatorului nostru $ subject = 'Signup | Verificare'; // Dați e-mailul un subiect $ message = 'Vă mulțumim pentru înscriere! Contul dvs. a fost creat, vă puteți conecta cu următoarele acreditări după ce ați activat contul dvs. prin apăsarea adresei URL de mai jos. ------------------------ Nume utilizator: '. $ Name'. Parola: '. $ Password'. ------------------------ Faceți clic pe acest link pentru a vă activa contul: http://www.yourwebsite.com/verify.php?email= ' $ email.'/ hash = '. $ hash. "; // Mesajul nostru de mai sus, inclusiv linkul $ headers =' De la: [email protected] '." \ r \ n "; // Setați de la header mail ($ la, $ subiect, $ mesaj, $ headers); / Trimiteți-ne e-mailul nostruAcum să frângem mesajul:
Vă mulțumim că v-ați înscris! Contul dvs. a fost creat, vă puteți conecta cu următoarele acreditări după ce ați activat contul dvs. prin apăsarea adresei URL de mai jos. ------------------------ Nume utilizator: '. $ Name'. Parola: '. $ Password'. ------------------------În codul de mai sus, trimitem o scurtă descriere utilizatorului care conține numele de utilizator și parola - folosind variabilele locale create atunci când datele au fost postate.
Dați clic pe acest link pentru a vă activa contul: http://www.yourwebsite.com/verify.php?email='.$email.'&hash='.$hash. 'În această secțiune a codului, am creat un link dinamic. Rezultatul va arata astfel:
După cum puteți vedea, acesta creează un URL solid, care este imposibil de ghicit. Aceasta este o modalitate foarte sigură de a verifica adresa de e-mail a unui utilizator.
Pasul 6 - Activarea contului
După cum puteți vedea, linkurile noastre url către verify.php așa că hai să creăm asta, folosind același șablon de bază pe care l-am folosit pentru index.php.
Cu toate acestea, eliminați formularul din șablon.NETTUTS> Înscrie-te NETTUTS> Înscrie-te
Primul lucru pe care trebuie să-l facem este să verificăm dacă avem variabilele $ _GET (email și hash)
dacă isset ($ _GET ['email']) &&! empty ($ _GET ['email']) / Verificați datele altceva // Abordare nevalidăPentru a face lucrurile un pic mai ușor, să alocăm variabilele noastre locale și să adăugăm o serie de prevenire a injectării MySQL, folosind încă o dată șirul de evacuare MySQL.
dacă isset ($ _GET ['email']) &&! empty ($ _GET ['email']) / Verificați datele $ email = mysql_escape_string ($ _GET ['email']); // Setați variabila de e-mail $ hash = mysql_escape_string ($ _GET ['hash']); // Setați variabila hashUrmătoarea este verificarea datelor din adresa URL împotriva datelor din baza noastră de date utilizând o interogare MySQL.
$ search = mysql_query ("SELECT e-mail, hash, activ din utilizatori WHERE. $ email" "AND AND $ $ hash") sau mor (mysql_error ()); $ match = mysql_num_rows ($ căutare);În codul de mai sus, am folosit o instrucțiune MySQL select și am verificat dacă e-mailul și hash-ul au fost potrivite. Dar, pe lângă aceasta, am verificat dacă statutul contului este "inactiv". În cele din urmă, folosim mysql_num_rows pentru a determina câte meciuri au fost găsite. Asa ca sa incercam asta. Pur și simplu utilizați un ecou simplu pentru a returna rezultatele.
$ search = mysql_query ("SELECT e-mail, hash, activ din utilizatori WHERE. $ email" "AND AND $ $ hash") sau mor (mysql_error ()); $ match = mysql_num_rows ($ căutare); echo $ match; // Afișați câte meciuri au fost găsite -> eliminați acest lucru când ați terminat cu testarea;)Noi avem un MECI! Pentru a modifica rezultatul, schimbați pur și simplu e-mailul și veți vedea că numărul returnat este 0.
Putem să ne folosim $ meci variabilă pentru a activa contul sau pentru a returna o eroare atunci când nu sa găsit niciun rezultat.dacă ($ match> 0) // Avem un meci, activați contul altceva // Nu se potrivește -> adresa URL nevalidă sau contul a fost deja activat.Pentru a activa contul, trebuie să actualizăm activ câmp la 1 utilizând o interogare MySQL.
// Avem o potrivire, activați contul mysql_query ("UPDATE users SET activ =" 1 "WHERE. $ Email" "AND AND $ $ hash") sau mor (mysql_error () ; echo "Contul dvs. a fost activat, vă puteți conecta acum„;Deci, folosim aceiași termeni de căutare pentru actualizare, așa cum am folosit în interogarea MySQL select. Schimbați activ la 1 în cazul în care e-mailul, hash-ul și câmpul activ = 0 se potrivesc. De asemenea, returnați un mesaj prin care spuneți utilizatorului că contul său a fost activat. Puteți adăuga un mesaj ca în cazul în care nu am găsit niciun rezultat. Deci, codul final ar trebui să arate similar cu:
mysql_connect ("localhost", "tutorial", "parola") sau muri (mysql_error ()); // Conectați-vă la serverul de bază de date (localhost) cu numele de utilizator și parola. mysql_select_db ("înregistrări") sau mor (mysql_error ()); // Selectați baza de date de înregistrare. dacă isset ($ _GET ['email']) &&! empty ($ _GET ['email']) / Verificați datele $ email = mysql_escape_string ($ _GET ['email']); // Setați variabila de e-mail $ hash = mysql_escape_string ($ _GET ['hash']); // Setați variabila hash $ search = mysql_query ("SELECT e-mail, hash, activ din utilizatori WHERE. $ Email") și "death" (mysql_error ()); $ match = mysql_num_rows ($ căutare); dacă ($ match> 0) // Avem o potrivire, activați contul mysql_query ("UPDATE users SET activ =" 1 "WHERE $ email." "AND $ $ hash" "AND active =" 0 " ) sau muri (mysql_error ()); echo "Contul dvs. a fost activat, vă puteți conecta acum„; altceva // Nu se potrivește -> url sau cont nevalid a fost deja activat. echo "Adresa URL este fie nevalidă, fie aveți deja activat contul.„; altceva // Echo de apropiere nevalidă 'Abordare nevalidă, vă rugăm să folosiți link-ul trimis la e-mail.„;Dacă vizitați verify.php fără niciun șir de caractere, se va afișa următoarea eroare:
Pasul 7 - Conectați-vă
În acest ultim pas, vă voi arăta cum să creați un formular de autentificare de bază și să verificați dacă contul este activat. Mai întâi creați un nou fișier numit login.php cu șablonul de bază pe care l-am folosit înainte, dar de data aceasta am schimbat formularul într-un formular de autentificare.
NETTUTS> Înscrie-te NETTUTS> Înscrie-te
„; // Afișați mesajul nostru și adăugați o div în jurul acestuia cu clasa statusmsg?>Formular de conectare
Introduceți numele și parola pentru a vă conecta
'$ Msg.'
Forma este html de bază, și aproape la fel ca formularul de înscriere, nu este nevoie de explicații suplimentare. Acum este momentul să scrieți codul pentru scriptul de autentificare, pe care îl vom scrie exact sub codul de conectare MySQL. Începem cu ceva ce am făcut și în formularul de înscriere.
dacă este ($ _ POST ['name']) & &!! empty ($ _ POST ['nume']) AND isset ($ _ POST ['password' / Ambele câmpuri sunt postate și nu sunt goale
Deci, mai întâi verificăm dacă datele sunt postate și ne asigurăm că nu este gol.
Următorul lucru este să creați câteva variabile locale pentru datele de postare:
dacă este ($ _ POST ['name']) & &!! empty ($ _ POST ['name']) username = mysql_escape_string ($ _ POST ['nume']); // Setați variabila pentru numele de utilizator $ password = mysql_escape_string (md5 ($ _ POST ['password'])); // Setați variabila pentru parola și convertiți-o într-un hash MD5.
Am creat variabilele locale și am schimbat parola într-un hash de md5 pentru a se potrivi cu parola hash pe care am stocat-o în baza de date.
Acum, este timpul să creați conexiunea la tabelul "utilizatori" și să verificăm dacă datele introduse sunt corecte.
dacă este ($ _ POST ['name']) & &!! empty ($ _ POST ['name']) username = mysql_escape_string ($ _ POST ['nume']); $ password = mysql_escape_string (md5 ($ _ POST ['parola'])); $ search = mysql_query ("SELECT numele de utilizator, parola, activ din utilizatori WHERE. $ username." "AND $ $ password" "AND active =" 1 "") sau mor (mysql_error ()); $ match = mysql_num_rows ($ căutare);
Am scris o interogare MySQL care va selecta numele de utilizator, parola și informațiile active din baza noastră de date, dacă se potrivesc numele de utilizator și parola.
ȘI activ = "1" este IMPORTANT !, aceasta vă asigură că vă puteți conecta numai dacă contul dvs. este activat. Folosim din nou numerele MySQL pentru a vedea câte meciuri sunt găsite.
dacă ($ match> 0) $ msg = 'Conectare completă! Mulțumiri'; // Setați cookie / Start Session / Start Download etc ... else $ msg = 'Login failed! Asigurați-vă că introduceți detaliile corecte și că ați activat contul. ';
În codul de mai sus verificăm dacă datele de conectare au avut succes sau nu.
Și acesta este sfârșitul acestui tutorial! Sper că v-a plăcut și dacă ați lăsat un comentariu mai jos!