Cum se codifică un formular de înscriere cu confirmare prin e-mail

În acest tutorial, vom crea un formular de înscriere pentru utilizator care adaugă un utilizator la o bază de date și apoi trimite un e-mail de confirmare la care trebuie să facă clic utilizatorul înainte ca contul să fie activat.

Nevoie de ajutor?

Acest tutorial vă va ajuta să faceți acest proces de la zero, dar dacă preferați, puteți utiliza una din multele formulare de înscriere pentru e-mail pe Envato Market. Iată câteva dintre cele mai populare opțiuni. 

1. Popup simplu de abonament

Formularul simplu de înscriere jQuery Plugin va colecta adresa de e-mail a vizitatorului pe site-ul dvs. într-un mod eficient, grabbing atenție. Are multe opțiuni de personalizare opționale pe care le puteți configura în câteva minute.


2. Hype: Formular de înscriere SmartR

Hype este un formular SmartR Sign Up, preconfigurat și adăugat la orice pagină cu un singur clic. Utilizează puterea utilizatorilor și a rețelelor lor de a crește în mod activ înregistrările și de a crește exponențial baza de utilizatori. 

3. Beta Splash Formular de înscriere pentru e-mail

Aceasta este o formă foarte simplă, dar elegantă, pentru site-ul dvs., unde vizitatorii pot să-și introducă adresa de e-mail (și numele dacă este dorit) pentru a fi adăugați la o listă de contacte. Utilizează AJAX pentru a trimite și valida e-mailurile și va funcționa și în cazul în care utilizatorul are JavaScript dezactivat.

Instalarea este rapidă și fără durere. Acest formular nu necesită funcționarea unei baze de date deoarece va crea și stoca intrări într-un fișier CSV.

Există mai multe opțiuni de formular de înscriere pe e-mail disponibile pe Envato Market, deci aveți o răsfoire. Sau dacă preferați să creați-o singură de la zero, citiți mai departe instrucțiunile.

Pasul 1: Șablonul

Am inclus aspectul site-ului de bază, astfel încât să nu pierdem timpul creând formularul și făcând site-ul să arate destul. Vom ajunge direct la codificare de la care ați venit aici.

Deschideți dosarul Șablon de site și copiați-l fie pe serverul local sau pe serverul dvs. web.

Deschide index.php și aruncați o privire rapidă. Veți vedea un simplu formular cu 3 intrări. Acestea sunt domeniile pe care le vom capta. Vrem numele de utilizator, parola lor, precum și adresa de e-mail. Puteți alege să captați alte elemente atunci când utilizatorii se înregistrează, dar acestea sunt cele 3 elemente barebase de care avem nevoie.


Pasul 2: Configurarea bazei de date MySQL

Deschideți PHPMyAdmin sau orice program pe care îl utilizați pentru a gestiona baza de date MySQL și a crea o nouă bază de date. Puteți să vă numiți așa cum doriți. Acum vrem să creăm rândurile care vor conține informații despre utilizatori și informații de confirmare. Pentru aceasta vom crea două tabele. Utilizatori și confirmați.

CREATE TABLE utilizatorilor '(' id 'int (11) NOT NULL auto_increment,' username 'varchar (50) NOT NULL implicit " implicit "," activ "binar (1) NOT NULL implicit '0', PRIMARY KEY ('id')) ENGINE = MyISAM AUTO_INCREMENT = 27 DEFAULT CHARSET = utf8;

Primul nostru tabel are 5 rânduri. Primul este ID-ul care este dat utilizatorului când se înregistrează. Aceasta este setată la incrementarea automată, astfel încât fiecare utilizator să primească un ID unic. Următorul este numele de utilizator, parola și codul de identificare. Ultimul rând ne permite să setăm starea activă a utilizatorilor. Când creăm prima rândul de utilizatori, starea activă va fi implicit 0. Aceasta înseamnă că contul de utilizatori este momentan inactiv. Odată ce utilizatorul își confirmă contul, vom seta această valoare la 1. Aceasta va indica faptul că contul este activ.

CREATE TABLE "confirma" ('id' int (11) NOT NULL auto_increment, 'userid' varchar (128) , PRIMARY KEY ('id')) MOTOR = MyISAM AUTO_INCREMENT = 27 DEFAULT CHARSET = utf8;

