Problemi collegamento a MySQL

  • Creatore Discussione Creatore Discussione Oswold
  • Data di inizio Data di inizio
ciao
intanto ho visto dal tuo ultimo screen che non hai messo il campo id autoincrement primary key.
poi prova a fare la insert con dei valori direttamente da phpmyadmin
 
ciao
non so sul tuo phpmyadmin, ma generalmente a dx c'è un'iconcina con una chiave e sotto il pulsante di selezione.
non si se rieci a vedere (freccia rossa)
primary.jpg
 
Aggiunto ma continua a non inserire i dati, ho provato ad inserirli all'interno di phpmyadmin e li inserisce tranquillamente nella tabella
 
PHP:
<?php  
if(isset($_POST['submit'])) { 
$connessione=mysql_connect("127.0.0.1", "Oswold", "")   
or die ("Non riesco a connettermi");  
$db=mysql_select_db ("Test");  
if (!$db)  
{  
 die ("Connessione al db fallita!".mysql_error());  
}  
$user=$_POST['user']; 
$pass=$_POST['pass'];  
$mail=$_POST['email'];  
$risultato=mysql_query("INSERT INTO utenti (username,password,mail) VALUES ('$user', '$pass', '$mail')") or die(mysql_error());  

//Vediamo se passa i dati 
echo $user. " - ".$pass." - ".$mail."<br><br>"; 
if($risultato){  
    echo "Registrazione avvenuta correttamente<br>";  
}else{  
    echo "ERRORE riprova<br>";  
}  
} 
?>  

<html>  
<body>  
<form method="post" action="index.php">  
<table border="1">  
<tr><td>  
<p><label><b>User:</b><br>  
<input name="user" type="text">  
</label></p>  
<p><label><b>Email:</b><br>  
<input name="email" type="text">  
</label></p>  
<p><label><b>Password:</b> <br>  
<input name="pass" type="password">  
</label></p>  
</td></tr>  
</table>  
<br>  
<input name="submit" type="submit" value="Registrati">  
</form>  
</body>  
</html>

 
ciao
intanto una cosa: stai facendo tutto in una stessa pagina?
se si sostituisci
PHP:
<form method="post" action="index.php">
con
PHP:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
poi nella connessione al posto di
PHP:
$connessione=mysql_connect("127.0.0.1", "Oswold", "");
metti
PHP:
$connessione=mysql_connect("localhost", "Oswold", "");
a parte questo non vedo perche non funzioni

p.s.
hai messo la password in connessione?
 
PHP:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

Se levo questo non li scrive all'interno della tabella, se lo metto li scrive!
Perché? Io dopo che gli utenti si sono registrati in questa pagina vorrei reindirizzarli in un'altra in modo diretto!

PS: Inoltre una volta inseriti i dati oltre a scrivere "Registrazione avvenuta con successo" mi scrive pure i dati inseriti, perché?
 
ciao
Se levo questo non li scrive all'interno della tabella, se lo metto li scrive!
la pagina come si chiama?
se si chiama index.php
scrivere
1) <form method="post" action="index.php">
oppure
2) <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
è la stessa cosa, ma se la pagina si chiama in modo diverso (si fa per dire pinco.php)
la 1) ti manda alla pag index.php dove non c'e (credo) lo script per l'inserimento
la 2) indipendentemente da come si chiami ti manda alla pag stessa dove c'è lo script per l'inserimento

per riinviare dopo la registrazione alla pag che vuoi potresti usare

PHP:
<?php
//..........
if($risultato){  
	echo "Registrazione avvenuta correttamente<br>";
	//il seguente aspetta 3 secondi e riinvia
	echo "<meta http-equiv='Refresh' content='3; URL=nome_pag_a_cui_riinviare.php'>";
}else{  
    echo "ERRORE riprova<br>";  
}  
//.......... 
?>

mostra i dati che hai inserito perchè hai questa riga
PHP:
//Vediamo se passa i dati 
echo $user. " - ".$pass." - ".$mail."<br><br>";
toglila o commentala
 
Non lo avevo proprio notato l'echo! Lo avevo eclissato ormai eheheh!

Grazie mille per l'aiuto ed il tempo che mi hai dedicato!

