Problema script registrazione utente php mysql

davidanna23

Utente Attivo
22 Lug 2012
43
0
0
Salve ragazzi, ho appena creato uno script di registrazione utente con php e mysql, ho seguito un po una guida su youtube e ho aggiunto delle cose, lo script è visualizzabile qua: http://davidanna23.com/php/registrazione/registrazione.php
Se provate ad inserire tutti i dati da l'errore: Errore nella compilazione dei campi! che io avevo impostato se qualche campo fosse rimasto vuoto, vi posto il codice della mia pagina, potreste aiutarmi a capire dov'è l'errore? Grazie
PHP:
<?php include ("connect.php"); ?>
<html>
<head>
<title>Registrazione utente</title>
</head>
<body>
<?php
if (Isset($_POST['Submit']))
{
$errori=array();
if (!Isset($_POST['Username']) || empty($_POST['Username']))
{
$errori[]='Username';
}
if (!Isset($_POST['Password']) || empty($_POST['Password']))
{
$errori[]='Password';
}
if (!Isset($_POST['Nome']) || empty($_POST['Nome']))
{
$errori[]='Nome';
}
if (!Isset($_POST['Cognome']) || empty($_POST['Cognome']))
{
$errori[]='Cognome';
}
if (!Isset($_POST['Email']) || empty($_POST['Email']))
{
$errori[]='Email';
}
if (!empty($errori))
{
	echo "Errore nella compilazione dei campi!"."
<br />";
}
else
{
$Usr=$_POST['Username'];
$Pwd=$_POST['Password'];
$Name=$_POST['Nome'];
$Surname=$_POST['Cognome'];
$Email=$_POST['Email'];

$query="INSERT INTO utenti (username,password,nome,cognome,email)";
$query.="VALUES ('".$Usr."','".$Pwd."','".$Name."','".$Surname."','".$Email."')";
$Inserimento=mysql_query ($query,$conn);
if ($Inserimento)
	{
	echo "Registrazione avvenuta con successo!"."
	<BR />";
	}
else
	{
	echo "Errore nel salvataggio!"."
	<br />";
	}
}
}
?>
Registrazione nuovo utente:<BR />
<FORM ID="Utenti" NAME="Utenti" METHOD="POST"
ACTION="registrazione.php">
<LABEL>Nome:
<input type="text" name="nome" id="nome" />
</LABEL>
<p><LABEL>Cognome:
<input type="text" name="cognome" id="cognome" />
</LABEL></p>
<p><LABEL>Indirizzo email:
<input type="text" name="email" id="email" />
</LABEL></p>
<p><LABEL>Username:
<input type="text" name="Username" id="Username" />
</LABEL></p>
<p><LABEL>Password:
<input type="PASSWORD" name="Password" id="Password" />
</LABEL></p>
<p><input type="submit" name="Submit" ID="Submit"
value="Invia" />
</p>
</FORM>
</body>
</html>
<?php include ("close.php"); ?>
 

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
I valori degli attributi name del form non corrispondono a quelli di $_POST (controlla le maiuscole).

Comunque sia qualche consiglio per migliorare lo script:
- non memorizzare MAI le password in chiaro nel database
- non usare maiuscole per la prima lettera del nome delle variabili o funzioni
- usa i doppi apici e la concatenazione solo quando ne hai realmente necessità, questa parte
PHP:
$query.="VALUES ('".$Usr."','".$Pwd."','".$Name."','".$Surname."','".$Email."')";
risulta più pulita scritta in questo modo:
PHP:
$query.="VALUES ('{$Usr}', '{$Pwd}', '{$Name}', '{$Surname}', '{$Email}')";
- indenta il codice e scrivi l'html in minuscolo
- cerca di separare (in questo caso anche in modo semplice) il template dalla parte logica dello script
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
quoto marco_rx e aggiungo:
quando si immettno dati in u db è "molto" consigliabile il loro controllo in modo da evitare che vengano immesse "porcherie"
 

