Miglioramento controlli su input

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ho creato un form molto leggero e giusto di prova per poi migliorarlo. di seguito il codice.
PHP:
<?php 

	include 'header.php';
	
?>

	<div id="wrapper">
	
	<?php 

		if(!isset($_GET['passkey'])){
		
			if(!isset($_POST['invia'])){ ?>
			
				<form method="post" action="#" id="formregistrazione">
					
					<ul>
						<li><label for="username">Username</label>
							<input type="text" name="username" id="username" />
						</li>
						<li>
							<label for="password1">Password</label>
							<input type="password" name="password1" id="password1" />
						</li>
						<li>
							<label for="password2">Ripeti Password</label>
							<input type="password" name="password2" id="password2" />
						</li>
						<li>
							<label for="email">Email</label>
							<input type="text" name="email" id="email" />
						</li>
					</ul>
						<input type="submit" name="invia" id="registrati" value="Registrati" />
				</form>
			
	<?php	} else {
				
				// creazione di un codice di conferma
				$codiceconferma = md5(uniqid(rand()));
				
				// Valori del form
				
				$username = mysql_real_escape_string($_POST['username']);
				$password1 = mysql_real_escape_string($_POST['password1']);
				$password2 = mysql_real_escape_string($_POST['password2']);
				$email = mysql_real_escape_string($_POST['email']);
			
				// controllo campi vuoti e password
				
				if($username == "" || $email == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password1 == "" || $password2 == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password2 != $password1){
					echo "Le password devono coincidere";
				}else{
					
					$recuperauseremail = mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");	
					$contausermail = mysql_num_rows($recuperauseremail);
					
					if($contausermail > 0){
					
						echo "Nome utente o email già disponibili";
					
					} else {
					
						// Invia dati alla tb utenti_temp
						
						$inviautentitemp = mysql_query("INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')");
						
						if($inviautentitemp){
							
							$to=$email;
							$subject="Conferma la Registrazione";
							$header="Da: Amministratore";
							$message="Ecco il tuo codice di attivazione \r\n";
							$message.="Clicca sul link per confermare la registrazione \r\n";
							$message.="http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma";
							
							$sentmail=mail($to,$subject,$message,$header);
						
						}
						
						if($sentmail){
						
							echo "Per completare la registrazione controlla la tua casella di posta elettronica e clicca sul link di attivazione.";
							
						}else{
						
							echo "Errore, link di attivazione non inviato.";
						
						}
					
					}
				}
				
			}
		
		} else {
			
			$passkey = $_GET['passkey'];
			
			$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'";
			$risultatouser = mysql_query($sqlrecuperauser);
			
			if($risultatouser) {
			
				$contauser = mysql_num_rows($risultatouser);
				
				if($contauser == 1){
				
					$rows = mysql_fetch_array($risultatouser);
					$username = $rows['username'];
					$email = $rows['email'];
					$password = $rows ['password'];
					
					$passwordcript = md5($password);
					
					$sqlconfermauser = mysql_query("INSERT INTO utenti (username, password, email) VALUES ('$username', '$passwordcript', '$email')");
					
					if ($sqlconfermauser) {
					
						echo "Il tuo account è stato attivato con successo";
						$sqleliminadati = mysql_query("DELETE FROM utenti_temp WHERE codiceconferma = '$passkey'");
					
					} else {
					
						echo "Errore!";
					
					}
				
				}
			
			}
			
		}

	?>
	
	
	</div>
	
	
</body>
</html>

ed il file della pagina di login
PHP:
<?php

	include 'header.php';

?>

	<div id="wrapper">
	
    	<?php
        	
			$p = $_GET['azione'];
			
			// Azione per il login
			if($p == "login"){
				
				if(!isset($_POST['invia'])){ ?>
			
					<form method="post" action="#" id="formlogin">
                    
						<label for="username">Username</label>
						<input type="text" name="username" id="username" /><br>                    
						<label for="password">Password</label>
						<input type="password" name="password" id="password" /><br>
						<input type="submit" name="invia" id="login" value="Accedi" />
                    
					</form>
                    
<?php			} else {
							
					$username = mysql_real_escape_string($_POST['username']);
					$password = mysql_real_escape_string($_POST['password']);
					
					if($username == "" || $password == ""){
					
						echo "Devi compilare tutti i campi";
						
					} else {
						
						$password_crypt = md5($password);
								
						$recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_crypt'");
								
						$verificadati = mysql_num_rows($recuperadati);
								
						if($verificadati == 1) {
									
							$sessione = mysql_fetch_array($recuperadati);
							$_SESSION['utente'] = $sessione['username'];
							echo "Login effettuato con successo!";
							header("Refresh: 2; URL= index.php");	
							
						} else {
									
							echo "Dati non presenti nel database!";
							
						}
								
					}
							
				}
				
				
			// Azione del logout					
			} elseif ($p == "logout"){
					
				session_destroy();
				echo "Logout effettuato con successo!";
				header("Refresh: 2; URL= index.php");				
			
			}
			
			
			
		?>
		


	</div>