Al doilea tabel este tabelul de confirmare. Acesta conține ID-ul utilizatorului și e-mailul, precum și o cheie generată aleatoriu pe care o vom folosi pentru a confirma contul utilizatorilor.


Pasul 3: Conectarea la baza de date MySQL

Deschideți inc / php / config.php.

Mai întâi trebuie să facem conectarea la baza de date.

mysql_connect ('localhost', 'username', 'parola') sau mori ("Nu am putut sa ma conectez la baza de date, asigurati-va ca informatiile dvs. sunt corecte!");

În funcție de configurația dvs., va trebui să schimbați câteva variabile. Deci, mergeți mai departe și completați totul.

În continuare trebuie să-i spunem MySQL ce bază de date dorim să folosim.

mysql_select_db ('your_database_name') sau să mori ("Nu am găsit tabela de bază de date, asigurați-vă că este scris corect!");

Odată ce totul a fost modificat pentru a se potrivi cu baza dvs. de date, mergeți mai departe și indicați fișierul index.php de pe serverul dvs..

Dacă nu vedeți nicio eroare în partea de sus, suntem toți conectați.


Pasul 4: Trimiterea formularului

Bine, acum că suntem toți conectați la baza de date, trebuie să capturăm datele formularului pentru ca utilizatorul să se poată înscrie.

Îți dau bucata de cod și apoi explici ce se întâmplă. După aceasta, vom face modificări și vom adăuga funcționalități.

Aici este baza; plasați acest drept după ce prima include în partea de sus a index.php

// verificați dacă formularul a fost trimis dacă (isset ($ _ POST ['signup'])) 

Această instrucțiune if verifică dacă formularul a fost trimis.

Fără aceasta, scriptul nostru ar fi rulat de fiecare dată când pagina este actualizată și nu vrem asta.

Notă: În funcție de aplicația dvs. sau de stilul general de codificare, acest cod poate fi plasat într-un fișier separat care este accesat atunci când este trimis formularul. Am plasat codul într-un singur fișier pentru a păstra lucrurile simple și ușor de urmărit.


Pasul 5: Curățarea și verificarea variabilelor

Vrem să ne asigurăm că utilizatorul a trimis conținut real în locul unui simplu formular, așa că vom efectua câteva verificări rapide.

Prima parte este de a plasa $ _POST variabilele în variabile mai simple și curățați-le pentru baza de date. Plasați acest lucru în declarația noastră if.

$ username = mysql_real_escape_string ($ _ POST ['username']); $ password = mysql_real_escape_string ($ _ POST ['parola']); $ email = mysql_real_escape_string ($ _ POST ['email']);

mysql_real_escapse_string () se asigură că utilizatorul nu încearcă să utilizeze apostrofuri pentru a accesa baza de date cu injecție MySQL. Ori de câte ori doriți să puneți informațiile într-o bază de date pe care utilizatorul a introdus-o, vă rog să o parcurgeți mysql_real_escape_string (). Pentru mai multe informații despre injectarea MySQL puteți citi acest articol pe Wikipedia

Deci, ne-am curățat variabilele, acum să verificăm dacă utilizatorul a uitat orice câmpuri.

dacă (gol ($ username)) // pune codul în mine te rog dacă (gol ($ password)) // pune codul în mine te rog dacă (gol ($ email) 

Acum avem trei declarații care verifică dacă fiecare câmp este gol. Dacă câmpul este gol, vom aloca unele variabile.

Pentru a face lucrurile curate, vom crea o matrice care să dețină statutul procesului de înscriere, precum și orice text necesar pentru a afișa utilizatorului.

Chiar peste acea bucată de cod, să creăm o matrice și câteva variabile.

$ actiune = array (); $ action ['rezultat'] = null; $ text = array ();

Mai întâi, creăm o matrice goală numită acțiune și apoi setând o valoare matrice a rezultatului. Rezultatul va avea o valoare de succes sau de eroare. Apoi vom crea o altă matrice goală numită text. Aceasta va conține orice text pe care dorim să îl afișăm utilizatorului în timpul înscrierii.

Chiar acum, declarațiile noastre dacă verificăm variabilele noastre nu execută nici un cod, așa că haideți să mergem mai departe și să punem un cod în interiorul primei declarații if.

Puneți acest cod în declarația de nume de utilizator.

$ action ['rezultat'] = 'eroare'; array_push ($ text, 'Ați uitat numele de utilizator');