davidanna23

Utente Attivo
22 Lug 2012
43
0
0
Giorno.
Avete ragione, è meglio criptarla la password (l'ho fatto, ditemi se è corretto), comunque ho corretto il name nel _post e nel form, ma non funziona ancora, ecco il codice:
PHP:
<?php include ("connect.php"); ?>
<html>
<head>
<title>Registrazione utente</title>
</head>
<body>
<?php
if (Isset($_POST['Submit']))
{
$errori=array();
if (!Isset($_POST['Username']) || empty($_POST['Username']))
{
$errori[]='Username';
}
if (!Isset($_POST['Password']) || empty($_POST['Password']))
{
$errori[]='Password';
}
if (!Isset($_POST['Name']) || empty($_POST['Name']))
{
$errori[]='Name';
}
if (!Isset($_POST['Surname']) || empty($_POST['Surname']))
{
$errori[]='Surname';
}
if (!Isset($_POST['Email']) || empty($_POST['Email']))
{
$errori[]='Email';
}
if (!empty($errori))
{
	echo "Errore nella compilazione dei campi!"."
<br />";
}
else
{
$Usr=$_POST['Username'];
$Pwd=sha1$_POST['Password'];
$Nome=$_POST['Name'];
$Cognome=$_POST['Surname'];
$Posta=$_POST['Email'];

$query="INSERT INTO utenti (username,password,nome,cognome,email)";
$query.="VALUES ('{$Usr}', '{$Pwd}', '{$Name}', '{$Surname}', '{$Email}')";
$Inserimento=mysql_query ($query,$conn);
if ($Inserimento)
	{
	echo "Registrazione avvenuta con successo!"."
	<BR />";
	}
else
	{
	echo "Errore nel salvataggio!"."
	<br />";
	}
}
}
?>
Registrazione nuovo utente:<BR />
<FORM ID="Utenti" NAME="Utenti" METHOD="POST"
ACTION="registrazione.php">
<LABEL>Nome:
<input type="text" name="Name" id="Name" />
</LABEL>
<p><LABEL>Cognome:
<input type="text" name="Surname" id="Surname" />
</LABEL></p>
<p><LABEL>Indirizzo email:
<input type="text" name="Email" id="Email" />
</LABEL></p>
<p><LABEL>Username:
<input type="text" name="Username" id="Username" />
</LABEL></p>
<p><LABEL>Password:
<input type="PASSWORD" name="Password" id="Password" />
</LABEL></p>
<p><input type="submit" name="Submit" ID="Submit"
value="Invia" />
</p>
</FORM>
</body>
</html>
<?php include ("close.php"); ?>
Ho scritto le variabili in maiuscolo perchè nella guida le scriveva in maiuscolo e per paura di sbagliare ho fatto tutto identico alla guida!
 
Ultima modifica:

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Ciao, prova cosi:
PHP:
<?php include ("connect.php"); ?>
<html>
<head>
<title>Registrazione utente</title>
</head>
<body>
<?php
if (Isset($_POST['Submit']))
{
$errori=array();
if (!Isset($_POST['username']) || empty($_POST['username']))
{
$errori[]='username';
}
if (!Isset($_POST['password']) || empty($_POST['password']))
{
$errori[]='password';
}
if (!Isset($_POST['name']) || empty($_POST['name']))
{
$errori[]='name';
}
if (!Isset($_POST['surname']) || empty($_POST['surname']))
{
$errori[]='surname';
}
if (!Isset($_POST['email']) || empty($_POST['email']))
{
$errori[]='email';
}
if (!empty($errori))
{
    echo "Errore nella compilazione dei campi!"."
<br />";
}
else
{
$usr=$_POST['username'];
$pwd=$_POST['password'];
$nome=$_POST['name'];
$cognome=$_POST['surname'];
$posta=$_POST['email'];
$pass = sha1($pwd);
$query="INSERT INTO utentis (username,password,nome,cognome,email)";
$query.="VALUES ('{$usr}', '{$pass}', '{$name}', '{$surname}', '{$email}')";
$Inserimento=mysql_query ($query,$conn);
if ($Inserimento)
    {
    echo "Registrazione avvenuta con successo!"."
    <BR />";
    }
else
    {
    echo "Errore nel salvataggio!"."
    <br />";
    }
}
}
?>
Registrazione nuovo utente:<BR />
<FORM ID="Utenti" NAME="Utenti" METHOD="post"
ACTION="registrazione.php">
<LABEL>Nome:
<input type="text" name="name" id="name" />
</LABEL>
<p><LABEL>Cognome:
<input type="text" name="surname" id="surname" />
</LABEL></p>
<p><LABEL>Indirizzo email:
<input type="text" name="email" id="email" />
</LABEL></p>
<p><LABEL>Username:
<input type="text" name="username" id="username" />
</LABEL></p>
<p><LABEL>Password:
<input type="PASSWORD" name="password" id="password" />
</LABEL></p>
<p><input type="submit" name="Submit" ID="Submit"
value="Invia" />
</p>
</FORM>
</body>
</html>
<?php include ("close.php"); ?>
Ma quando lanci lo script non ti da nessun errore a video?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
le parentesi

PHP:
$pwd=sha1($_POST['password']);
edit
@sixdas
i controlli sono quasi nulli, es.
se inpoto un email del tipo pinco°°pallo.it quasta viene salvata nel db e non è certo un indirizzo valido
 
Ultima modifica:

sixdas

Utente Attivo
25 Giu 2012
70
0
6
Infatti, ha scelto una guida poco adatta al suo scopo. Per una cosa più seria io farei in questo modo:
PHP:
<?php
// Includo la connessione al database
require('db_conect.php');


// Se il modulo viene inviato...
if(isset($_POST['registra']))
{
    
    // Dati Inviati dal modulo
    $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : '';
    $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : '';   
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';
	$pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';   
    
    // Filtro i dati inviati
    if (!get_magic_quotes_gpc()) {
        $nome = addslashes($nome);
		$cognome = addslashes($cognome);
		$user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    }
    
    
    // Controllo il Nome
    if(strlen($nome) < 4 || strlen($nome) > 12)
        die('Nome troppo corto, o troppo lungo');
	// Controllo il Cognome	
	if(strlen($cognome) < 4 || strlen($cognome) > 12)
        die('Cognome troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Username non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta già registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
        
        // Crypt della password 
        $pass = sha1($pass);
		 
		
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (nome,cognome,user,pass,mail)";
        $strSQL .= "VALUES('$nome', '$cognome', '$user', '$pass', '$mail')";
 

		mysql_query($strSQL) OR die("Errore, contattare l'amministratore ".mysql_error());

        
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
        header('Location: registrato.php');
        exit;
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registrazione</title>
</head>

<body>
<form action="" method="post">
 <input name="nome" type="text" id="nome" value="Nome" onfocus="if(this.value=='Nome') this.value='';" /><br />
 <input name="cognome" type="text" id="cognome" value="Cognome" onfocus="if(this.value=='Cognome') this.value='';" /><br />
  <input name="user" type="text" id="user" value="Username" onfocus="if(this.value=='Username') this.value='';" /><br />
 <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
 <input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
 <input name="registra" type="submit" value="Registrati" /><br />
</form>
</body>
</html>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
non usare eregi o ereg sono funzioni deprecate e in via di "estinzione", è facile che diano un warning,
usa preg_match o per la verifica dell'email (a me piace di più)
PHP:
<?php
//...
 elseif(!!filter_var($mail, FILTER_VALIDATE_EMAIL))
        die('Email non valida');
//...
?>
 

davidanna23

Utente Attivo
22 Lug 2012
43
0
0
Ragazzi non so come ringraziarvi, forse ci siamo quasi, il modulo inizia a prender forma: http://davidanna23.com/php/registrazione/registrazione.php
Solo che se provate a compilarlo mi da sempre errore: Email non valida!
Ho usato lo script suggerito da Borgo per la verifica dell'email:
PHP:
elseif(!!filter_var($mail, FILTER_VALIDATE_EMAIL)) 
        die('Email non valida');
Perchè non va?
Vi posto anche l'intero codice per come l'ho modificato io, non credo di aver fatto qualche errore:
PHP:
<?php 
// Includo la connessione al database 
require('connect.php'); 


// Se il modulo viene inviato... 
if(isset($_POST['registra'])) 
{ 
     
    // Dati Inviati dal modulo 
    $nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : ''; 
    $cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : '';    
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; 
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';     
    $mail = (isset($_POST['mail'])) ? trim($_POST['mail']) : '';    
     
    // Filtro i dati inviati 
    if (!get_magic_quotes_gpc()) { 
        $nome = addslashes($nome); 
        $cognome = addslashes($cognome); 
        $user = addslashes($user); 
        $pass = addslashes($pass); 
        $mail = addslashes($mail); 
    } 
     
     
    // Controllo il Nome 
    if(strlen($nome) < 3 || strlen($nome) > 15) 
        die('Nome troppo corto, o troppo lungo'); 
    // Controllo il Cognome     
    if(strlen($cognome) < 3 || strlen($cognome) > 15) 
        die('Cognome troppo corto, o troppo lungo'); 
    // Controllo la Password 
    elseif(strlen($pass) < 3 || strlen($pass) > 15) 
        die('Password troppo corta, o troppo lunga'); 
    // Controllo l'email 
    elseif(!!filter_var($mail, FILTER_VALIDATE_EMAIL)) 
        die('Email non valida'); 
    // Controllo il nome utente non sia già occupato 
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1) 
        die('Username non disponibile'); 
    // Controllo l'indirizzo email non sia già registrato 
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1) 
        die('Questo indirizzo email risulta già registrato da un altro utente'); 
    // Registrazione dell'utente nel database 
    else 
    { 
         
        // Crypt della password  
        $pass = sha1($pass); 
          
         
        // Query per l'inserimento dell'utente nel database 
        $strSQL = "INSERT INTO utenti (nome,cognome,email,user,pass)"; 
        $strSQL .= "VALUES('$nome', '$cognome', '$mail', '$user', '$pass')"; 
  

        mysql_query($strSQL) OR die("Errore, contattare l'amministratore ".mysql_error()); 

         
        // Reindirizzo l'utente ad una pagina di conferma della registrazione 
        header('Location: registrato.php'); 
        exit; 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Registrazione nuovo utente</title> 
</head> 

<body>
<p>Registrazione utente:</p>
<form action="" method="post"> 
  <input name="nome" type="text" id="nome" value="Nome" onfocus="if(this.value=='Nome') this.value='';" /><br /> 
 <input name="cognome" type="text" id="cognome" value="Cognome" onfocus="if(this.value=='Cognome') this.value='';" /><br /> 
 <input name="mail" type="text" id="mail" value="Email" onfocus="if(this.value=='Email') this.value='';" /><br /> 
 <input name="user" type="text" id="user" value="Username" onfocus="if(this.value=='Username') this.value='';" /><br /> 
 <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br /> 
 <input name="registra" type="submit" value="Registrati" /><br /> 
</form> 
</body> 
</html>
<?php include ("close.php"); ?>
Grazie ancora, dai che ci siamo quasi!
 

sixdas

Utente Attivo
25 Giu 2012
70
0
6
C'è un ! in più, toglilo
PHP:
  // Controllo l'email  
    elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL))  
        die('Email non valida');
 

davidanna23

Utente Attivo
22 Lug 2012
43
0
0
Ora si che ci siamo, perfetto, la pagina di registrazione è completa. Adesso come la creo quella di login, in cui un utente registrato possa accedere con username e password?
 
Ultima modifica: