Inserimento dati su più tabelle

  • Creatore Discussione Creatore Discussione wizard86
  • Data di inizio Data di inizio

wizard86

Utente Attivo
3 Ago 2009
31
0
0
Salve a tutti, usando il seguente codice per la registrazione degli utenti mi sono mi ritrovo davanti ad un grosso problema!

La prima query che inserisce email/password/id_categoria della tabella Login fa quel che deve.

La seconda query invece, dovrebbe inserire il resto dei dati insieme all'id generato dall'auto-increment dell'inserimento precedente nella tabella login... ecco questo non funziona, inoltre lo script va avanti e invia la mail di avvenuta registrazione all'utente, cosa che non dovrebbe accadere invece se tutto non va a buon fine.

PHP:
if ($nome == null || $cognome == null || $indirizzo == null || $cap == null || $citta == null || $provincia == null || $telefono == null || $email == null || $password == null) {
		echo "\n<div class='ui-messages ui-widget' id='msgs'>";
		echo "\n<div class='ui-messages-error ui-corner-all'>";
		echo "\n<span class='ui-messages-error-icon'></span>";
		echo "\n<ul>";
		echo "\n<li>";
		echo "\n<span class='ui-messages-error-summary'>Tutti i campi sono obbligatori</span>";
		echo "\n</li>";
		echo "\n</ul>";
		echo "\n</div>";
		echo "\n</div>";
	}
	
	else {

		$query = "INSERT INTO Login (id_categoria,email,password)
				          VALUES ('".$categoria."','".$email."','".$password."')";
		$id		= mysql_insert_id();
		$result = mysql_query($query);
		
		
		if (!$result) {
			echo ("<h2>Risultato Inserimento</h2>\r\n");
			echo ("Errore durante la registrazione di un nuovo utente<br/ >\r\n");
			echo mysql_errno() . ": " . mysql_error();
			echo ("<br />Riprova...<br />\n");
		}
		
		else {
		
			$querypvt = "INSERT INTO Privati (id_privato,nome,cognome,indirizzo,cap,citta,provincia,telefono)
					          VALUES ('".$id."','".$nome."','".$cognome."','".$indirizzo."','".$cap."','".$citta."','".$provincia."','".$telefono."')";
			
			$resultpvt = mysql_query($query);
		
			if (!$resultpvt) {
				echo ("<h2>Risultato Inserimento</h2>\r\n");
				echo ("Errore durante la registrazione di un nuovo utente<br/ >\r\n");
				echo mysql_errno() . ": " . mysql_error();
				echo ("<br />Riprova...<br />\n");
			}
		
			else {
	
				$emailda       = '[email protected]'; //Indirizzo usato per l'invio
				$destinatario  = $email. "\r\n";
				$header 	   = "From: Sito <".$emailda.">\r\n";
				$header  	  .= "MIME-Version: 1.0\r\n";
				$header 	  .= "Content-type: text/html; charset=iso-8859-1\r\n";
				$oggetto       = "Attivazione\r\n";
				$messaggio	   = "Registrazione su www.sito.it avvenuta con successo!<br />\r\n";
				$messaggio	  .= "Ti consigliamo di conservare con cura i dati di accesso.<br />\r\n";
				$messaggio	  .= "Email: ".$email."<br /> Password: ".$password."\r\n";
	
				//ini_set('sendmail_from', '[email protected]');
	
				if(mail($destinatario, $oggetto, $messaggio , $header)) {
					
					$rsl = ok;
					header("location: check.php?result=$rsl");
					exit();
				}
				else {
					echo "\n<div class='ui-messages ui-widget' id='msgs'>";
					echo "\n<div class='ui-messages-error ui-corner-all'>";
					echo "\n<span class='ui-messages-error-icon'></span>";
					echo "\n<ul>";
					echo "\n<li>";
					echo "\n<span class='ui-messages-error-summary'>".mysql_errno() . ": " . mysql_error()."</span>";
					echo "\n</li>";
					echo "\n</ul>";
					echo "\n</div>";
					echo "\n</div>";
				}
			}
		}
	}
 
Che errore stupido che avevo fatto!!! Grazie, ora funziona!!!
Una cosa ancora, guardando il codice che ho scritto io, pensi che possa migliorarlo in qualche modo?
 
Potresti ottimizzarlo così:
PHP:
<?php
$params = array($nome, $cognome, $indirizzo, $cap, $citta, $provincia, $telefono, $email, $password);