Să presupunem că utilizatorul trimite formularul fără un nume de utilizator. Declarația noastră va executa codul de mai sus. Mai întâi se va seta câmpul de rezultate al matricei noastre de acțiune la eroare.

Apoi vom folosi array_push () pentru a pune un text în matricea noastră de text. Vom folosi aceeași codă pentru ultimele două instrucțiuni "if", astfel încât să copiați și să inserați codul în ultimele două declarații if. Veți dori probabil să schimbați textul pentru a se potrivi cu instrucțiunea if.

Notă: Folosim array_push () în cazul în care avem mai multe erori în transmiterea formularului. Dacă toate instrucțiunile dacă sunt executate, matricea textului va arata astfel:

Array ([0] => 'Ați uitat numele dvs. de utilizator', [1] => 'Ați uitat parola', [2] => 'Ați uitat adresa dvs. de e-mail')

Acum trebuie să verificăm dacă avem greșeli, astfel încât să putem continua procesul de înscriere.


Pasul 6: Nu există erori, să înscrieți utilizatorul

Vom verifica dacă valoarea rezultată a matricei de acțiune este setată la eroare.

dacă ($ action ['rezultat']! = 'eroare') // nu există erori, continuați înscrierea $ password = md5 ($ password);  $ action ['text'] = $ text;

De asemenea, executăm parola prin intermediul funcției md5 (). Aceasta ia parola și returnează un șir de 32 de caractere care arată cam așa: a3470ce826283eca7ce3360d0f26b230. Este o bună practică să rulați parola printr-un fel de funcție de hash înainte de ao pune în baza de date. Acest lucru împiedică utilizatorii să vizualizeze parolele utilizatorilor dacă baza de date este hacked.

O verificare rapidă a valorii rezultatului acțiunii noastre și putem continua înregistrarea. Dacă rezultatul nostru este eroare, vom trece peste întregul cod și vom transmite erorile utilizatorilor noștri, astfel încât aceștia să poată efectua modificările necesare.

Ultima parte a acestui cod punem valorile matricei dvs. de text în matricea noastră de acțiune.


Pasul 7: Adăugarea utilizatorului la baza de date

Plasați acest cod în ultima noastră declarație if.

... Dacă verificarea declarației pentru erori ... // adăugați la baza de date $ add = mysql_query ("INSERT INTO 'VALUES utilizatorilor (NULL,' $ username ',' $ password ',' $ email ', 0)"); dacă ($ add) // utilizatorul a fost adăugat la baza de date altceva $ action ['result'] = 'error'; array_push ($ text, 'Utilizatorul nu a putut fi adăugat la baza de date. Motiv:' mysql_error ()); =

Folosim mysql_query () și INTRODUCE pentru a insera informațiile utilizatorilor în baza de date. Apoi, vom crea o altă declarație if verificând dacă utilizatorul a fost adăugat la baza de date. Facem acest lucru verificând dacă variabila $ add este adevărată sau falsă.

Dacă utilizatorul este adăugat, putem continua înregistrarea; dacă nu vom aloca unele variabile familiare și vom opri înscrierea.

Când lucrăm cu interogări MySQL, folosim mysql_error () funcția în cazul în care acestea sunt erori, deoarece vă ajută cu depanarea ceea ce este în neregulă cu interogările dumneavoastră. Va emite erori text atunci când ceva nu este în regulă. Asta e bine!


Pasul 8: Confirmarea este necesară

Utilizatorul a trimis formularul, totul verifică și acum locuiesc în baza de date. Vrem ca utilizatorul să poată să își folosească contul, așa că trebuie să configuram confirmarea.

... dacă se adaugă verificarea ... // obține noul utilizator id $ userid = mysql_insert_id (); // creați o cheie aleatoare $ key = $ username. $ email. data ( 'mY'); $ cheie = md5 (cheia $); // adăuga confirma rândul $ confirm = mysql_query ("INSERT INTO 'confirma' VALUES (NULL, '$ userid', '$ key', '$ email')"); dacă ($ confirm) // trimiteți e-mailul altceva $ action ['result'] = 'eroare'; array_push ($ text, 'Confirmați rândul nu a fost adăugat la baza de date. Motiv:' mysql_error ()); 

