Ciao ragazzi, buongiorno.
Stavolta mi sa che ho bisogno di un genio...
Io ci sto provando da stamattina alle 8... seguo la logica, ma non va...
Sono partito da questo tutorial per creare un mio codice perchè quello del tutorial genera degli alert in caso di errore, e poi una volta trovato il primo errore non caga gli altri.
Io invece vorrei semplicemente che una volta eseguita la verifica tornasse alla pagina form e nell'URL comparissero gli errori in GET (si dice così?)... erempio:
sito.da/?page=reg&errnome=1&errcognome... ecc
In questo modo potrei creare delle condizioni in modo da aggiungere o togliere delle classi in css (per far diventare il bordino rosso sul campo errato ad esempio), e aggiungere del testo se errnome=1 (ad esempio)
Posto il codice:
Codice 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);
}
// controllo su NOME
protected function NomeCheck()
{
if(empty($_POST['nome']))
{
return TRUE;
}
else
{
return FALSE;
}
}
// controllo su COGNOME
protected function CognomeCheck()
{
if(empty($_POST['cognome']))
{
return TRUE;
}
else
{
return FALSE;
}
}
// controllo esistenza USERNAME
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;
}
}
// controllo USERNAME
protected function UsernameCheck()
{
if($_POST[username] == "")
{
return TRUE;
}
elseif(ereg("^[a-z0-9]{6,12}$",$_POST[username]))
{
if($this->UsernameExists())
{
return TRUE;
}
else{
return FALSE;
}
}
else{
return TRUE;
}
}
// controllo uguaglianza PASSWORD
protected function VerifyPassword()
{
if($_POST['password'] == $_POST['password2'])
{
return TRUE;
}
else
{
return FALSE;
}
}
// controllo PASSWORD
protected function PasswordCheck()
{
if($_POST[password] == "")
{
return TRUE;
}
elseif(ereg("^[a-zA-Z0-9]{6,12}$",$_POST[password]))
{
if(!$this->VerifyPassword())
{
return TRUE;
}
else{
return FALSE;
}
}
else{
return TRUE;
}
}
// controllo esistenza EMAIL
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;
}
}
// controllo EMAIL
protected function EmailCheck()
{
if($_POST[email] == "")
{
return TRUE;
}
elseif(ereg("^[a-zA-Z0-9][_\.a-zA-Z0-9-]+@([a-zA-Z0-9][0-9A-Za-z-]+\.)+([A-Za-z]{2,4})",$_POST[email]))
{
if($this->EmailExists())
{
return TRUE;
}
else{
return FALSE;
}
}
else{
return TRUE;
}
}
public function ErrorResult()
{
if(NomeCheck())
{
$errnome="&errnome=1";
}
if(CognomeCheck())
{
$errcognome="&errcognome=1";
}
if(UsernameCheck())
{
$errusername="&errusername=1";
}
if(PasswordCheck())
{
$errpassword="&errpassword=1";
}
if(EmailCheck())
{
$erremail="&erremail=1";
}
header("Location: ../?page=reg" . $errnome . $errcognome . $errusername . $errpassword . $erremail);
die;
}
protected function ErrorReport()
{
if($this->NomeCheck() OR $this->CognomeCheck() OR $this->UsernameCheck() OR $this->PasswordCheck() OR $this->EmailCheck())
{
$this->ErrorResult;
}
$this->InsertNewUser();
}
//genera stringa casuale da inviare per email per confermare l'account
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;
}
// prepara l'email con il link per confermare l'account (!!!!!!!!!!!!! ATTENZIONE: MODIFICA L'URL)
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://www.pixter.it/starfactory/reg/verify_user.php?key=" . $key;
mail($_POST['email'], "Iscrizione al sito...", $content, "From: io<miomail@me.com>");
return;
}
// cripta la password, inserisce i dati nel database (con account ancora da attivare), prepara il link per conferma e invia la mail
protected function InsertNewUser()
{
$password = md5($_POST['password']);
$key_control = $this->GetKey();
$sql = "INSERT INTO users (nome,cognome,username,password,email,key_control) VALUES ('$_POST[nome]','$_POST[cognome]','$_POST[username]','$password','$_POST[email]','$key_control')";
$this->DbConnect();
mysql_query($sql,$this->conn);
mysql_close($this->conn);
$this->SendUserMail($key_control);
}
// attivazione dell'account da link. Se il link è corretto passa ver a 1 e cancella key_control (la chiave casuale)
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!";
}
}
}
?>
Ma non riesco a capire dov'è l'errore...
Alla fine dello script l'utente me lo registra comunque, anche se i campi sono tutti vuoti!
E' come se la funzione ErrorReport() non me la filasse proprio..
Dove sbaglio?
Grazie per l'aiuto!