Slik implementerer du e-postbekreftelse for nye medlemmer

Har du noen gang opprettet en konto med et nettsted, og var pålagt å sjekke e-postadressen din og klikke gjennom en bekreftelseslink sendt av selskapet for å aktivere den? Hvis du gjør det, reduseres antallet spamkontoer. I denne leksjonen lærer vi hvordan du gjør dette veldig!

Ser etter en snarvei?

Denne opplæringen lærer deg å bygge et e-postbekreftelsesskript fra bunnen av, men hvis du vil ha noe du kan bruke på nettstedet ditt med en gang, sjekk ut Email Verify på Envato Market. 

Email Verify er et PHP-skript som lar deg bekrefte e-postadresser uten å lagre noe i noen databaser. Det vil sende brukerne en e-post som krever at de klikker en kobling for å bekrefte e-posten før e-postadressen blir lagt til i det du vil legge til på.

E-postbekreftelse på Envato Market

Hva skal vi bygge?

Vi skal bygge et fint PHP-registreringsskript der en bruker kan opprette en konto for å få tilgang til en "medlemsdel" av et nettsted.
Etter at brukeren har opprettet sin konto, vil kontoen da bli låst til brukeren klikker på en bekreftelseslink som han vil motta i sin e-postboks.


Trinn 1 - Registreringsside

Vi trenger først en enkel side der våre besøkende kan registrere sine kontoer; så det er det første vi skal bygge.
Jeg vil gjerne minne om at dette er en PHP-opplæring, og etter min mening tror jeg at du trenger å vite grunnleggende om HTML før du går videre med PHP. Jeg legger til kommentarer til HTML & CSS for å beskrive hver linje med kode.

index.php - Dette er vår registreringsside med et grunnleggende skjema.

   NETTUTS> Registrer deg     

NETTUTS> Registrer deg

Registreringsskjema

Vennligst skriv inn navnet ditt og e-postadressen for å opprette din konto

css / style.css - Dette er stilark for index.php og ytterligere sider.

/ * Globale stiler * / * polstring: 0; / * Tilbakestill all utfylling til 0 * / margin: 0; / * Tilbakestill all margin til 0 * / kropp bakgrunn: # F9F9F9; / * Angi HTML bakgrunnsfarge * / font: 14px "Lucida Grande"; / * Angi global skriftstørrelse og familie * / farge: # 464646; / * Angi global tekstfarge * / p margin: 10px 0px 10px 0px; / * Legg litt polstring til toppen og bunnen av 

koder * / / * Header * / #header height: 45px; / * Angi topphøyde * / bakgrunn: # 464646; / * Angi topptekstfarge * / #header h3 color: # FFFFF3; / * Angi overskrift overskrift (øverste venstre tittel) farge * / polstring: 10px; / * Angi polstring, for å sentrere den i overskriften * / font-weight: normal; / * Angi skriftlig vekt til normal, standard ble den satt til fet * / / * Wrap * / #wrap background: #FFFFFF; / * Angi innholds bakgrunn til hvitt * / bredde: 615px; / * Angi bredden på innholdsområdet * / margin: 0 auto; / * Senter vårt innhold i nettleseren vår * / margin-top: 50px; / * Margin toppen for å få litt mellomrom mellom toppteksten og innholdet * / polstring: 10px; / * Padding å gjøre litt mer plass til vår tekst * / border: 1px solid #DFDFDF; / * Liten kantlinje for etterbehandlingen * / text-align: center; / * Senter våre innholdstekst * / #wrap h3 font: italic 22px Georgia; / * Angi skrift for vår overskrift 2 som vil bli vist i vår pakke * / / * Form & Input-felt stiler * / skjema margin-top: 10px; / * Gjør litt mer avstand fra beskrivelsen tekst * / form .submit_button bakgrunn: # F9F9F9; / * Sett knapp bakgrunn * / kantlinje: 1px solid #DFDFDF; / * Liten kant rundt vår sende-knapp * / polstring: 8px; / * Legg til litt mer plass rundt vår knappetekst * / input font: normal 16px Georgia; / * Angi skrift for våre inntastingsfelt * / border: 1px solid #DFDFDF; / * Liten kant rundt vårt inntastingsfelt * / polstring: 8px; / * Legg litt mer plass rundt vår tekst * /