Un ultima cosa: se io non voglio aspettare 3 secondi per reindirizzare la pagina basta che inserisco
PHP:
echo URL=nome_pag_a_cui_riinviare.php'>";
o se voglio aspettare solo un secondo modificare il
PHP:
echo "<meta http-equiv='Refresh' content='3;
in "
PHP:
echo "<meta http-equiv='Refresh' content='1;"
 
ciao
un secondo (pero devi lasciare il tempo all'utente di leggere il messaggio)
PHP:
echo "<meta http-equiv='Refresh' content='1; URL=nome_pag_a_cui_riinviare.php'>";

0 secondi immediato
PHP:
echo "<meta http-equiv='Refresh' content='0; URL=nome_pag_a_cui_riinviare.php'>";

poi a parte il tempo se vuoi riinviare sempre alla pag stessa
PHP:
echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
 
ciao
dimenticavo per la stessa pagina puoi anche scrivere
PHP:
echo "<meta http-equiv='Refresh' content='3'>";
ma io preferisco sempre indicare il nome dove vado
 
Sulla base del consiglio di alcuni ho sistemato la registrazione aggiungendo questi campi:

PHP:
// Controlla che i campi siano stati riempiti tutti
if (empty($user)) { echo "Non hai inserito l'username!"; goto a; }
elseif (empty($mail)) { echo "Non hai inserito l'email!"; goto a; }
elseif (empty($pass)) { echo "Non hai inserito la password!"; goto a; }

// Controlla la presenza della @ sull'email
if (!ereg("@",$mail)) { echo "L'email inserità non è valida!"; goto a; }

// Controlla se l'user è già presente
$Username= "SELECT Count( * ) AS Conta FROM utenti WHERE username = '$_POST[user]'";
$raw = mysql_query($Username);
$row = mysql_fetch_array($raw);
if($row[Conta]>0 )
{echo "Username gia esistente"; goto a;}

// Controlla se l'email è già presente
$Email= "SELECT Count( * ) Conta1 FROM utenti WHERE mail = '$_POST[email]'";
$raws = mysql_query($Email);
$rows = mysql_fetch_array($raws);
if($rows[Conta1]>0 )
{echo "Email gia esistente"; goto a;}

// Controlla la lunghezza della password
$Password = 6;
if(strlen($_POST['pass'])<$Password)  
{ echo "La password scelta è troppo corta"; goto a; }

Funziona tutto correttamente, tranne la visualizzazione di un errore per Conta ma che non da nessun problema allo script, secondo voi dovrei aggiungere qualcos'altro?
 
ciao
prova così
PHP:
<?php
// Controlla che i campi siano stati riempiti tutti
//l'addslashes ti da un minimo di sicurezza
if (empty($_POST['user'])) { echo "Non hai inserito l'username!"; goto a; }else{$user=addslashes($_POST['user']);}
elseif (empty($_POST['email'])) { echo "Non hai inserito l'email!"; goto a; }else{$mail=addslashes($_POST['email']);}
elseif (empty($_POST['pass'])) { echo "Non hai inserito la password!"; goto a; }else{$pass=addslashes($_POST['pass']);}
// USA QUESTO (tra l'altro eregi è deprecato si deve usare pre_match)
if (!filter_var($mail, FILTER_VALIDATE_EMAIL)) { echo "L'email inserità non è valida!"; goto a; }
// Controlla se l'user è già presente
$Username= "SELECT * FROM utenti WHERE username = '$user'";
$raw = mysql_query($Username);
//$row = mysql_fetch_array($raw);
if(mysql_num_rows($raw)>0 )
{echo "Username gia esistente"; goto a;}
// Controlla se l'email è già presente
$Email= "SELECT *  FROM utenti WHERE mail = '$mail'";
$raws = mysql_query($Email);
//$rows = mysql_fetch_array($raws);
if(mysql_num_rows($raws)>0 )
{echo "Email gia esistente"; goto a;}

// Controlla la lunghezza della password
//qui ti converrebbe usare preg_match per verificare i caratteri
$Password = 6;//e se uno scrivesse una pass di 100 caratteri?
if(strlen($pass)<$Password)  
{ echo "La password scelta è troppo corta"; goto a; }
?>
poi perchè usi il goto? mi sembra di essere ritornato al 1980

comunque andrebbe rivisto un pochettino il tutto

p.s.
non usare le maiuscole per i nomi delle variabili e/o campi: sono solo sorgente di errore
 

Discussioni simili