Form Registrazione con conferma via email - problema

Dylan VDj Canziani

Nuovo Utente
26 Mar 2015
11
0
0
buongiorno a tutti! ho creato seguendo i vari tutorial un modulo registrazione utenti con conferma via email! I dati vengono salvati su un DB mysql.

Il problema è che quando arriva l'email per la verifica della registrazione, cliccando sul link dice sempre "impossibile verificare l'account" vi posto il codice magari qualcuno più esperto mi sa dare una dritta;

PHP:
<?php
 
class NewUser
{
	public $conn;
 
		public function AddUser()
		{
			$this->ErrorReport();
		}
 
		protected function DbConnect()
		{
			include "db_con.php";
 
			$this->conn = mysql_connect('xxxxxx', 'xxxxx', 'xxxxxxxx') OR die("Impossibile connettersi al database");
			mysql_select_db($db, $this->conn);
		}
 
		protected function IsEmptyField()
		{
			if(empty($_POST['nome']) OR empty($_POST['cognome']) OR empty($_POST['email']))
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
		}
 
 
	
		protected function nomeExists()
		{
			$this->DbConnect();
			$sql = "SELECT nome FROM iscrizione WHERE nome='$_POST[nome]'";
			$res = mysql_query($sql, $this->conn);
			if($row = mysql_fetch_array($res))
			{
				mysql_close($this->conn);
				return TRUE;
			}
			else
			{
				mysql_close($this->conn);
				return FALSE;
			}
		}
 
		protected function EmailExists()
		{
			$this->DbConnect();
			$sql = "SELECT email FROM iscrizione WHERE email='$_POST[email]'";
 
			$res = mysql_query($sql, $this->conn);
			if($row = mysql_fetch_array($res))
			{
				mysql_close($this->conn);
				return TRUE;
			}
			else
			{
				mysql_close($this->conn);
				return FALSE;
			}
		}
 
		protected function VerifyEmail()
		{
			$pattern = "^([a-zA-Z0-9])+([a-zA-Z0-9]+[-_\.]?)*([a-zA-Z0-9])+(@)([a-zA-Z0-9])+([a-zA-Z0-9]+[-_\.]?)*([a-zA-Z0-9])+(\.[a-z]{2,4})$";
 
			if(ereg($pattern,$_POST['email']))
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
		}
 
		public function ErrorResult($num)
		{
			header("Location: form.php?alert=" . $num);
			die;
		}
 
		protected function ErrorReport()
		{
			if($this->IsEmptyField())
			{
				$this->ErrorResult(1);
			}
 
			/*if(!$this->VerifyPassword())
			{
				$this->ErrorResult(2);
			}*/
 
			if($this->nomeExists())
			{
				$this->ErrorResult(3);
			}
 
			if($this->emailExists())
			{
				$this->ErrorResult(4);
			}
			if(!$this->VerifyEmail())
			{
				$this->ErrorResult(5);
			}
 
			$this->InsertNewUser();
 
		}
	protected function GetKey() 
        { 
            $car = "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"; 
            $dim = 40; 
            srand((double)microtime()*1000000); 
			$string = ''; 
  
                for($inc=0; $inc<$dim; $inc++) 
                { 
                    $rand = rand(0, strlen($car)-1); 
                    $scar = substr($car, $rand, 1); 
                    $string = $string . $scar; 
                } 
  
            return 
			$string; 
        } 
 
		protected function SendUserMail ($key)
		{
			$content .= "Benvenuto $_POST[nome],\r\n";
			$content .= "Questi sono i tuoi dati di registrazione, \r\n\r\n" ;
			$content .="Nome: $_POST[nome]\r\nCognome: $_POST[cognome] \r\nCellulare: $_POST[cell]\r\nEmail: $_POST[email] \r\n\r\n";
			$content .= "per confermare la tua iscrizione devi cliccare sul seguente link:\r\n\r\n";
			$content .= "http://www.zxxxxxxx.it/registration/verify_user.php?key=" . $key;
			mail($_POST['email'], "Iscrizione al sito...", $content, "From: ZeeroStress<[email protected]>");
 
			return;
		}
 