Som du kan se, har jeg lagt til en kommentar til hver linje som beskriver hva de gjør. Du har kanskje også lagt merke til følgende kommentar i index.php-filen:

 

Vi skal skrive vår PHP mellom disse 2 linjene!


Trinn 2 - Inngangsvalidering

Det første vi skal bygge er et stykke kode som skal validere informasjonen. Her er en kort liste som beskriver hva som må gjøres.

  • Hvis navnfeltet ikke er tomt.
  • Hvis navnet ikke er kort.
  • Hvis e-postfeltet ikke er tomt.
  • Hvis e-postadressen er gyldig [email protected]

Så vårt første skritt sjekker om skjemaet blir sendt inn, og at feltene ikke er tomme.

  

Tid for en sammenbrudd! Vi starter med en IF-setning, og vi bekrefter først navnefeltet:

 if () // Hvis setningen er sann kjørekode mellom parentes isset ($ _ POST ['navn']) // Er navnet feltet lagt ut; Det spiller ingen rolle om det er tomt eller fylt. && // Dette er det samme som AND i vår uttalelse; det lar deg kontrollere flere utsagn. ! tom ($ _ POST ['navn']) // Verifiser om feltnavnet ikke er tomt isset ($ _ POST ['email']) // Er e-postfeltet lagt ut; Det spiller ingen rolle om det er tomt eller fylt. && // Dette er det samme som AND i vår uttalelse; det lar deg kontrollere flere utsagn. ! tom ($ _ POST ['email']) // Verifiser om feltmeldingen ikke er tom

Så hvis du skulle sende skjemaet nå med tomme felter, skjer ingenting. Hvis du fyller i begge feltene, vil vårt skript kjøre koden mellom parentesene.
Nå skal vi lage et stykke kode som vil sjekke om en e-postadresse er gyldig. Hvis det ikke er det, returnerer vi en feil. La oss også slå våre postvariabler inn i lokale variabler:

