Scritp invio email convalida indirizzo

  • Creatore Discussione Creatore Discussione james81
  • Data di inizio Data di inizio

james81

Utente Attivo
14 Set 2010
72
0
0
Salve a tutti!,

ho creato un form di registrazione, ora vvorei inviare un'email all'indirizzo di registrazione con un link per conferma.

Potete consigliarmi qualche risorsa dove poter trovare o vedere come eseguire ciò?

Grazie
 
ciao
vuoi:
all'iscrizione andata a buon fine che arrivi a chi si è iscritto solo l'avviso di iscrizione
oppure
la classica email con scritto "...per confermare la tua iscrizione clicca qui..."
i due casi sono differenti come impostazione, per il secondo ci vogliono diversi controlli.
comunque per inviare l'email, in entrambi, usa la classe phpmailler (https://www.mrw.it/php/inviare-email-classe-phpmailer_7047.html)
 
si infatti quello che vorrei fare è inviare la classica email con scritto "...per confermare la tua iscrizione clicca qui... "
 
Un soluzione (fatta in casa) potrebbe riguarda la realizzazione di un stringa numerica ad associare all'utente.

Mi spiego:
- nella tabella utenti potresti inserire qualcosa tipo: user - code
dove user è l'username dell'utente e code e quello da te generato per quell'utente.
- per generare il codice potresti usare qualcosa del tipo dataordierna_oraattuale_sequenzanumericarandom

Nel link di convalida passa l'username e il code generato, all'apertura della pagina dedicata verifichi se le due voci corrispondono ed eventualmente attivi l'account.
:byebye:
 
ciao
io farei così schematicamente (leggi i commenti)
1) tabella utenti
id int(11) autoincrement primarykey
username varchar(50)
password varchar(50)//come minimo codificata con sha1
email varchar(50)
conferma set('s', 'n') default 'n'//s= confermato - n= non confermato
e altri campi che eventualmete ti servono
2) tabella provvisoria
id int(6) autoincrement primarykey
id_utente int(11)
codice varchar(50)
poi nella pagina iscrizione (tralascio alcune cose come l'esecuzione delle query...)
PHP:
<?php
//....
//guarda che non metto i controlli
$user=$_POST['username'];
$pass=$_POST['password'];
$email=$_POST['email'];
//fai l'inserimento di dati in tabella utenti
$query="INSERT INTO utenti(username,password,email,conferma) VALUES('$user','$password','$email', 'n'";
//nota il campo conferma è messo a n = non confermato
//a questo punto leggi l'id dellutente
$id_inserito=mysqli_insert_id($link);
//generi un numero casula e lo codifichi
$codice=sha1(rand(10000,99999));//oppure $codice=sha1(time());
//i due valori li metti nella tabella provvisoria
$query="INSERT INTO provvisoria(id_utente, codice) VALUES ($id_inserito, '$codice')";
//e prpari il testo dell'email
$testo="ciao $user, per confermare la tua iscrizione clicca <a href=\"http://www.tuo_sito.it/conferma.php?cod=$codice\">qui</a>";
//e la invii all'indirizzo email dell'utente
?>
poi ti fai la pagina conferma.php
PHP:
<?php
$codice=addslashes($_GET['cod']);
//cerchi nella tabella provvisoria
$query="SELECT id_utente FROM provvisoria WHERE codice=$codice";
//estrai l'id_utente
//uppi la tabella utenti
$query="UPDATE utenti SET conferma='s' WHERE id=$id_utente";
//elimini il record nella provvisoria che non serve più
//e riinvii dove ti pare, es. alla index
header('location=index.php');
?>
conviene che la pg conferma.php sia una pagina solo di php, senza doctipe e altro html e non deve essere lincata nel sito
 
si alla fine avevo pensato pure io una cosa del genere, ma utilizzando una tabella sola, dove aggiungo inserisco l'utente e campo "codice" e poi una volta verificato il link attivo direttamente l'uente, così risparmio una tabella
 
ciao
si è possibile, però per la sicurezza è meglio averne due, qualche maleintenzionato può accedendo alla tabella utenti arrivare a leggere le pass e gli altri dati
 
ciao
si è possibile, però per la sicurezza è meglio averne due, qualche maleintenzionato può accedendo alla tabella utenti arrivare a leggere le pass e gli altri dati

Effettivamente, è un'ottima idea.

BorgoItalia, quindi con
PHP:
//generi un numero casula e lo codifichi 
$codice=sha1(rand(10000,99999));
il codice è sempre univoco, vero?

Grazie.
 
ciao
praticamente si univoci, anche se esiste la possibilità (remota) di averne due uguali
con quel rand tu generi un numero a caso "scelto" tra 10000 e 99999 cioè tra 89999 numeri
quindi la probabilità di avere un certo numero è 1/89999 quindi è quasi impossibile avere due codici uguali (anche perchè vado ad eliminare il record in provvisoria)
se vuoi aumentare comunque la sicurezza di non averne uguali puoi o
aumentare l'intevallo 1000000 999999
o
usare time(), è estremamente difficle che due utenti si iscrivane nello stesso secondo
o
microtime() andando a leggere il tempo espresso in millisecondi
o
mt_rand()
cioè i sistemi sono molti

ultimo:
ti crei una funzione per la generazione che faccia:
1. genera il numero casuale
2. verifica sulla provvisoria se esite
3. esiste SI: ne genera un altro
4. esiste NO: return codice
si intende sempre codificati md5 o sha1 o altro
 
perfetto....ho fatto come consigliato e tutto funziona perfettamente,

ora volevo un consgilio: nel mio form volevo creare dei campi richiesti, magari anche un controllo per la password e verificare se tipo il nome utente e password già esistono a mano mano che li inserisco.

Grazie
 

Discussioni simili