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<info@xxxxxx.it>");
 
			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?
 
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);
 
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?
 
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
 
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..
 
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:
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