hvis isset ($ _ POST ['name']) &&! tomt ($ _ POST ['navn']) og isset ($ _ POST ['email']) &&! tomt ($ _ POST ['email' navn = mysql_escape_string ($ _ POST ['navn']); // Vri vårt innlegg i en lokal variabel $ email = mysql_escape_string ($ _ POST ['email']); // Vri vårt innlegg til en lokal variabel

Vi kan nå nå våre data via våre lokale variabler. Som du kan se, har jeg også lagt til en MySQL-fluktstreng for å forhindre MySQL-injeksjon når du setter inn dataene i MySQL-databasen.

"Mysql_real_escape_string () -funksjonen unngår spesialtegn i en streng for bruk i en SQL-setning."

Vanlig uttrykk

Neste opp er en liten brikke som sjekker om e-postadressen er gyldig.

 $ name = mysql_escape_string ($ _ POST ['navn']); $ email = mysql_escape_string ($ _ POST ['email']); if (eregi ( «^ [_ a-Z0-9 -]! + (\ [_ a-Z0-9 -]. +) * @ [a-Z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ e-post)) // Retur Feil - Ugyldig Email annet // Returrett - Gyldig Email

Vær oppmerksom på at jeg ikke personlig skrev dette regulære uttrykket, det er en liten utdrag fra php.net.
I utgangspunktet bekrefter det om e-posten er skrevet i følgende format:

 [email protected]

Nå i eregi, kan du se at det sjekker om e-posten inneholder tegn fra alfabetet, hvis det har noen tall eller en fantomdash (_), og selvfølgelig de grunnleggende kravene til en epost (e-post) '@' og a (prikk) '.' Hvis ingen av disse tegnene er funnet, returnerer uttrykket "false". Ok, så nå må vi legge til noen grunnleggende feilmeldinger.

 if (eregi ( «^ [_ a-Z0-9 -]! + (\ [_ a-Z0-9 -]. +) * @ [a-Z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ e-post)) // Retur Feil - Ugyldig Email $ msg = 'E-postadressen du har oppgitt er ugyldig, prøv igjen.';  ellers // Return Suksess - Gyldig Email $ msg = 'Din konto er laget, 
Vennligst bekreft det ved å klikke på aktiveringslenken som er sendt til din e-post. ';

Som du kan se har vi gjort en lokal variabel "$ msg", slik at vi kan vise feilen eller suksessmeldingen hvor som helst på siden.
Og vi skal vise den mellom instruksjonsteksten og skjemaet.

  

Registreringsskjema

Vennligst skriv inn ditt navn og din e-postadresse for å opprette din konto

'. $ Msg.
'; // Vis vår melding og pakk den med en div med klassen "statusmsg". ?>

Legg til dette til style.css, å stilen vår statusmelding litt.

#wrap .statusmsg font-size: 12px; / * Angi melding skriftstørrelse * / polstring: 3px; / * Noen polstring for å gjøre litt mer plass til teksten vår * / bakgrunn: #EDEDED; / * Legg til en bakgrunnsfarge i vår statusmelding * / grense: 1px solid #DFDFDF; / * Legg til en ramme rundt vår statusmelding * /

Trinn 3 - Opprette databasen og etablere en tilkobling

Nå må vi etablere en databaseforbindelse og opprette et bord for å sette inn kontoopplysningene. Så la oss gå til PHPMyAdmin og opprette en ny database med navnet registreringer og opprett en brukerkonto som har tilgang til databasen for å sette inn og oppdatere data.

La oss lage vår brukere bord med 5 felt:

Så nå må vi skrive inn detaljer for disse feltene:

For de som ikke vil skrive inn disse dataene manuelt, kan du i stedet kjøre følgende SQL-kode.

CREATE TABLE 'users' ('id' INT (10) IKKE NULL AUTO_INCREMENT PRIMARY KEY, 'brukernavn' VARCHAR (32) IKKE NULL, 'passord' VARCHAR (32) IKKE NULL, 'email' TEKST IKKE NULL, 'hash' VARCHAR (32) IKKE NULL, 'aktiv' INT (1) IKKE NULL DEFAULT '0') MOTOR = MYISAM;

Vår database er opprettet, nå må vi etablere en forbindelse ved hjelp av PHP. Vi skriver følgende kode ved starten av skriptet vårt rett under følgende linje:

  

Vi bruker følgende kode for å koble til databaseserveren og velge registreringer database. (grunnleggende MySQL-tilkobling)

mysql_connect ("localhost", "brukernavn", "passord") eller dø (mysql_error ()); // Koble til databaseserveren (localhost) med brukernavn og passord. mysql_select_db ("registreringer") eller dø (mysql_error ()); // Velg registreringsdatabase.

Nå som vi har etablert en forbindelse til vår database, kan vi gå videre til neste trinn og sette inn kontoopplysningene.


Trinn 4 - Sett inn konto

Nå er det på tide å legge inn de oppgitte kontoopplysningene i vår database og generere en aktiveringshash. Skriv følgende kode under denne linjen:

// Return Suksess - Gyldig Email $ msg = 'Din konto er blitt gjort, 
Vennligst bekreft det ved å klikke på aktiveringslenken som er sendt til din e-post. ';

Aktiveringshash

I vår database har vi laget et felt som heter hash, denne hash er en 32 tegn streng tekst. Vi sender også denne koden til brukerens e-postadresse. De kan deretter klikke på linken (som inneholder hash), og vi vil verifisere om det samsvarer med den i databasen. La oss lage en lokal variabel kalt $ hash og generere en tilfeldig md5 hash.

$ hash = md5 (rand (0,1000)); // Generer tilfeldig 32 karakter hash og tilordne den til en lokal variabel. // Eksempelutgang: f4552671f8909587cf485ea990207f3b

Hva gjorde vi? Vel, vi bruker PHP-funksjonen "Rand" for å generere et tilfeldig tall mellom 0 og 1000. Deretter vil vår MD5-funksjon skifte dette nummeret til en 32 tegn streng tekst som vi vil bruke i vår aktiverings-e-post. Mitt valg er å bruke MD5, fordi det genererer en hash på 32 tegn som er sikker og i dette tilfellet umulig å knekke.

Opprette et tilfeldig passord

Den neste tingen vi trenger er å opprette et tilfeldig passord for medlemmet vårt:

$ password = rand (1000,5000); // Generer tilfeldig tall mellom 1000 og 5000 og tilordne det til en lokal variabel. // Eksempelutgang: 4568

Sett inn følgende informasjon i vår database ved hjelp av en MySQL-spørring

mysql_query ("INSERT INTO users (brukernavn, passord, e-post, hash) VALUES ('". mysql_escape_string ($ navn).' ',' ". mysql_escape_string (md5 ($ passord)). e-post). "','". mysql_escape_string ($ hash). "')") eller dø (mysql_error ());

Som du kan se, setter vi inn alle dataene med en MySQL escape-streng rundt den for å forhindre MySQL-injeksjon.
Du kan også merke at MD5-funksjonen endrer det tilfeldige passordet til en sikker hash for beskyttelse. Eksempel: Hvis en "ond" person får tilgang til databasen, kan han ikke lese passordene.

For testing, fyll ut skjemaet og sjekk om dataene blir lagt inn i vår database.


Trinn 5 - Send bekreftelsesmeldingen

Like etter at vi har lagt inn informasjonen i vår database, må vi sende en e-post til brukeren med verifiseringslenken. Så la oss bruke PHP "mail" -funksjonen til å gjøre nettopp det.

$ til = $ email; // Send e-post til brukeren $ subject = 'Signup | Bekreftelse'; // Gi epost et emne $ message = 'Takk for at du registrerer deg! Din konto er opprettet, du kan logge inn med følgende legitimasjon etter at du har aktivert kontoen din ved å trykke på webadressen nedenfor. ------------------------ Brukernavn: '. $ Navn.' Passord: '. $ Passord.' ------------------------ Vennligst klikk på denne linken for å aktivere kontoen din: http://www.yourwebsite.com/verify.php?email= ' . $ email. '& hash ='. $ hash. '; // Vår melding ovenfor, inkludert lenken $ headers =' Fra: [email protected] '. "\ r \ n"; // Angi fra overskriftens mail til, $ emne, $ melding, $ overskrifter); // Send e-posten vår

La oss nå bremse meldingen:

Takk for at du registrerte deg! Din konto er opprettet, du kan logge inn med følgende legitimasjon etter at du har aktivert kontoen din ved å trykke på webadressen nedenfor. ------------------------ Brukernavn: '. $ Navn.' Passord: '. $ Passord.' ------------------------

I koden ovenfor sender vi en kort beskrivelse til brukeren vår som inneholder brukernavnet og passordet - ved hjelp av de lokale variablene vi opprettet da dataene ble lagt ut.

Vennligst klikk på denne linken for å aktivere kontoen din: http://www.yourwebsite.com/verify.php?email='.$email.'&hash='.$hash. '

I denne delen av koden opprettet vi en dynamisk link. Resultatet av dette vil se slik ut:

Som du ser, skaper det en solid url, som er umulig å gjette. Dette er en veldig sikker måte å verifisere e-postadressen til en bruker på.


Trinn 6 - Kontoaktivering

Som du kan se, kobler vår URL til verify.php så la oss lage det, ved å bruke samme grunnleggende mal som vi brukte for index.php.
Fjern imidlertid skjemaet fra malen.

   NETTUTS> Registrer deg     

NETTUTS> Registrer deg

Det første vi må gjøre er å se om vi har våre $ _GET-variabler (e-post og hash)

hvis isset ($ _ GET ['email']) &&! tomt ($ _ GET ['email']) og isset ($ _ GET ['hash']) &&! tomt $ _ GET ['hash']) / Bekreft data ellers // Ugyldig tilnærming

For å gjøre ting litt enklere, la oss tilordne våre lokale variabler og legge til MySQL-injeksjonsforebygging ved igjen, ved hjelp av MySQL-escapestrengen.

hvis isset ($ _ GET ['email']) &&! tomt ($ _ GET ['email']) og isset ($ _ GET ['hash']) &&! tomt $ _ GET ['hash']) / Bekreft data $ email = mysql_escape_string ($ _ GET ['email']); // Angi e-postvariabel $ hash = mysql_escape_string ($ _ GET ['hash']); // Sett hash-variabel

Neste er å sjekke dataene fra URLen mot dataene i vår database ved hjelp av en MySQL-spørring.

$ search = mysql_query ("SELECT email, hash, active FROM users WHERE. $ email." "OG. $ hash." "OG aktiv =" 0 "") eller dø (mysql_error ()); $ match = mysql_num_rows ($ søk);

I koden ovenfor brukte vi en MySQL-valgerklæring, og sjekket om e-post og hash matchet. Men ved siden av det, sjekket vi om statusen til kontoen er "inaktiv". Til slutt bruker vi mysql_num_rows for å avgjøre hvor mange kamper som er funnet. Så la oss prøve dette ut. Bare bruk et enkelt ekko for å returnere resultatene.

$ search = mysql_query ("SELECT email, hash, active FROM users WHERE. $ email." "OG. $ hash." "OG aktiv =" 0 "") eller dø (mysql_error ()); $ match = mysql_num_rows ($ søk); ekko $ match; // Vis hvor mange kamper har blitt funnet -> fjern dette når du er ferdig med testing;)

Vi har en KAMP! For å endre resultatet, endrer du e-posten og du ser at nummeret som returneres er 0.
Vi kan bruke vår $ kamp variabel for å enten aktivere kontoen eller returnere en feil når ingen kamp er funnet.

hvis ($ match> 0) // Vi har en kamp, ​​aktiver kontoen ellers // Ingen kamp -> ugyldig nettadresse eller konto er allerede aktivert. 

For å aktivere kontoen må vi oppdatere aktiv feltet til 1 ved hjelp av en MySQL-spørring.

// Vi har en kamp, ​​aktiver kontoen mysql_query ("UPDATE brukere SET active =" 1 "WHERE. $ Email." "OG. $ Hash." "OG aktiv =" 0 "") eller dø (mysql_error ()) ; ekko '
Din konto er aktivert, du kan nå logge inn
';

Så vi bruker de samme søkeordene for oppdateringen som vi brukte i vårt MySQL-utvalg. Vi bytter aktivt til 1 der e-post, hash og felt aktivt = 0 stemmer overens. Vi returnerer også en melding som forteller brukeren at kontoen hans har blitt aktivert. Du kan legge til en melding som vi gjorde her til "no match" -delen. Så den endelige koden skal se ut som:

mysql_connect ("localhost", "opplæring", "passord") eller dø (mysql_error ()); // Koble til databaseserveren (localhost) med brukernavn og passord. mysql_select_db ("registreringer") eller dø (mysql_error ()); // Velg registreringsdatabase. hvis isset ($ _ GET ['email']) &&! tomt ($ _ GET ['email']) og isset ($ _ GET ['hash']) &&! tomt $ _ GET ['hash']) / Bekreft data $ email = mysql_escape_string ($ _ GET ['email']); // Angi e-postvariabel $ hash = mysql_escape_string ($ _ GET ['hash']); // Sett hash variable $ search = mysql_query ("SELECT email, hash, active FROM brukere der. $ Email." "OG. $ Hash." "OG active =" 0 "") eller dø (mysql_error ()); $ match = mysql_num_rows ($ søk); hvis ($ match> 0) // Vi har en kamp, ​​aktiver kontoen mysql_query ("UPDATE-brukere SET active =" 1 "WHERE. $ email." "OG. $ hash." "OG aktiv =" 0 "" ) eller dø (mysql_error ()); ekko '
Din konto er aktivert, du kan nå logge inn
'; ellers // Ingen kamp -> ugyldig nettadresse eller konto er allerede aktivert. ekko '
Nettadressen er enten ugyldig eller du har allerede aktivert kontoen din.
'; else // Ugyldig tilnærming ekko '
Ugyldig tilnærming, vennligst bruk lenken som er sendt til din epost.
';

Hvis du besøker verify.php uten noen strenger, vil følgende feil bli vist:


Trinn 7 - Logg inn

I dette siste trinnet vil jeg vise deg hvordan du lager et grunnleggende påloggingsskjema og kontroller om kontoen er aktivert. Først opprett en ny fil som heter login.php med grunnmalen vi brukte før, men denne gangen endret jeg skjemaet til et påloggingsskjema.

   NETTUTS> Registrer deg     

NETTUTS> Registrer deg

innloggingsskjema

Vennligst skriv inn ditt navn og passord for å logge inn

'. $ Msg.
'; // Vis vår melding og legg til en div rundt den med klassen statusmsg?>

Skjemaet er grunnleggende html, og nesten det samme som påmeldingsskjemaet, er det ikke nødvendig med ytterligere forklaring. Nå er det på tide å skrive koden for påloggingsskriptet, som vi vil skrive rett under MySQL-tilkoblingskoden. Vi starter med noe vi også gjorde i registreringsskjemaet.

hvis (isset ($ _ POST ['navn']) &&! tomt ($ _ POST ['navn']) og isset ($ _ POST ['passord']) &&! tomt ($ _ POST ['passord']) / Begge feltene blir lagt ut og det er ikke tomt

Så vi sjekker først for å se om dataene blir lagt ut, og vi sørger for at det ikke er tomt.
Deretter skal du opprette noen lokale variabler for postdataene:

hvis (isset ($ _ POST ['navn']) og&! tomt ($ _ POST ['navn']) og isset ($ _ POST ['passord']) &&! tomt ($ _ POST ['passord'])) $ brukernavn = mysql_escape_string ($ _ POST ['navn']); // Angi variabel for brukernavnet $ password = mysql_escape_string (md5 ($ _ POST ['passord'])); // Angi variabel for passordet og konverter det til en MD5 hash. 

Vi opprettet de lokale variablene og endret passordet til en md5 hash for å matche det med passord hash vi har lagret i databasen.
Nå er det på tide å opprette tilkobling til "bruker" -tabellen og verifisere om de oppgitte dataene er riktige.

hvis (isset ($ _ POST ['navn']) og&! tomt ($ _ POST ['navn']) og isset ($ _ POST ['passord']) &&! tomt ($ _ POST ['passord'])) $ brukernavn = mysql_escape_string ($ _ POST ['navn']); $ password = mysql_escape_string (md5 ($ _ POST ['passord'])); $ search = mysql_query ("SELECT brukernavn, passord, aktiv FRA brukere der. $ brukernavn." "OG. $ passord." "OG aktivt =" 1 "") eller dø (mysql_error ()); $ match = mysql_num_rows ($ søk); 

Vi skrev et MySQL-spørring som vil velge brukernavn, passord og aktiv informasjon fra vår database, hvis brukernavnet og passordet stemmer overens.
OG aktiv = "1" er! VIKTIG! Dette sørger for at du bare kan logge inn hvis kontoen din er aktivert. Vi bruker MySQL num-radene igjen for å se hvor mange kamper som er funnet.

hvis ($ match> 0) $ msg = 'Logg inn fullført! Takk'; // Angi informasjonskapsel / Startsesjon / Start nedlasting etc ... annet $ msg = 'Innlogging mislyktes! Vennligst vær sikker på at du skriver inn de riktige detaljene og at du har aktivert kontoen din. '; 

I koden ovenfor sjekker vi om innloggingen var en suksess eller ikke.


Slutten

Og det er slutten på denne opplæringen! Jeg håper du likte det, og hvis du gjorde det, vær så snill å legge igjen en kommentar nedenfor!