Pentru a face lucrurile ușor, să alocăm noul ID de utilizator unei variabile, astfel încât să îl putem folosi mai târziu. Facem asta folosind mysql_insert_id (). Acest lucru va fi setat $ userid indiferent de ID-ul noului utilizator.

Apoi vom crea cheia aleatoare pentru acel utilizator specific. Creăm o variabilă cu cheia și o umplem cu o valoare a numelui de utilizator, a e-mailului și a datei. Șirul va arăta ca [email protected]. După aceea, folosim md5 () funcția pentru ao converti într-un șir aleator, care este unic pentru acel utilizator.

Utilizarea mysql_query () și INSERT din nou, am introdus noul ID de utilizator, cheia și e-mailul utilizatorilor în baza de date.


Pasul 9: Configurarea șabloanelor de e-mail

Vom face o pauză de la codarea PHP și vom crea două fișiere noi. Din motive de a fi rapid și ușor, vom folosi de fapt două șabloane pe care le-am inclus în acest tutorial. Cele două fișiere pe care le vom analiza sunt signup_template.html și signup_template.txt. Swift ne permite să atribuiți o versiune HTML, precum și o versiune TXT a e-mailului incase clientul de e-mail al utilizatorilor nu acceptă e-mailuri HTML.

Deschideți signup_template.html Notă: Puteți citi în HTML în e-mailuri de la carsonified. Nu vom edita acest fișier, voi doar să explic ceea ce se întâmplă și apoi puteți să jucați cu el odată ce tutorialul este complet. Cea mai importantă parte a acestui fișier este etichetele care arată NUME DE UTILIZATOR și confirm.php? e-mail = EMAIL & key = KEY. Vom scrie o funcție care folosește acest șablon și le înlocuiește cu variabilele din formularul nostru.


Pasul 10: Funcția de șablon

Deschide inc / php / functions.php și plasați acest cod înăuntru.

funcția format_email ($ info, $ format) // setarea rădăcină $ root = $ _SERVER ['DOCUMENT_ROOT']. '/ dev / tutorials / email_signup'; // apuca conținutul șablonului $ template = file_get_contents ($ root. '/ signup_template.'. $ format); // înlocuiți toate etichetele $ template = ereg_replace ('USERNAME', $ info ['username'], $ template); $ template = ereg_replace ('EMAIL', $ info ['email'], $ șablon); $ template = ereg_replace ('KEY', $ info ['cheie'], $ template); $ template = ereg_replace ('SITEPATH', 'http: //site-path.com', șablon $); // returnați html-ul șablonului returnați $ template; 

format_email () ia două variabile care vor fi folosite în index.php. Prima este matricea informațiilor despre formular, iar cea de-a doua este formatul. Avem o variabilă de format pentru a putea re-folosi această matrice atât pentru versiunile HTML, cât și pentru TXT ale șablonului.

Mai întâi am setat rădăcina. Acest lucru indică directorul că șabloanele sunt găzduite.

Apoi deschidem conținutul șablonului nostru și îl atribuim unei variabile.

Acum o vom folosi ereg_replace () pentru a ne înlocui NUME DE UTILIZATOR etichetele din șablonul nostru cu conținutul din formularul nostru. Este practic doar un sistem de șabloane foarte simplu.

În cele din urmă vom returna variabila șablon care conține toate html-urile.

Explicație: Pe scurt, format_email () deschide fișierele șablonului, ia codul HTML și îl atribuie variabilei noastre. Acesta este doar un mod mai curat, apoi atribuind tot HTML-ul în funcția însăși.


Pasul 11: Trimiterea e-mailului

Vom scrie o altă funcție pentru a face față lui Swift și a trimite e-mailurile.

funcția send_email ($ info) // format fiecare email $ body = format_email ($ info, 'html'); $ body_plain_txt = formatul_email ($ info, 'txt'); // configurați mailer $ transport = Swift_MailTransport :: newInstance (); $ mailer = Swift_Mailer :: newInstance ($ transport); $ message = Swift_Message :: newInstance (); $ message -> setSubject ("Bun venit la numele site-ului"); $ message -> setFrom (array ('[email protected] '=>' Numele site-ului ')); $ message -> setTo (array ($ info ['email'] => $ info ['nume de utilizator'])); $ message -> setBody ($ body_plain_txt); $ message -> addPart ($ corp, 'text / html'); $ result = $ mailer-> trimite ($ mesaj); returneaza rezultatul $; 