</body>
</html>

Come potrei migliorarlo? Come potrei migliorare il controllo su gli input dopo il suggerimento di borgo italia ?

Grazie e tutti
 
PHP:
$passkey = $_GET['passkey']; 
$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'";

ATTENZIONE!!!
Secondo me si fa una SQL injection in 2 secondi...
 
Ultima modifica:
ciao
intanto per la passkey
sistema più semplice:
PHP:
<?php
//..........
} else {
	$passkey = htmlspecialchars($_GET['passkey']); 
//...eccetera
?>
oppure dato che è mdcinquata quindi dovrebbe essere solo caratteri asci alfanumerici
PHP:
<?php
//..........
} else {
	$passkey = htmlspecialchars($_GET['passkey']); 
	if(preg_match("/^[A-Za-z0-9]$/", $passkey )){
		//faccio quello che devo fare
	
	}else{
		echo "errore: la chiave non è corretta";
		//e un rimando automatico a dove vuoi
	}
	
 
//...eccetera
?>
 
Buongiorno, potrebbe andare bene in questo modo secondo voi?

come dice borgo faccio il controllo e poi se corrisponde prosegue nel caso non fosse giusto esce l'errore di contattare un responsabile
PHP:
else {
			
			$passkey = htmlspecialchars($_GET['passkey']); 
			if(preg_match("/^[A-Za-z0-9]$/", $passkey)){       // Qua controllo se corrisponde
				
			$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'"; // qua se positivo all'if recupero i dati dal db e proseguo
			$risultatouser = mysql_query($sqlrecuperauser);
			
			} else {
				
				echo "C'è stato un errore nella registrazione, riprovare o mandare una mail al gruppo."; // se non coincide, lascio un avviso.
				
			} if($risultatouser) {
			
				$contauser = mysql_num_rows($risultatouser);
				
			if($contauser == 1){
				
					$rows = mysql_fetch_array($risultatouser);
					$username = $rows['username'];
					$email = $rows['email'];
					$password = $rows ['password'];
					
					$passwordcript = md5($password);

quello che non mi è chiaro è che cosa dovrebbe succedere nel caso la funzione preg_match non dia esito positivo. Da cosa può dipendere visto che è un semplice controllo. Notare che chi si registra viene prima inserito in una tabella utenti temporanea dove la pass è in chiaro e dopo conferma via mail inserito nella tabella utenti quella definitiva con pass criptata.
Inoltre stavo pensando di mandare una mail di conferma ed avvenuta registrazione all'utente con user e pass in chiaro. Però dopo la conferma via mail la pass viene criptata. Come potrei fare?
Grazie a tutti
 
ciao
è che cosa dovrebbe succedere nel caso la funzione preg_match non dia esito positivo
se è negativo vuol dire che qualcuno ha cercato di accedere fraudolentemente, quindi metti un riinvio immediato e automatico ad una pagina (es alla home)
devi poi fare le varie operazioni solo e solamente solo se il controllo è stato positivo.


per gli altri controlli io farei così, ti metto i pattern solo per caratteri alfanumerici se vuoi altri caratteri modificali
PHP:
<?php
//$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($t,$mi,$m){
	if(preg_match("/^[A-Za-z0-9]{$mi,$m}$/", $t)){
		//testo ok
		return TRUE;
	}else{
		return FALSE;
	}
}
//......       
// creazione di un codice di conferma
$codiceconferma = md5(uniqid(rand()));
// Valori del form
$username = trim($_POST['username']);
$password1 = trim($_POST['password1']);
$password2 = trim($_POST['password2']);
$email = trim($_POST['email']);
//metto a vuoto messagggio di errore
$ok_ko="";
if(!ver_testo($username,3,8)){$ok_ko.="username non corretto<br />";}
if(!ver_testo($password1,6,12)){$ok_ko.="prima password non corretta<br />";}
if(!ver_testo($password2,6,12)){$ok_ko.="seconda password non corretta<br />";}
if($password1 != $password2){$ok_ko.="le password non coincidono<br />";}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="indirizzo email non valido<br />";}
if($ok_ko==""){//se è rimasto vuoto non ci sono errori
	//fai quello che devi fare
}else{
	echo $ok_ko;
	//ritorno a dove vuoi tu es.
	//header("location: pagina_che_vuoi_tu.php");
}
?>
poi non manderei la pass per email (non si sa mai chi la riceve e/o la legga). del resto quando uno si iscrive scrive lui la pass quindi metti un avviso di ricordarsela e poi la passi dalla temporanea alla tabella utenti definitiva così com'è
 
Ok grasiasss.
Potrei inserire in modulo recupera password nel caso l'utente se la sia dimenticata. Ho trovato su questo sito un utilissimo articolo prpoprio sul recupero password tramite form. Analizzo il tuo commento e provo.
Comunque ragazzi fare tutto da se in pochissimo tempo e senza qualcuno che ti dia una mano, eccezione fatta per questo forum, è veramente complicato. Ma ho davanti ancora 15 gg di ferie forzate. :crying::cool:
 
Ma le cariabili $t, $mi, $m non devo dichiararle?
PHP:
//$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($t,$mi,$m){
    if(preg_match("/^[A-Za-z0-9]{$mi,$m}$/", $t)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }
}
 
ciao
ehem, ehm...
io grauderei un po' come funziano le funzioni.
quelle che tu chiami variabili (quelle scritte tra le parentesi) sono diciamo dei "segnaposti" che vengono in seguito sostituiti quando utilizzi la funzione
ver_testo($username,3,8)
 
ciao
ehem, ehm...
io grauderei un po' come funziano le funzioni.
quelle che tu chiami variabili (quelle scritte tra le parentesi) sono diciamo dei "segnaposti" che vengono in seguito sostituiti quando utilizzi la funzione
ver_testo($username,3,8)

:book::book::D
e lo so sono un novello!!! Sorry. E' che ci sono così tante cose da controlloare e imparare che diciamo ho un pò di confusin in testa. Visto che il controllo della lunghezza di username pass ed email lo faccio tramite un file javascript secondo te è inutile questo?
PHP:
//$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($t,$mi,$m){
    if(preg_match("/^[A-Za-z0-9]{$mi,$m}$/", $t)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }

Il file jS è questo
PHP:
// JavaScript Document
jQuery(document).ready(function($){
	
	// Validazione
	
	$("*formregistrazione").validate({
		
		// regole
		rules:{
			username:{
				required: true,
				minlength: 4,
				maxlength: 10
			},
			
			password1:{
				required: true,
				minlength:4,
				maxlength:12,
			},
			
			password2:{
				required: true,
				equalTo:"#password1"
			},
			
			email:{
				required: true,				
				email: true
			},
			
		},
		//messaggi errore	
		
		messagge:{
			username:{
				required: "Devi inserire il tuo Username",
				minlength: "L'username deve avere almeno 4 caratteri",
				maxlength: "L'username deve essere lungo al massimo 10 caratteri"
			},
			
			password1:{
				required: "Devi inserire la password",
				minlength:"La password deve essere lunga almeno 4 caratteri",
				maxlength:"La password deve essere lunga almeno 12 caratteri",
				
			},
			
			password2:{
				required: "Inserisci la password",
				equalTo:"Le password devono conincidere"
			},
			
			email:{
				required: "Devi inserire la mail",				
				email: "Inserisci una email valida"
			},
			
			
			
		},
		
	});
	
	
	
	
	})
 
ciao
qualsiasi controllo js (lato client) può essere facilmente superato, quelli lato server (php opera lato server) molto più difficilmente.
i controlli lato client hanno solo il vantaggio di essere più scenografici
 
Perdonami ma sto diventando matto. Dove devo inserire questo codice?
PHP:
//$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($t,$mi,$m){
    if(preg_match("/^[A-Za-z0-9]{$mi,$m}$/", $t)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }
}