		protected function InsertNewUser()
		{
			$password = md5($_POST['password']);
			$key_control = $this->GetKey(40);
 
			$sql = "INSERT INTO iscrizione (username,passowrd,data,luogo,sesso,documento,numdoc,
			provnascita,città,rovincia,cf,residenza,provres,cap,address,civico,fax,cell,tel,email,note, key_control) 
			VALUES 
			('$nome', '$cognome', '$data', '$luogo', '$sesso', '$documento', '$numdoc', '$provnascita', '$città','$provincia', '$cf', '$residenza',
'$provres', '$cap', '$address', '$civico', '$fax', '$cell', '$tel', '$email', '$note', '$key_control')";
 
			$this->DbConnect();
 
			mysql_query($sql,$this->conn);
 
			mysql_close($this->conn);
 
			$this->SendUserMail($key_control);
		}
 
		public function VerifyUser()
		{
			$sql = "SELECT id FROM iscrizione WHERE key_control='$_GET[key]'";
			$this->DbConnect();
			$res = mysql_query($sql,$this->conn);
 
			if($row = mysql_fetch_array($res))
			{
				$query = "UPDATE iscrizione SET ver=1,key_control='0' WHERE id='$row[id]'";
				mysql_query($query,$this->conn);
				mysql_close($this->conn);
				echo "Il tuo account ora è attivato!";
			}
			else
			{
				echo "Impossibile verificare l'account!";
			}
		}
