Hai mai creato un account con un sito web e ti è stato richiesto di controllare la tua email e fare clic su un link di verifica inviato dalla società per attivarlo? Così facendo si riduce il numero di account spam. In questa lezione impareremo come fare questa cosa!
Questo tutorial ti insegna a creare uno script di verifica della posta da zero, ma se vuoi qualcosa che puoi usare sul tuo sito web, controlla Email Verifica sul mercato Envato.
Email Verify è uno script PHP che ti consente di verificare gli indirizzi e-mail senza memorizzare nulla in nessun database. Invierà agli utenti un'email che richiede loro di fare clic su un collegamento per verificare la loro e-mail prima che la loro e-mail sia aggiunta a qualsiasi cosa tu voglia aggiungere.
Email Verifica sul mercato EnvatoCreeremo un bel script di iscrizione PHP in cui un utente può creare un account per accedere a una "sezione membri" di un sito web.
Dopo che l'utente ha creato il suo account, l'account verrà bloccato fino a quando l'utente non farà clic su un link di verifica che riceverà nella sua casella di posta elettronica.
Per prima cosa abbiamo bisogno di una semplice pagina in cui i nostri visitatori possono iscriversi ai loro account; quindi questa è la prima cosa che costruiremo.
Vorrei ricordarti che questo è un tutorial PHP e, a mio parere, penso che tu abbia bisogno di conoscere le basi dell'HTML prima di passare a PHP. Aggiungerò commenti a HTML e CSS per descrivere ogni riga di codice.
index.php - Questa è la nostra pagina di registrazione con un modulo di base.
NETTUTS> Iscriviti NETTUTS> Iscriviti
Iscriviti al modulo
Inserisci il tuo nome e indirizzo email per creare il tuo account
css / style.css - Questo è un foglio di stile per index.php e altre pagine.
/ * Stili globali * / * padding: 0; / * Ripristina tutto il padding a 0 * / margine: 0; / * Ripristina tutto il margine su 0 * / body background: # F9F9F9; / * Imposta colore di sfondo HTML * / carattere: 14px "Lucida Grande"; / * Imposta dimensione carattere globale e famiglia * / colore: # 464646; / * Imposta colore testo globale * / p margine: 10px 0px 10px 0px; / * Aggiungi un po 'di padding nella parte superiore e inferiore deltags * / / * Header * / #header height: 45px; / * Imposta altezza intestazione * / sfondo: # 464646; / * Imposta colore di sfondo dell'intestazione * / #header h3 color: # FFFFF3; / * Imposta intestazione intestazione (titolo in alto a sinistra) colore * / padding: 10px; / * Imposta padding, per centrarlo all'interno dell'intestazione * / font-weight: normal; / * Imposta il peso del carattere su normale, default è stato impostato su grassetto * / / * Wrap * / #wrap background: #FFFFFF; / * Imposta lo sfondo del contenuto su bianco * / larghezza: 615px; / * Imposta la larghezza della nostra area di contenuto * / margine: 0 auto; / * Centra il nostro contenuto nel nostro browser * / margin-top: 50px; / * Margine in alto per creare spazio tra l'intestazione e il contenuto * / padding: 10px; / * Riempimento per aumentare lo spazio per il nostro testo * / border: 1px solid #DFDFDF; / * Bordo piccolo per il tocco finale * / allineamento del testo: centro; / * Centra il testo del contenuto * / #wrap h3 font: italic 22px Georgia; / * Imposta il font per la nostra intestazione 2 che verrà visualizzato nel nostro wrap * / / * Form & Input field styles * / form margin-top: 10px; / * Fai una maggiore distanza dal testo della descrizione * / forma .submit_button background: # F9F9F9; / * Imposta lo sfondo del pulsante * / bordo: 1px solid #DFDFDF; / * Piccolo bordo attorno al pulsante di invio * / padding: 8px; / * Aggiungi un po 'più di spazio attorno al testo del pulsante * / input font: normale 16px Georgia; / * Imposta il carattere per i nostri campi di input * / border: 1px solid #DFDFDF; / * Piccolo bordo attorno al campo di input * / padding: 8px; / * Aggiungi un po 'di spazio attorno al nostro testo * /
Come puoi vedere, ho aggiunto un commento a ciascuna riga che descrive ciò che fanno. Inoltre, potresti aver notato il seguente commento nel file index.php:
Scriveremo il nostro PHP tra queste 2 linee!
La prima cosa che costruiremo è una porzione di codice che convaliderà le informazioni. Ecco una breve lista che spiega cosa deve essere fatto.
Quindi il nostro primo passo è verificare se il modulo è stato inviato e che i campi non sono vuoti.
Tempo per un guasto! Iniziamo con una dichiarazione IF e stiamo prima convalidando il campo del nome:
if () // If statement is true run codice tra parentesi isset ($ _ POST ['name']) // Il campo nome viene inviato; non importa se è vuoto o pieno. && // Questo è lo stesso di AND nella nostra dichiarazione; ti permette di controllare più affermazioni. ! empty ($ _ POST ['name']) // Verifica se il nome del campo non è vuoto isset ($ _ POST ['email']) // Il campo email viene inviato; non importa se è vuoto o pieno. && // Questo è lo stesso di AND nella nostra dichiarazione; ti permette di controllare più affermazioni. ! empty ($ _ POST ['email']) // Verifica se il campo email non è vuoto
Quindi se invii il modulo ora con i campi vuoti, non succede nulla. Se compili entrambi i campi, il nostro script eseguirà il codice tra parentesi.
Ora stiamo per creare un codice che verificherà se un indirizzo email è valido. In caso contrario, restituiremo un errore. Trasformiamo anche le nostre variabili post in variabili locali:
if (isset ($ _ POST ['nome']) &&! vuoto ($ _ POST ['nome']) AND isset ($ _ POST ['email']) &&! vuoto ($ _ POST ['email'])) $ nome = mysql_escape_string ($ _ POST ['nome']); // Trasforma il nostro post in una variabile locale $ email = mysql_escape_string ($ _ POST ['email']); // Trasforma il nostro post in una variabile locale
Ora possiamo raggiungere i nostri dati tramite le nostre variabili locali. Come puoi vedere, ho anche aggiunto una stringa di escape MySQL per impedire l'iniezione di MySQL quando inserisci i dati nel database MySQL.
"La funzione mysql_real_escape_string () sfugge caratteri speciali in una stringa da utilizzare in un'istruzione SQL."
Il prossimo è un piccolo snippet che controlla se l'indirizzo email è valido.
$ name = mysql_escape_string ($ _ POST ['name']); $ email = mysql_escape_string ($ _ POST ['email']); if (eregi ( "^ [_ a-z0-9 -]! + (\ [_ a-z0-9 -]. +) * @ [a-z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ email)) // Restituisci errore - Email non valida else // Restituisci successo - Email valida
Nota che non ho scritto personalmente questa espressione regolare, è un piccolo frammento di php.net.
Fondamentalmente, verifica se l'email è scritta nel seguente formato:
[email protected]
Ora in eregi, puoi vedere che controlla se l'e-mail contiene caratteri dell'alfabeto, se ha numeri o un trattino phantom (_), e ovviamente i requisiti di base per un'email (e-mail) '@' e un punto)'.' Se nessuno di questi caratteri viene trovato, l'espressione restituisce "false". Ok, quindi ora dobbiamo aggiungere alcuni messaggi di errore di base.
if (eregi ( "^ [_ a-z0-9 -]! + (\ [_ a-z0-9 -]. +) * @ [a-z0-9 -]. + (\ [a-z0-9- ] +) * (\. [az] 2,3) $ ", $ email)) // Errore restituito - Email non valida $ msg = 'L'e-mail inserita non è valida, per favore riprova.'; else // Return Success - Valid Email $ msg = 'Il tuo account è stato creato,
per favore verificalo facendo clic sul link di attivazione che è stato inviato alla tua email. ';
Come puoi vedere abbiamo creato una variabile locale "$ msg", questo ci permette di mostrare l'errore o il messaggio di successo ovunque nella pagina.
E lo mostreremo tra il testo dell'istruzione e il modulo.
Iscriviti al modulo
Inserisci il tuo nome e indirizzo email per creare il tuo account
'$ Msg.'
Aggiungi questo a style.css, per modellare un po 'il nostro messaggio di stato.
#wrap .statusmsg font-size: 12px; / * Imposta la dimensione del carattere del messaggio * / padding: 3px; / * Alcuni padding per aumentare lo spazio per il nostro testo * / background: #EDEDED; / * Aggiungi un colore di sfondo al nostro messaggio di stato * / border: 1px solid #DFDFDF; / * Aggiungi un bordo vicino al nostro messaggio di stato * /
Ora dobbiamo stabilire una connessione al database e creare una tabella per inserire i dati dell'account. Quindi andiamo su PHPMyAdmin e creiamo un nuovo database con il nome iscrizioni e creare un account utente che abbia accesso a quel database per inserire e aggiornare i dati.
Creiamo il nostro utenti tabella, con 5 campi:
Quindi ora dobbiamo inserire i dettagli per questi campi:
Per coloro che non vogliono inserire questi dati manualmente, è possibile invece eseguire il seguente codice SQL.
CREATE TABLE 'users' ('id' INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY, 'username' VARCHAR (32) NOT NULL, 'password' VARCHAR (32) NOT NULL, 'email' TESTO NON NULL, 'hash' VARCHAR (32) NOT NULL, 'attivo' INT (1) NOT NULL DEFAULT '0') MOTORE = MYISAM;
Il nostro database è stato creato, ora abbiamo bisogno di stabilire una connessione usando PHP. Scriveremo il seguente codice all'inizio del nostro script appena sotto la riga seguente:
Useremo il seguente codice per connetterci al server del database e selezionare il iscrizioni Banca dati. (connessione MySQL di base)
mysql_connect ("localhost", "username", "password") o die (mysql_error ()); // Connetti al server di database (localhost) con nome utente e password. mysql_select_db ("registrazioni") o die (mysql_error ()); // Seleziona il database delle registrazioni.Ora che abbiamo stabilito una connessione al nostro database, possiamo passare al passaggio successivo e inserire i dettagli dell'account.
Passaggio 4: inserire l'account
Ora è il momento di inserire i dettagli dell'account inviato nel nostro database e generare un hash di attivazione. Scrivi il seguente codice sotto questa riga:
// Return Success - Valid Email $ msg = 'Il tuo account è stato creato,
per favore verificalo facendo clic sul link di attivazione che è stato inviato alla tua email. ';Hash di attivazione
Nel nostro database abbiamo creato un campo chiamato hash, questo hash è una stringa di testo di 32 caratteri. Inviamo anche questo codice all'indirizzo email dell'utente. Possono quindi fare clic sul collegamento (che contiene l'hash) e verificheremo se corrisponde a quello presente nel database. Creiamo una variabile locale chiamata $ hash e genera un hash md5 casuale.
$ hash = md5 (rand (0,1000)); // Generare un hash casuale di 32 caratteri e assegnarlo a una variabile locale. // Esempio di output: f4552671f8909587cf485ea990207f3bCosa abbiamo fatto? Bene, stiamo usando la funzione PHP "rand" per generare un numero casuale compreso tra 0 e 1000. Successivamente la nostra funzione MD5 trasformerà questo numero in una stringa di testo di 32 caratteri che useremo nella nostra email di attivazione. La mia scelta è di usare MD5, perché genera un hash di 32 caratteri che è sicuro e, in questo caso, impossibile da decifrare.
Creazione di una password casuale
La prossima cosa che dobbiamo fare è creare una password casuale per il nostro membro:
$ password = rand (1000,5000); // Genera numeri casuali tra 1000 e 5000 e assegnali a una variabile locale. // Esempio di output: 4568Inserire le seguenti informazioni nel nostro database utilizzando una query MySQL
mysql_query ("INSERISCI NEGLI utenti (nome utente, password, email, hash) VALUES ('". mysql_escape_string ($ name). "', '". mysql_escape_string (md5 ($ password)). "', '". mysql_escape_string ($ email). "','". mysql_escape_string ($ hash). "')") o die (mysql_error ());Come puoi vedere, inseriamo tutti i dati con una stringa di fuga MySQL attorno ad esso per evitare qualsiasi iniezione MySQL.
Si potrebbe anche notare che la funzione MD5 cambia la password casuale in un hash sicuro per la protezione. Esempio: se una persona "cattiva" ottiene l'accesso al database, non può leggere le password.Per il test, compilare il modulo e verificare se i dati vengono inseriti nel nostro database.
Passaggio 5: inviare l'e-mail di verifica
Subito dopo aver inserito le informazioni nel nostro database, abbiamo bisogno di inviare una e-mail all'utente con il link di verifica. Quindi usiamo la funzione "mail" di PHP per fare proprio questo.
$ a = $ email; // Invia email al nostro utente $ oggetto = 'Registrati | Verifica'; // Dai alla mail un oggetto $ message = 'Grazie per esserti iscritto! Il tuo account è stato creato, puoi accedere con le seguenti credenziali dopo aver attivato il tuo account premendo l'url qui sotto. ------------------------ Nome utente: '. $ Name.' Password: ". $ Password". ------------------------ Si prega di fare clic su questo link per attivare il tuo account: http://www.yourwebsite.com/verify.php?email= ' . $ email. '& hash ='. $ hash. "; // Il nostro messaggio sopra incluso il link $ headers = 'Da: [email protected]'." \ r \ n "; // Impostato dalla posta delle intestazioni ($ a, $ subject, $ message, $ headers); // Invia la nostra emailOra abbassiamo il messaggio:
Grazie per esserti iscritto! Il tuo account è stato creato, puoi accedere con le seguenti credenziali dopo aver attivato il tuo account premendo l'url qui sotto. ------------------------ Nome utente: '. $ Name.' Password: ". $ Password". ------------------------Nel codice precedente inviamo una breve descrizione al nostro utente che contiene nome utente e password - utilizzando le variabili locali che abbiamo creato quando i dati sono stati pubblicati.
Fai clic su questo link per attivare il tuo account: http://www.yourwebsite.com/verify.php?email='.$email.'&hash='.$hash. 'In questa sezione del codice, abbiamo creato un collegamento dinamico. Il risultato di questo sarà simile a questo:
Come puoi vedere, crea un URL solido, impossibile da indovinare. Questo è un modo molto sicuro per verificare l'indirizzo email di un utente.
Passaggio 6: Attivazione dell'account
Come puoi vedere, il nostro link url a verify.php quindi creiamo quello, usando lo stesso modello base che abbiamo usato per index.php.
Tuttavia, rimuovere il modulo dal modello.NETTUTS> Iscriviti NETTUTS> Iscriviti
La prima cosa che dobbiamo fare è controllare se abbiamo le nostre variabili $ _GET (email e hash)
if (isset ($ _ GET ['email']) &&! vuoto ($ _ GET ['email']) AND isset ($ _ GET ['hash']) &&! vuoto ($ _ GET ['hash'])) / / Verifica dati altro // approccio non validoPer rendere le cose un po 'più semplici, assegniamo le nostre variabili locali e aggiungiamo qualche prevenzione per l'iniezione di MySQL, ancora una volta, usando la stringa di escape MySQL.
if (isset ($ _ GET ['email']) &&! vuoto ($ _ GET ['email']) AND isset ($ _ GET ['hash']) &&! vuoto ($ _ GET ['hash'])) / / Verifica dati $ email = mysql_escape_string ($ _ OTTIENI ['email']); // Imposta la variabile email $ hash = mysql_escape_string ($ _ GET ['hash']); // Imposta la variabile hashLa prossima è controllare i dati dall'URL rispetto ai dati nel nostro database usando una query MySQL.
$ search = mysql_query ("SELEZIONA email, hash, attivo da utenti DOVE. $ email." "AND. $ hash." "AND active =" 0 "") o die (mysql_error ()); $ match = mysql_num_rows ($ search);Nel codice sopra, abbiamo usato un'istruzione select MySQL e controllato se l'e-mail e l'hash corrispondono. Oltre a ciò, abbiamo verificato se lo stato dell'account è "inattivo". Infine, usiamo mysql_num_rows per determinare quante corrispondenze sono state trovate. Quindi proviamolo. Basta usare un semplice eco per restituire i risultati.
$ search = mysql_query ("SELEZIONA email, hash, attivo da utenti DOVE. $ email." "AND. $ hash." "AND active =" 0 "") o die (mysql_error ()); $ match = mysql_num_rows ($ search); echo $ match; // Mostra quante corrispondenze sono state trovate -> rimuovi questo quando viene eseguito con i test;)Noi abbiamo un INCONTRO! Per cambiare il risultato, cambia semplicemente l'email e vedrai che il numero restituito è 0.
Possiamo usare il nostro $ partita variabile per attivare l'account o restituire un errore quando non è stata trovata alcuna corrispondenza.if ($ match> 0) // Abbiamo una corrispondenza, attiva l'account else // No match -> url o account non valido è già stato attivato.Per attivare l'account, dobbiamo aggiornare il attivo campo su 1 utilizzando una query MySQL.
// Abbiamo una corrispondenza, attivare l'account mysql_query ("UPDATE users SET active =" 1 "WHERE. $ Email." "AND. $ Hash." "AND active =" 0 "") o die (mysql_error ()) ; eco 'Il tuo account è stato attivato, ora puoi effettuare il login';Quindi usiamo gli stessi termini di ricerca per l'aggiornamento utilizzati nella nostra query di selezione MySQL. Cambiamo attivo in 1 dove email, hash e campo attivi = 0 corrispondono. Restituiamo anche un messaggio che informa l'utente che il suo account è stato attivato. Puoi aggiungere un messaggio come quello che abbiamo fatto qui alla parte "nessuna corrispondenza". Quindi il codice finale dovrebbe assomigliare a:
mysql_connect ("localhost", "tutorial", "password") o die (mysql_error ()); // Connetti al server di database (localhost) con nome utente e password. mysql_select_db ("registrazioni") o die (mysql_error ()); // Seleziona il database di registrazione. if (isset ($ _ GET ['email']) &&! vuoto ($ _ GET ['email']) AND isset ($ _ GET ['hash']) &&! vuoto ($ _ GET ['hash'])) / / Verifica dati $ email = mysql_escape_string ($ _ OTTIENI ['email']); // Imposta la variabile email $ hash = mysql_escape_string ($ _ GET ['hash']); // Imposta la variabile hash $ search = mysql_query ("SELEZIONA email, hash, attiva dagli utenti DOVE. $ Email." "AND. $ Hash." "AND active =" 0 "") o die (mysql_error ()); $ match = mysql_num_rows ($ search); if ($ match> 0) // Abbiamo una corrispondenza, attivare l'account mysql_query ("UPDATE users SET active =" 1 "WHERE. $ email." "AND. $ hash." "AND active =" 0 "" ) o die (mysql_error ()); eco 'Il tuo account è stato attivato, ora puoi effettuare il login'; else // No match -> url o account non validi sono già stati attivati. eco 'L'URL non è valido o hai già attivato il tuo account.'; else // approccio non valido echo 'Approccio non valido, si prega di utilizzare il link che è stato inviato alla tua email.';Se tu visiti verify.php senza stringhe, verrà mostrato il seguente errore:
Passaggio 7: accesso
In questo ultimo passaggio, ti mostrerò come creare un modulo di accesso di base e verificare se l'account è attivato. Prima crea un nuovo file chiamato login.php con il modello base che abbiamo usato prima, ma questa volta ho cambiato il modulo in un modulo di login.
NETTUTS> Iscriviti NETTUTS> Iscriviti
'; // Visualizza il nostro messaggio e aggiungi un div intorno ad esso con lo statusmsg di classe?>Modulo di accesso
Inserisci il tuo nome e password per accedere
'$ Msg.'
Il modulo è html di base e quasi lo stesso del modulo di registrazione, non è necessaria alcuna ulteriore spiegazione. Ora è il momento di scrivere il codice per lo script di accesso, che scriveremo appena sotto il codice di connessione MySQL. Iniziamo con qualcosa che abbiamo anche fatto nel modulo di registrazione.
if (isset ($ _ POST ['nome']) &&! vuoto ($ _ POST ['nome']) AND isset ($ _ POST ['password']) &&! vuoto ($ _ POST ['password'])) / / Entrambi i campi sono stati pubblicati e non ci sono vuoti
Quindi per prima cosa controlliamo se i dati vengono inviati e ci assicuriamo che non sia vuoto.
La prossima è creare alcune variabili locali per i dati del post:
if (isset ($ _ POST ['nome']) &&! vuoto ($ _ POST ['nome']) AND isset ($ _ POST ['password']) &&! vuoto ($ _ POST ['password'])) $ username = mysql_escape_string ($ _ POST ['name']); // Imposta variabile per il nome utente $ password = mysql_escape_string (md5 ($ _ POST ['password'])); // Imposta la variabile per la password e convertila in un hash MD5.
Abbiamo creato le variabili locali e modificato la password in un hash md5 per abbinarlo con l'hash della password che abbiamo memorizzato nel database.
Ora è il momento di creare la connessione alla nostra tabella "utenti" e verificare se i dati inseriti sono corretti.
if (isset ($ _ POST ['nome']) &&! vuoto ($ _ POST ['nome']) AND isset ($ _ POST ['password']) &&! vuoto ($ _ POST ['password'])) $ username = mysql_escape_string ($ _ POST ['name']); $ password = mysql_escape_string (md5 ($ _ POST ['password'])); $ search = mysql_query ("SELEZIONA nome utente, password, utenti attivi DA DOVE. $ username." "AND. $ password." "AND active =" 1 "") o die (mysql_error ()); $ match = mysql_num_rows ($ search);
Abbiamo scritto una query MySQL che selezionerà il nome utente, la password e le informazioni attive dal nostro database, se il nome utente e la password coincidono.
AND active = "1" è! IMPORTANTE !, questo assicura che è possibile accedere solo se il tuo account è attivato. Usiamo nuovamente le righe num di MySQL per vedere quante corrispondenze sono state trovate.
if ($ match> 0) $ msg = 'Login completato! Grazie'; // Imposta cookie / Avvia sessione / Avvia download ecc. Else $ msg = 'Accesso fallito! Assicurati di inserire i dettagli corretti e di aver attivato il tuo account. ';
Nel codice sopra, controlliamo se l'accesso è stato un successo o meno.
E questa è la fine di questo tutorial! Spero ti sia piaciuto, e se lo hai fatto per favore lascia un commento qui sotto!