if(in_array(null, $params))
{
	echo "\n<div class='ui-messages ui-widget' id='msgs'>";
	echo "\n<div class='ui-messages-error ui-corner-all'>";
	echo "\n<span class='ui-messages-error-icon'></span>";
	echo "\n<ul>";
	echo "\n<li>";
	echo "\n<span class='ui-messages-error-summary'>Tutti i campi sono obbligatori</span>";
	echo "\n</li>";
	echo "\n</ul>";
	echo "\n</div>";
	echo "\n</div>";
}
else
{
	$query = "INSERT INTO Login (id_categoria, email, password) VALUES ('{$categoria}', '{$email}', '{$password}')";
	$result = mysql_query($query);
	
	if(!$result)
	{
		echo ("<h2>Risultato Inserimento</h2>\r\n");
		echo ("Errore durante la registrazione di un nuovo utente<br/ >\r\n");
		echo mysql_errno() . ": " . mysql_error();
		echo ("<br />Riprova...<br />\n");
	}
	else
	{
		$id = mysql_insert_id();
		
		$querypvt = "INSERT INTO Privati (id_privato,nome,cognome,indirizzo,cap,citta,provincia,telefono) ";
		$querypvt .= "VALUES ('{$id}', '{$nome}', '{$cognome}', '{$indirizzo}', '{$cap}', '{$citta}', '{$provincia}', '{$telefono}')";

		$resultpvt = mysql_query($query);

		if(!$resultpvt)
		{
			echo ("<h2>Risultato Inserimento</h2>\r\n");
			echo ("Errore durante la registrazione di un nuovo utente<br/ >\r\n");
			echo mysql_errno() . ": " . mysql_error();
			echo ("<br />Riprova...<br />\n");
		}
		else
		{
			$emailda = '[email protected]'; //Indirizzo usato per l'invio
			$destinatario = $email. "\r\n";
			$header = "From: Sito <".$emailda.">\r\n";
			$header .= "MIME-Version: 1.0\r\n";
			$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
			$oggetto = "Attivazione\r\n";
			$messaggio = "Registrazione su www.sito.it avvenuta con successo!<br />\r\n";
			$messaggio .= "Ti consigliamo di conservare con cura i dati di accesso.<br />\r\n";
			$messaggio .= "Email: ".$email."<br /> Password: ".$password."\r\n";

			if(mail($destinatario, $oggetto, $messaggio, $header))
			{
				$rsl = 'ok';
				header("Location: check.php?result={$rsl}");
			}
			else
			{
				echo "\n<div class='ui-messages ui-widget' id='msgs'>";
				echo "\n<div class='ui-messages-error ui-corner-all'>";
				echo "\n<span class='ui-messages-error-icon'></span>";
				echo "\n<ul>";
				echo "\n<li>";
				echo "\n<span class='ui-messages-error-summary'>".mysql_errno() . ": " . mysql_error()."</span>";
				echo "\n</li>";
				echo "\n</ul>";
				echo "\n</div>";
				echo "\n</div>";
			}
		}
	}
}
?>
Anche se ci sarebbero molte altre cose da sistemare. Ad esempio non effettui l'escape dei caratteri, e questo ti espone ad un alto rischio di SQL injection (vedi la funzione mysql_real_escape_string). E poi il telefono e il CAP dovrebbero essere esclusivamente numerici (puoi usare is_numeric).
 
I controlli sui tipi di campo li effettuo già con jquery, mentre con php faccio solo questo

PHP:
if (!empty($_POST['submit'])) {
	$nome 	    = trim($_POST["nome"]);
	$cognome 	= trim($_POST["cognome"]);
	$indirizzo 	= trim($_POST["indirizzo"]);
	$cap 	    = trim($_POST["cap"]);
	$citta  	= trim($_POST["citta"]);
	$provincia 	= trim($_POST["provincia"]);
	$telefono 	= trim($_POST["telefono"]);
	$email		= trim($_POST["email"]);
	$password 	= trim(md5($_POST["password"]));
	$categoria  = trim($_POST["id_categoria"]);

	if(get_magic_quotes_gpc())
	{
		$nome      = stripslashes($nome);
		$cognome   = stripslashes($cognome);
		$indirizzo = stripslashes($indirizzo);
		$cap       = stripslashes($cap);
		$citta 	   = stripslashes($citta);
		$provincia = stripslashes($provincia);
		$telefono  = stripslashes($telefono);
		$password  = stripslashes($password);
		$email	   = stripslashes($email);
	}

	$password = mysql_real_escape_string($password);
	$email	  = mysql_real_escape_string($email);
 
I controlli con jQuery sono poco sicuri, perché basta disabilitare Javascript per eluderli. Ti consiglio quindi di effettuarli anche nello script. E poi, questo cosa significa?
PHP:
    if(get_magic_quotes_gpc())
    {
        $nome      = stripslashes($nome);
        $cognome   = stripslashes($cognome);
        $indirizzo = stripslashes($indirizzo);
        $cap       = stripslashes($cap);
        $citta        = stripslashes($citta);
        $provincia = stripslashes($provincia);
        $telefono  = stripslashes($telefono);
        $password  = stripslashes($password);
        $email       = stripslashes($email);
    }

    $password = mysql_real_escape_string($password);
    $email      = mysql_real_escape_string($email);
Modifica tutto così:
PHP:
if(!get_magic_quotes_gpc())
{
	foreach($_POST as $key => $value)
		$_POST[$key] = mysql_real_escape_string($value);
}
 
scusa questo lo devo inserire subito dopo questo o devo sostituirlo pure a questo?

PHP:
if (!empty($_POST['submit'])) {
    $nome         = trim($_POST["nome"]);
    $cognome     = trim($_POST["cognome"]);
    $indirizzo     = trim($_POST["indirizzo"]);
    $cap         = trim($_POST["cap"]);
    $citta      = trim($_POST["citta"]);
    $provincia     = trim($_POST["provincia"]);
    $telefono     = trim($_POST["telefono"]);
    $email        = trim($_POST["email"]);
    $password     = trim(md5($_POST["password"]));
    $categoria  = trim($_POST["id_categoria"]);
 
Inseriscilo in questo punto:
PHP:
if (!empty($_POST['submit'])) { 
    // QUI INSERISCI IL CODICE

    $nome         = trim($_POST["nome"]); 
    $cognome     = trim($_POST["cognome"]); 
    $indirizzo     = trim($_POST["indirizzo"]); 
    $cap         = trim($_POST["cap"]); 
    $citta      = trim($_POST["citta"]); 
    $provincia     = trim($_POST["provincia"]); 
    $telefono     = trim($_POST["telefono"]); 
    $email        = trim($_POST["email"]); 
    $password     = trim(md5($_POST["password"])); 
    $categoria  = trim($_POST["id_categoria"]);
 

Discussioni simili