Ca și cum format_email (), Trimite email() ia matricea noastră de informații ca variabilă. Prima parte a funcției atribuim două variabile, $ body and $ body_plain_text. Noi folosim format_email () pentru a atribui valorile HTML ale șablonului nostru pentru fiecare variabilă. Acum vine partea bună. Am instalat instanța rapidă folosind Swift_MailTransport: newInstance () și apoi configurați mailer folosind Swift_Mailer :: newInstance ($ transport);

Creați o nouă instanță a mesajului Swift și începeți să atribuiți câteva variabile acestei instanțe. Am setat subiectul, de la e-mail și la adresa de e-mail și apoi utilizați setBody () pentru a atribui versiunea text a e-mailului la instanța mailer. Pentru a adăuga versiunea HTML pe care o folosim addPart (). trimite() funcția se ocupă de trimiterea e-mailului și apoi returnează rezultatul. Bine, avem e-mailurile noastre de a crea și a trimite funcții scrise, să mergem înapoi la index.php și să începem să încheiem înregistrarea principală.


Pasul 12: Am trimis? Să confirmăm?

Ultimul nostru bit ar fi trebuit să fie declarația if verificând dacă a fost creat rândul de confirmare.

Să trimitem e-mailul și să verificăm dacă totul a mers bine.

... dacă confirmați // // includeți clasa rapidă include_once 'inc / php / swift / swift_required.php'; // introduceți informații într-o matrice pentru a trimite funcția $ info = array ('username' => $ username, 'email' => $ email, 'key' => key); // trimiteți e-mailul dacă (send_email ($ info)) // email trimis $ action ['result'] = 'succes'; array_push ($ text, 'Vă mulțumim pentru înscriere, vă rugăm să verificați adresa de email pentru confirmare!');  altceva $ action ['result'] = 'eroare'; array_push (text $, 'Nu s-a putut trimite e-mail de confirmare'); 

Fără clasa Swift nu putem trimite niciun e-mail, așa că, în primul rând, includem clasa rapidă. Trebuie să trimitem informațiile noastre la ambele noi funcții, așa că vom crea o nouă matrice și vom atribui variabilele noastre. Știu că știu, mai multe declarații, dar trebuie să verificăm erorile pentru a le ușura utilizatorii. Întotdeauna trebuie să presupuiți că utilizatorii vor face orice greșeală posibilă imaginabilă.

Ne înfășurăm Trimite email() funcția într-o altă instrucțiune if, precum și trecerea tabloului de informații $. Dacă e-mailul este trimis, atribuim o valoare de succes și mulțumim utilizatorului pentru înscrierea. Dacă există erori, folosim variabilele familiare. Deci, acum aproape că am terminat înregistrarea, trebuie să fie creată doar o ultimă funcție. Chiar dacă atribuim toate aceste variabile de eroare / succes și text, nu am afișat aceste informații pentru utilizator.

Mergeți înapoi la funcțiile.php și lipiți acest cod.

// curățați funcția de erori show_errors ($ action) $ error = false; dacă (! empty ($ action ['rezultat'])) $ error = "
    ($ action ['text'])) // introduce fiecare eroare foreach ($ action ['text'] ca text $) $ error. = "
  • $ Text

  • "" \ n "; altceva // eroare unică $ eroare. ="
  • $ Acțiune [text]

  • "; $ error =" "
"." \ n "; returnați $ error;

Acest lucru poate părea confuz, dar chiar face ca succesul / erorile noastre să arate bine.

Mai întâi verifică dacă matricea este goală, astfel încât nu executăm codul atunci când nu este necesar.

Apoi creează un tag ul și aplică rezultatul ca clasă. Acest lucru va fi fie succes, fie eroare și este numai estetic.

Apoi, verificăm dacă variabila de text este o matrice sau pur și simplu un șir. Dacă este un șir, îl înfășurăm într-un li. Dacă este o matrice, bifăm fiecare element de matrice și o înfășurăm într-un li.

În cele din urmă, închidem ul și returnează întregul șir.

Dacă revenim la index.php și plasăm acest cod imediat după includere header.php putem încheia această secțiune.

... antetul include ... 

O scurtă explicație. Luăm toate valorile matricei noastre de acțiune și le transmitem show_errors () funcţie. Dacă există conținut, acesta returnează o listă neordonată.


