Registrazione con conferma email.

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Ciao a tutti inanzitutto vi volevo fare i complimenti per l'ottimo forum e per le risposte sempre rapide, a differenza di molti vostri forum "rivale".
Vi espongo subito il mio problema allora io ho trovato degli script gia pronti per la registrazione con email di conferma e li ho copiati nel mio sito. Il processo funziona benissimo fino a quando non vado a attivare l'account tramite email.Mi spiego meglio mi arriva l'email con il link di conferma ci clicco ma mi stampa un messagio di errore.
Vi le 2 pagine di script che a mio conto sono colpevoli:
La prima:
PHP:
<?php
 
class NewUser
{
	public $conn;
 
		public function AddUser()
		{
			$this->ErrorReport();
		}
 
		protected function DbConnect()
		{
			include "db_config.php";
 
			$this->conn = mysql_connect($host,$user,$password) OR die("Impossibile connettersi al database");
			mysql_select_db($db, $this->conn);
		}
 
		protected function IsEmptyField()
		{
			if(empty($_POST['username']) OR empty($_POST['email']) OR empty($_POST['password']))
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
		}
 
		protected function VerifyPassword()
		{
			if($_POST['password'] == $_POST['password2'])
			{
				return TRUE;
			}
			else
			{
				return FALSE;
			}
		}
 
		protected function UsernameExists()
		{
			$this->DbConnect();
			$sql = "SELECT username FROM users WHERE username='$_POST[username]'";
			$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 * FROM users 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->UsernameExists())
			{
				$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[username],\r\n";
			$content .= "per confermare la tua iscrizione devi cliccare sul seguente link:\r\n\r\n";
			$content .= "http://laemmeallapi.altervista.org/ProvasitoNontoccare/Script/verify_user.php?key=" . $key;
 
			mail($_POST['email'], "Iscrizione al sito...", $content, "From: io<miomail@me.com>");
 
			return;
		}
 
		protected function InsertNewUser()
		{
			$password = md5($_POST['password']);
			$key_control = $this->GetKey();
 
			$sql = "INSERT INTO users (username,email,password,key_control) VALUES ('$_POST[username]','$_POST[email]','$password','$key_control')";
 
			$this->DbConnect();
 
			mysql_query($sql,$this->conn);
 
			mysql_close($this->conn);
 
			$this->SendUserMail($key_control);
		}
 
		public function VerifyUser()
		{
			$sql = "SELECT id FROM users WHERE key_control='$_GET[key]'";
			$this->DbConnect();
			$res = mysql_query($sql,$this->conn);
 
			if($row = mysql_fetch_array($res))
			{
				$query = "UPDATE users 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!";
			}
		}
}
 
?>
e la secondo ma credo che non sia lei la colpevole dell errore:

PHP:
<?php
 
require_once 'newuser.class.php';
 
$newuser = new NewUser();
$newuser->VerifyUser();
 
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
potresti modificare il metodo VerifyEmail() usando filter_var() al posto di ereg()
PHP:
protected function VerifyEmail() {

        if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            return true;
        }
        return false;
    }
 

marino51

Utente Attivo
28 Feb 2013
2.895
157
63
Lombardia
bisognerebbe vedere il codice che utilizza la classe NewUser per inviare la mail
in ogni caso chi fa tutto è il seguente codice
PHP:
        protected function InsertNewUser() 
        { 
            $password = md5($_POST['password']); 
            $key_control = $this->GetKey(); 
  
            $sql = "INSERT INTO users (username,email,password,key_control) VALUES ('$_POST[username]','$_POST[email]','$password','$key_control')"; 
  
            $this->DbConnect(); 
  
            mysql_query($sql,$this->conn); 
  
            mysql_close($this->conn); 
  
            $this->SendUserMail($key_control); 
        }
prova ad inserire dei "var_dump" per verificare che "$key_control" sia generato correttamente
ciao
Marino
 

Dylan VDj Canziani

Nuovo Utente
26 Mar 2015
11
0
0
bisognerebbe vedere il codice che utilizza la classe NewUser per inviare la mail
in ogni caso chi fa tutto è il seguente codice
PHP:
        protected function InsertNewUser() 
        { 
            $password = md5($_POST['password']); 
            $key_control = $this->GetKey(); 
  
            $sql = "INSERT INTO users (username,email,password,key_control) VALUES ('$_POST[username]','$_POST[email]','$password','$key_control')"; 
  
            $this->DbConnect(); 
  
            mysql_query($sql,$this->conn); 
  
            mysql_close($this->conn); 
  
            $this->SendUserMail($key_control); 
        }
prova ad inserire dei "var_dump" per verificare che "$key_control" sia generato correttamente
ciao
Marino
ho trovato l'errore,,,, avevo tranciato un pezzo di codice io... mancava
PHP:
$key_control = $this->GetKey(40);
 

marino51

Utente Attivo
28 Feb 2013
2.895
157
63
Lombardia
ho trovato l'errore,,,, avevo tranciato un pezzo di codice io... mancava
PHP:
$key_control = $this->GetKey(40);
avevi modificato altro perché il codice che hai postato non prevedeva nessun parametro nella generazione della chiave
PHP:
protected function GetKey() { 
            $car = "aAbBcCdDeEfFgGhHiIlLjJkKmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789"; 
            $dim = 40;