assumendo che la variabile $t sia la mia $passkey a che punto del mi codice dovrò inserirlo?
questo è il mio codice
PHP:
<?php 

	include 'header.php';
	
?>

	<div id="wrapper">
	
	<?php 

		if(!isset($_GET['passkey'])){
		
			if(!isset($_POST['invia'])){ ?>
			
				<form method="post" action="#" id="formregistrazione">
					
					<ul>
						<li><label for="username">Username</label>
							<input type="text" name="username" id="username" />
						</li>
						<li>
							<label for="password1">Password</label>
							<input type="password" name="password1" id="password1" />
						</li>
						<li>
							<label for="password2">Ripeti Password</label>
							<input type="password" name="password2" id="password2" />
						</li>
						<li>
							<label for="email">Email</label>
							<input type="text" name="email" id="email" />
						</li>
					</ul>
						<input type="submit" name="invia" id="registrati" value="Registrati" />
				</form>
			
	<?php	} else {

				// creazione di un codice di conferma
				$codiceconferma = md5(uniqid(rand()));
				
				// Valori del form
										
				$username = mysql_real_escape_string($_POST['username']);
				$password1 = mysql_real_escape_string($_POST['password1']);
				$password2 = mysql_real_escape_string($_POST['password2']);
				$email = mysql_real_escape_string($_POST['email']);
			
				// controllo campi vuoti e password
				
				if($username == "" || $email == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password1 == "" || $password2 == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password2 != $password1){
					echo "Le password devono coincidere";
				}else{
					
					$recuperauseremail = mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");	
					$contausermail = mysql_num_rows($recuperauseremail);
					
					if($contausermail > 0){
					
						echo "Nome utente o email già disponibili";
					
					} else {
					
						// Invia dati alla tb utenti_temp
						
						$inviautentitemp = mysql_query("INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')");
						
						if($inviautentitemp){
							
							$to=$email;
							$subject="Conferma la Registrazione";
							$header="Da: Amministratore";
							$message="Ecco il tuo codice di attivazione \r\n";
							$message.="Clicca sul link per confermare la registrazione \r\n";
							$message.="http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma";
							
							$sentmail=mail($to,$subject,$message,$header);
						
						}
						
						if($sentmail){
						
							echo "Per completare la registrazione controlla la tua casella di posta elettronica e clicca sul link di attivazione.";
							
						}else{
						
							echo "Errore, link di attivazione non inviato.";
						
						}
					
					}
				}
				
			}
		
		} else {
			
			$passkey = htmlspecialchars($_GET['passkey']);
			if(preg_match("/^[A-Za-z0-9]$/", $passkey)){ //Controllo se corrisponde
				
				
			$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'"; //Se corrisponde prelevo i dati dal db utenti_temp e li trasferisco al db utenti
			$risultatouser = mysql_query($sqlrecuperauser);
			
			} else {
				
				echo "C'è stato un errore nella registrazione, riprovare o mandare una mail al gruppo.";
				header("Refresh: 2; URL= index.php"); 
				
			} if($risultatouser) {
			
				$contauser = mysql_num_rows($risultatouser);
				
			if($contauser == 1){
				
					$rows = mysql_fetch_array($risultatouser);
					$username = $rows['username'];
					$email = $rows['email'];
					$password = $rows ['password'];
					
					$passwordcript = md5($password);
					
					$sqlconfermauser = mysql_query("INSERT INTO utenti (username, password, email) VALUES ('$username', '$passwordcript', '$email')");
					
					if ($sqlconfermauser) {
					
						echo "Il tuo account è stato attivato con successo";
						$sqleliminadati = mysql_query("DELETE FROM utenti_temp WHERE codiceconferma = '$passkey'");
					
					} else {
					
						echo "Errore!";
					
					}
				
				}
			
			}
			
		}

	?>
	
	
	</div>
	
	