Pasul 13: Confirmarea utilizatorului

Ar trebui să avem o bună înțelegere cu privire la funcționarea scenariului; așa că pentru următorul scenariu vă voi da toată bucata de cod și apoi veți trece prin ea.

Deschide confirm.php și lipiți acest lucru între antetul include și al tău show_errors () funcţie.

// configurați unele variabile $ action = array (); $ action ['rezultat'] = null; // validare rapidă / simplă dacă (gol ($ _GET ['email']) || gol ($ _GET ['cheie'])) $ action ['rezultat'] = 'eroare'; $ action ['text'] = 'Ne lipsesc variabilele. Verificați din nou e-mailul. ';  dacă $ action ['rezultat']! = 'eroare') // curățați variabilele $ email = mysql_real_escape_string ($ _ GET ['email']); $ key = mysql_real_escape_string ($ _GET ['cheie']); // verificați dacă cheia este în baza de date $ check_key = mysql_query ("SELECT * FROM" confirma 'WHERE' email '=' $ email 'ȘI' key '=' ); dacă (mysql_num_rows ($ check_key)! = 0) // obțineți informația de confirmare $ confirm_info = mysql_fetch_assoc ($ check_key); // confirmați e-mailul și actualizați baza de date a utilizatorilor $ update_users = mysql_query ("UPDATE" utilizatori SET 'activ' = 1 WHERE 'id' = '$ confirm_info [userid]' LIMIT 1 ') sau mor (mysql_error ()); // ștergeți rândul de confirmare $ delete = mysql_query ("DELETE FROM" confirma 'WHERE' id '=' $ confirm_info [id] 'LIMIT 1') sau mor (mysql_error ()); dacă ($ update_users) $ action ['rezultat'] = 'succes'; $ action ['text'] = 'Utilizatorul a fost confirmat. Mulțumesc!';  altceva $ action ['result'] = 'eroare'; $ action ['text'] = 'Utilizatorul nu a putut fi actualizat Motivul:' .mysql_error () ;;  altceva $ action ['rezultat'] = 'eroare'; $ action ['text'] = 'Cheia și e-mailul nu sunt în baza noastră de date.'; 

Cele mai multe dintre acestea ar trebui să pară foarte familiare; așa că am să sărind înainte și să verific dacă cheia este în secțiunea de bază de date.

Din nou, folosim mysql_query () pentru a obține orice rânduri în baza de date în care e-mailul și cheia sunt egale cu tastele furnizate de utilizatorii de e-mail.

Folosim mysql_num_rows () pentru a verifica dacă numărul de rânduri returnate este mai mare de 0.

Dacă e-mailul și cheia sunt în baza de date, luăm toate informațiile din baza de date utilizând mysql_fetch_assoc ().

Acum că utilizatorul și-a confirmat contul, trebuie să actualizăm baza de date și să setăm rândul activ la 1.

Folosim mysql_query () din nou, dar în loc de INTRODUCE folosim ACTUALIZAȚI pentru a actualiza rândul activ la 1 unde ID-ul de utilizator este același cu ID-ul curent al utilizatorilor.

Pentru a curăța totul pe care îl folosim mysql_query () și ȘTERGE pentru a elimina rândul de confirmare din baza de date. Astfel, utilizatorul nu se poate întoarce la această pagină și poate reconfirma. De asemenea, păstrează baza de date frumoasă și curată.


Concluzie

Am parcurs mai multe domenii diferite în acest tutorial. Am descărcat și inclus un script de terță parte pentru a face față trimiterii de e-mailuri, a implementat o simplă validare a formularului, precum și a creat un sistem de șabloane foarte simplu pentru a ne eticheta e-mailurile. Dacă sunteți nou în MySQL am atins cele trei funcții cele mai comune din MySQL, astfel încât să nu aveți probleme cu completarea unor tutoriale mai avansate.


Note finale

  • Am folosit Swift Mailer ca script de implementare a email-urilor, care poate fi descărcat aici: http://swiftmailer.org/
  • Am folosit de asemenea stiluri de butoane furnizate de Zurb. Asigurați-vă că le verificați și le dați niște dragoste. http://www.zurb.com/blog_uploads/0000/0485/buttons-02.html

Vă mulțumim pentru lectură și asigurați-vă că mă vizitați pe Twitter dacă aveți întrebări!

Cod