I campi sul Db sono presenti tutti, idem nel form.php... da cosa dipende?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
continua ad esserci l'incoerenza
PHP:
    protected function GetKey()  
        {  
            $car = "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789";  
            $dim = 40;  
            srand((double)microtime()*1000000);  


        protected function InsertNewUser() 
        { 
            $password = md5($_POST['password']); 
            $key_control = $this->GetKey(40);
 

Dylan VDj Canziani

Nuovo Utente
26 Mar 2015
11
0
0
continua ad esserci l'incoerenza
PHP:
    protected function GetKey()  
        {  
            $car = "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789";  
            $dim = 40;  
            srand((double)microtime()*1000000);  


        protected function InsertNewUser() 
        { 
            $password = md5($_POST['password']); 
            $key_control = $this->GetKey(40);

Ciao marino, scusami ma come dicevo sono un ignorantone :) cosa intendi per incoerenza?
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
la funzione GetKey() non prevede di ricevere nessun parametro quindi GetKey(40) è incongruo, a meno che, tu abbia fatto modifiche che non hai riportato nei tuoi post
 

otto9due

Utente Attivo
22 Feb 2014
590
25
28
Io ho usato lo stesso codice sul un sito fatto recentemente, diciamo che l'ho adattato alle mie esigenze, perchè a me serviva per una registrazione newsletter. Il codice funziona bene, almeno nel mio caso.. Hai creato le altre pagine che richiamano la classe come spiegato nella guida?
Il procedimento dovrebbe essere questo, lui crea questa stringa da 40 caratteri e la salva nel db con nome e cognome e un campo ver ( impostato di defoult a 0 ) e subito dopo manda la mail.. Quindi la corrispondenza dev'esserci sicuro..
Quando clicchi sul link in mail.. Si collega ad un'altra pag, ovvero verify_user.php e tramite il metodo VerifyUser() della classe da te postata verifica la corrispondenza tramite una ricerca nel db secondo quella stessa stringa da 40 caratteri se c'è imposta quella a 0 e ver ad 1..
Se hai la possibilità di entrare nel db vedi un pò se l'utente che ti crea problemi ha ancora ver a 0 e la stringa da 40 caratteri..
 

Dylan VDj Canziani

Nuovo Utente
26 Mar 2015
11
0
0
il db è vuoto. non è registrato nessun utente.. è quello che me stranisce. ho fatto tutto come nel tutorial. creato le pagine come descritto. la Mail di verifica arriva, ma, quando clicchi sul link di converma www.xxxxx.it/verify_user=1234567892222 mi da sempre " IMPOSSIBILE VERIFICARE L ACCOUNT"
 
Ultima modifica:

otto9due

Utente Attivo
22 Feb 2014
590
25
28
Allora credo che il problema risieda sul db, nel senso che non riesce a salvare i dati..
Secondo me hai fatto qualche casotto qui..

PHP:
protected function InsertNewUser() 
        { 
            $password = md5($_POST['password']); 
            $key_control = $this->GetKey(40); 
  
            $sql = "INSERT INTO iscrizione (username,passowrd,data,luogo,sesso,documento,numdoc, 
            provnascita,città,rovincia,cf,residenza,provres,cap,address,civico,fax,cell,tel,email,note, key_control)  
            VALUES  
            ('$nome', '$cognome', '$data', '$luogo', '$sesso', '$documento', '$numdoc', '$provnascita', '$città','$provincia', '$cf', '$residenza', 
'$provres', '$cap', '$address', '$civico', '$fax', '$cell', '$tel', '$email', '$note', '$key_control')"; 
  
            $this->DbConnect(); 
  
            mysql_query($sql,$this->conn); 
  
            mysql_close($this->conn); 
  
            $this->SendUserMail($key_control); 
        }

Primo correggi "rovincia "

Controlla che quando hai creato la tabella nel db, non hai messo che tutti i valori siano obbligatori. In questo caso se anche solo un valore risulta obbligatorio sul db e non lo inserisci, il db non prende nulla..

Cmq fino a quando il db ti risulta vuoto non potà verificare alcun utente..
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] Controllo nome utente form di registrazione PHP 4
X__WELBO__X [css] form registrazione utente HTML e CSS 9
P [PHP] come criptare una password in un form di registrazione PHP 4
F form registrazione PHP 3
F Codic e php visibile su form registrazione utenti PHP 2
L errore mysql per form di registrazione PHP 3
L Form di registrazione e log in. PHP 2
S Problemi form registrazione newsletter PHP 0
C Form registrazione Bootstrap PHP 0
C Form di registrazione personalizzato PHP 2
F script php form registrazione PHP 13
F Controlli form per Registrazione utenti PHP 9
S Memorizzare nome file allegato da form registrazione PHP 1
C Form login e registrazione aruba Hosting 7
A form registrazione + php + alert javascript Javascript 6
emanuelevt form per registrazione Javascript 2
C Cancellazione-Annulla Registrazione Dati appena Inseriti nel Form dall' Utente PHP 13
L Form Registrazione PHP 56
P Aiuto form registrazione utenti PHP 5
I Creare un form di registrazione PHP 7
B Form di registrazione Classic ASP 0
W Form di registrazione HTML e CSS 5
M problema form registrazione Classic ASP 1
S passare un valore da un form a un file .php con metodo post PHP 4
K Form che manda dati doppi PHP 1
K Problema form update PHP 2
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
K form Inserimento record mysql PHP 2
I Form con selettore HTML e CSS 0
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
D Form contatti non funzionante HTML e CSS 0
A Stampare dati da form PHP 8
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
I Form HTML e CSS 17
otto9due $_FILE non passa i dati dal form PHP 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
felino Form action costum e parametri in queryString WordPress 1
M Come recuperare molteplici input form PHP 1
M Collegamento tra form html e script php PHP 4
L form immagini per il database PHP 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L inserimento form dati multipli ? PHP 0
L Problemi form Pagina php HTML e CSS 3
Cosina Creare bottone delete in form upload PHP 5
Cosina Creare bottone delete in form upload PHP 1
D Devo far funzionare un form di contatti PHP 4

Discussioni simili