</body>
</html>

credo poi che il resto del codice che mi hai scritto vada poi a sostituire questo
PHP:
// Valori del form
										
				$username = mysql_real_escape_string($_POST['username']);
				$password1 = mysql_real_escape_string($_POST['password1']);
				$password2 = mysql_real_escape_string($_POST['password2']);
				$email = mysql_real_escape_string($_POST['email']);
			
				// controllo campi vuoti e password
				
				if($username == "" || $email == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password1 == "" || $password2 == ""){
					echo "Devi riempire tutti i campi";
				}elseif($password2 != $password1){
					echo "Le password devono coincidere";
				}else{

Dammi conferma. Grazie
Ciao
 
ciao
si va a sostituire, mi raccomando poi controlla le graffe degli if.

edit.
non proprio a sostituire la parte
$username = mysql_real_escape_string($_POST['username']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$email = mysql_real_escape_string($_POST['email']);
la metti dopo che hai fatto i controlli e che tutto sia ok
comunque ributta giu tutto il codice e postalo che eventualmente lo correggiamo
 
Spero di aver fatto bene. Sinceramente ci sono due punti che non riesco a capire ho due errori alle righe 40 e 43. Mi dici se quello che ho scritto è corretto, grazie
PHP:
<?php 

	include 'header.php';
	
?>

	<div id="wrapper">
	
	<?php 

		if(!isset($_GET['passkey'])){
		
			if(!isset($_POST['invia'])){ ?>
			
				<form method="post" action="#" id="formregistrazione">
					
					<ul>
						<li><label for="username">Username</label>
							<input type="text" name="username" id="username" />
						</li>
						<li>
							<label for="password1">Password</label>
							<input type="password" name="password1" id="password1" />
						</li>
						<li>
							<label for="password2">Ripeti Password</label>
							<input type="password" name="password2" id="password2" />
						</li>
						<li>
							<label for="email">Email</label>
							<input type="text" name="email" id="email" />
						</li>
					</ul>
						<input type="submit" name="invia" id="registrati" value="Registrati" />
				</form>
			
	<?php	} else {
				
				function ver_testo($t,$mi,$m){						//$passkey = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
					if(preg_match("/^[A-Za-z0-9]{$mi,$ma}$/", $passkey)){
							//testo ok
							return TRUE;
						}else{
							return FALSE;
						}
				
				

				// creazione di un codice di conferma
				$codiceconferma = md5(uniqid(rand()));

				// Valori del form
				$username = trim($_POST['username']);
				$password1 = trim($_POST['password1']);
				$password2 = trim($_POST['password2']);
				$email = trim($_POST['email']);
				//metto a vuoto messagggio di errore
				$ok_ko="";
				if(!ver_testo($username,4,10)){$ok_ko.="username non corretto<br />";}
				if(!ver_testo($password1,6,12)){$ok_ko.="prima password non corretta<br />";}
				if(!ver_testo($password2,6,12)){$ok_ko.="seconda password non corretta<br />";}
				if($password1 != $password2){$ok_ko.="le password non coincidono<br />";}
				if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="indirizzo email non valido<br />";}
				if(!$ok_ko==""){//se è rimasto vuoto non ci sono errori
					 echo $ok_ko; //fai quello che devi fare
					 form();
				}else{
					echo $ok_ko;				
									
					$recuperauseremail = mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");	
					$contausermail = mysql_num_rows($recuperauseremail);
				}
					
					if($contausermail > 0){
					
						echo "Nome utente o email già disponibili";
					
					} else {
					
						// Invia dati alla tb utenti_temp
						
						$inviautentitemp = mysql_query("INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')");
						
						if($inviautentitemp){
							
							$to=$email;
							$subject="Conferma la Registrazione";
							$header="Da: Amministratore";
							$message="Ecco il tuo codice di attivazione \r\n";
							$message.="Clicca sul link per confermare la registrazione \r\n";
							$message.="http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma";
							
							$sentmail=mail($to,$subject,$message,$header);
						
						}
						
						if($sentmail){
						
							echo "Per completare la registrazione controlla la tua casella di posta elettronica e clicca sul link di attivazione.";
							
						}else{
						
							echo "Errore, link di attivazione non inviato.";
						
						}
					
					}
				}
				
			}
		
		} else {
			
			$passkey = htmlspecialchars($_GET['passkey']);
			if(preg_match("/^[A-Za-z0-9]$/", $passkey)){ //Controllo se corrisponde
				
				
			$sqlrecuperauser = "SELECT * FROM utenti_temp WHERE codiceconferma = '$passkey'"; //Se corrisponde prelevo i dati dal db utenti_temp e li trasferisco al db utenti
			$risultatouser = mysql_query($sqlrecuperauser);
			
			} else {
				
				echo "C'è stato un errore nella registrazione, riprovare o mandare una mail al gruppo.";
				header("Refresh: 2; URL= index.php"); 
				
			} if($risultatouser) {
			
				$contauser = mysql_num_rows($risultatouser);
				
			if($contauser == 1){
				
					$rows = mysql_fetch_array($risultatouser);
					$username = $rows['username'];
					$email = $rows['email'];
					$password = $rows ['password'];
					
					$passwordcript = md5($password);
					
					$sqlconfermauser = mysql_query("INSERT INTO utenti (username, password, email) VALUES ('$username', '$passwordcript', '$email')");
					
					if ($sqlconfermauser) {
					
						echo "Il tuo account è stato attivato con successo";
						$sqleliminadati = mysql_query("DELETE FROM utenti_temp WHERE codiceconferma = '$passkey'");
					
					} else {
					
						echo "Errore!";
					
					}
				
				}
			
			}
			
		}

	?>
	
	
	</div>
	
	
</body>
</html>
 
ciao
ecco la pag per la registrazione (dovrebbe funziare)
PHP:
<?php
include_once 'header.php';
//$t = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($t,$mi,$m){
    if(preg_match("/^[A-Za-z0-9]{$mi,$m}$/", $t)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	$username = trim($_POST['username']);
	$password1 = trim($_POST['password1']);
	$password2 = trim($_POST['password2']);
	$email = trim($_POST['email']);
	//metto a vuoto messagggio di errore
	$ok_ko="";
	if(!ver_testo($username,3,8)){$ok_ko.="username non corretto<br />";}
	if(!ver_testo($password1,6,12)){$ok_ko.="prima password non corretta<br />";}
	if(!ver_testo($password2,6,12)){$ok_ko.="seconda password non corretta<br />";}
	if($password1 != $password2){$ok_ko.="le password non coincidono<br />";}
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="indirizzo email non valido<br />";}
	if($ok_ko==""){//se è rimasto vuoto non ci sono errori
    	//qui dovresti mettere i dati di connessione al db *****
		//fai quello che devi fare
		$codiceconferma = md5(uniqid(rand()));
		$username = mysql_real_escape_string(strtolower(($username));//conviene salvarlo tutto in minuscolo
		//e ti conviene verificare che non ce ne sia un altro uguale
		$q=mysql_query("SELECT username FROM utenti WHERE username='$username'");
		if(mysql_num_rows($q)>0){
			//avvisi e torni al form pulito
			echo "ATTENZIONE: username esistente, si prega di cambiarlo<br />"
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}else{
			$password = mysql_real_escape_string($password1);
			$email = mysql_real_escape_string($email);
			$query="INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')";  
			if(mysql_query($query)){
				//prepari l'email di conferma da inviare
				//anche se sarebbe meglio che tu usassi al posto di mail() la classe phpmailer
				$to=$email;
                $subject="Conferma la Registrazione";
                $header="Da: Amministratore";
                $message="Ecco il tuo codice di attivazione \r\n";
                $message.="Clicca sul link per confermare la registrazione \r\n";
                $message.="<a href=\"http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma\">clicca qui</a>";
				if(mail($to,$subject,$message,$header)){
					echo "A breve riceverai codice di attivazione per confermare l'iscrizione<br />";
				}else{
					echo "Si è verificato un errore di trasmissione riprova più tardi<br />";
				}
				echo "<meta http-equiv='Refresh' content='3; URL=index.php'>";//o dove vuoi
			}else{
				//avvisi e rimandi a dove vuoi
				echo "ERRORE di comnnesione, ti preghiamo di riprovare più tardi<br />";
				echo "<meta http-equiv='Refresh' content='3; URL=index.php'>";//o dove vuoi
			}
		}
	}else{
		//avviso degli errori
		echo $ok_ko;
		//e dipo 3 secondi torno automaticamente al form ripulito
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		//i secondi di attesa possono essere aumentati o diminuiti
	}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>" id="formregistrazione">
	<table class="pinco_pallo">          
		<tr>
			<td><label for="username">Username</label></td>
			<td><input type="text" name="username" id="username" /></td>
		</tr>
		<tr>
			<td><label for="password1">Password</label></td>
			<td><input type="password" name="password1" id="password1" />
		</tr>
		<tr>
			<td><label for="password2">Ripeti Password</label></td>
			<td><input type="password" name="password2" id="password2" /></td>
		</tr>
		<tr>
			<td><label for="email">Email</label></td>
			<td><input type="text" name="email" id="email" /></td>
		</tr>
		<tr>
			<td>&nbsp;</td><td><input type="submit" name="invia" id="registrati" value="Registrati" /></td>
		</tr>
		<tr>
			<!--qui ci sta bene un link in modo che l'utente possa uscire senza registrarsi -->
			<td>&nbsp;</td><td><a href="index.php">esci</a></td>
		</tr>
	</table> 
</form>

poi devi farti la pagina per accettare la conferma, ma per quella fai un altrp post

p.s.
ho tolto ul e li e messo table perchè secondo me form più ordinato
 
ciao
dovresti dirmi queli sono le righe (comunque guarda quello che ti ho postato)
poi secondo me non dovresti impedire di avere due email uguali (es io e mia moglie ne abbiamo una unica quindi es. o si iscrive lei o mi iscrivo io).
 
Eccomi, sono di nuovo me, ti allego i lcodice mi puoi dire se è ok?
PHP:
<?php
include_once 'header.php';
//$testo = testo da verificare, $mi= lunghezza minima del testo, $ma= lunghezza massima
function ver_testo($testo,$mi,$ma){
    if(preg_match('/^[A-Za-z0-9]{$mi,$ma}$/', $testo)){
        //testo ok
        return TRUE;
    }else{
        return FALSE;
    }
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = trim($_POST['username']);
    $password1 = trim($_POST['password1']);
    $password2 = trim($_POST['password2']);
    $email = trim($_POST['email']);
    //metto a vuoto messagggio di errore
    $ok_ko="";
    if(!ver_testo($username,4,10)){$ok_ko.="username non corretto deve essere lungo da 4 a 10 caratteri <br />";}
    if(!ver_testo($password1,6,12)){$ok_ko.="prima password non corretta deve essere composta da minimo 6 massimo 12 caratteri<br />";}
    if(!ver_testo($password2,6,12)){$ok_ko.="seconda password non corretta deve essere composta da minimo 6 massimo 12 caratteri<br />";}
    if($password1 != $password2){$ok_ko.="le password non coincidono<br />";}
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="Attenzione!, indirizzo email non valido<br />";}
    if($ok_ko==""){//se è rimasto vuoto non ci sono errori

		$codiceconferma = md5(uniqid(rand()));
        $username = mysql_real_escape_string(strtolower(($username)));//conviene salvarlo tutto in minuscolo
        //e ti conviene verificare che non ce ne sia un altro uguale
        $verificauseremail=mysql_query("SELECT id FROM utenti WHERE username='$username' OR email='$email'");
        if(mysql_num_rows($verificauseremail)>0){
            //avvisi e torni al form pulito
            echo "ATTENZIONE: username o email già esistente, scegline un altro.<br />";
            echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
        }else{
            $username = mysql_real_escape_string($username);
        	$email = mysql_real_escape_string($email);
			$password = mysql_real_escape_string($password1);
            $inviautentitemp = "INSERT INTO utenti_temp (codiceconferma, username, password, email) VALUES ('$codiceconferma', '$username', '$password2', '$email')";
			if(mysql_query($inviautentitemp)){

				//prepari l'email di conferma da inviare
                //anche se sarebbe meglio che tu usassi al posto di mail() la classe phpmailer

            	//Includo la classe phpmailer
            	include_once ('class.phpmailer.php');

            	$mail = new PHPmailer();
            	$mail->IsSMTP();
            	$mail->SMTPDebug = true;

            	//Dati di collegamento al server che su aruba non servono

            	$mail->Host = "smtp.sito.it";
            	$mail->Port = 25;

            	$mail->SMTPAuth = true;
            	$mail->Username = "[email protected]";
            	$mail->Password = "psw";

            	// Impostazioni invio mail al cliente

				$mail->Setfrom ("[email protected]","Sito");		//Inserire la mail dell'amministratore ed il nome del sito
				$mail->AddReplyTo("[email protected]","Amministratore");
            	$mail->AddAddress ($email); //Mail che riceverà chi si iscrive
				$mail->MsgHTML("<html><head></head><body>Questa è una email in <b>Html</b></body></html>");
				$mail->AltBody = "Questa mail non è in HTML";
            	$mail->Subject = ("Conferma di registrazione al sito www.sito.com");
            	$mail->Body = "Ecco il tuo codice di attivazione \r\n";
            	$mail->Body .= "Clicca sul link per confermare la registrazione \r\n";
            	$mail->Body .= "<a href=\"http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma\">clicca qui</a>;

                if ($mail->Send()){
                    echo "Tra poco riceverai codice di attivazione per confermare l'iscrizione";
                }else{
                    echo "Si è verificato un errore di trasmissione riprova più tardi";
                	//e dopo 3 secondi torno automaticamente al form ripulito
                	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
                	//i secondi di attesa possono essere aumentati o diminuiti
           		}
			}


		} else {
			echo "ERRORE di comnnesione, ti preghiamo di riprovare più tardi<br />";
			echo "<meta http-equiv='Refresh' content='3; URL=index.php'>";

		}
    }
}
?>
                <form method="post" id="formregistrazione" form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
                    <table class="pinco_pallo">
                        <tr>
                            <td><label for="username">Username</label></td>
                            <td><input type="text" name="username" id="username" /></td>
                        </tr>
                        <tr>
                            <td><label for="password1">Password</label></td>
                            <td><input type="password" name="password1" id="password1" />
                        </tr>
                        <tr>
                            <td><label for="password2">Ripeti Password</label></td>
                            <td><input type="password" name="password2" id="password2" /></td>
                        </tr>
                        <tr>
                            <td><label for="email">Email</label></td>
                            <td><input type="text" name="email" id="email" /></td>
                        </tr>
                        <tr>
                            <td>&nbsp;</td><td><input type="submit" name="invia" id="registrati" value="Registrati" /></td>
                        </tr>
                        <tr>
                            <!--qui ci sta bene un link in modo che l'utente possa uscire senza registrarsi -->
                            <td>&nbsp;</td><td><a href="index.php">esci</a></td>
                        </tr>
                    </table>
               </form>

cioè qui

Grazie
 
Ultima modifica:
Perdona i doppio post ma non ho fatto in tempo amodificarlo. Ho questo eerore
PHP:
syntax error, unexpected 'post' (T_STRING)

su questa riga
PHP:
               <form method="post" id="formregistrazione" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">

che fò?
 
ciao
attento
qui non hai chiuso "
$mail->Body .= "<a href=\"http://siti/Biblionet%20test%20MySql/register.php?passkey=$codiceconferma\">clicca qui</a>";

poi sulla riga manca il ; finale
<form method="post" id="formregistrazione" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">

se vuoi inviare in html e mi sembra di si anche perchè invii il link, manca
$mail->IsHTML(true); // invio l'email in formato HTML
e in remoto toglierei tutta la parte relativa all'smtp e aggiungerei in ccn (nascosto) il tuo indirizzo così ti arriva in copia e sai se qualcuno e chi si sta iscrivento
PHP:
<?php
include_once ('class.phpmailer.php');
                $mail = new PHPmailer();
                //$mail->IsSMTP();
                //$mail->SMTPDebug = true;
				$mail->IsHTML(true); // invio l'email in formato HTML
                //Dati di collegamento al server che su aruba non servono
                //$mail->Host = "smtp.sito.it";
                //$mail->Port = 25;

                //$mail->SMTPAuth = true;
                //$mail->Username = "[email protected]";
				//ecc.......
				$mail->AddAddress ($email); //Mail che riceverà chi si iscrive
				$mail->AddBCC("[email protected]")//per ricevere in copia metti il tuo indirizzo
				//.......
?>
la parte smtp usala solo per far le prove in locale
poi migliorerei il testo alternativo altrimenti l'utente può non capire
PHP:
//....
$mail->AltBody = "il tuo client di posta non è settato per la ricezione in HTML/n
modificalo o scrivi all'amministratore [email][email protected][/email]/n";
//eventualmente aggiungi anche il codice di attivazione
//....
poi gli indicherai tu cosa fare per farsi attivare

poi per il resto mi sembra ok, comunque fai delle prove con iscrizioni fittizie
 
Intanto mille grazie. :o:o
Allora non ho la necessità di ricevere la mail con chi si sta registrando.
Posso inserire alla voce AltBody solo il testo della mail senza l'impaginazione di un html? Cioè inviare soltanto "grazie per la registrazione clicca qua per attivarti"?
Ho corretto i due piccoli errorini ma adesso mi dice che la fine del form non è corretta, o meglio
PHP:
 syntax error, unexpected end of file
questo alla riga finale.
Per la configurazione smtp, naturalmente primo farò le prove in locale poi sul server vero.

Grazie
 
ciao
ho/hai dimenticato probabilmente di chiudere qualche graffa di qualche if/else, verifica.
se invii solo in formato testo l'utente vede nell'email (scrivo staccato affinche non si formi ol link)
...
<a href="http: // siti/Biblionet%20test%20MySql / register.php ? passkey=abcdefghilmnopqrs">clicca qui</a>
....
mentre se invii in formato html l'utente vede

.....
clicca qui
.....
e passando sopra il link (dovresti saperlo) nel bw vedrà
http: // siti/Biblionet%20test%20MySql / register.php ? passkey=abcdefghilmnopqrs

poi nel testo per html metti <br> o il tag <p>...</p> non /n/r
 

Discussioni simili