PDA

View Full Version : [PHP] registrazione form su database


Gacoment
25-05-2010, 12:27
Ragazzi sono su piattaforma mac e non riesco a eseguire la query.
Devo utilizzare un database per un progetto all'università e stavo gestendo una registrazione e non riesco a inserire i dati, il codice prende input da una form e vanno a finire qui:

<?PHP
// variabili di connessione
// nome server, nome utente,
// Password, nomedatabase, tabella
$ServerName = "localhost";
$UserName = "root";
$Password = "madara";
$DbName = "EP";
$tbl_name="studente";

// la connessione al database e alla tabella
$conn = mysql_connect($ServerName, $UserName, $Password) or die("CONNECTION NON RIUSCITA");
mysql_select_db($DbName, $conn);
$nome = $_GET["nome"];
$cognome = $_GET["cognome"];
$universita=$_GET['universita'];
$username = $_GET["username"];
$password = $_GET["password"];
$conferma=$_GET['conferma'];
$email = $_GET["email"];
$universita = $_GET["universita"];

//Verifico il valore di $nome;
if(chkEmail($email)) {
if( (!empty($password)) and (!empty($conferma)) ){
if( $password!=$conferma ) echo"<center>le password non corrispondono : ricontrolla i campi password</center>";
else{
if( (empty($nome)) or (empty($cognome)) or (empty($username)) )
echo"<center>inserire tutti i campi è obbligatorio</center>";
else{
if( ($universita=="Salerno") or ($universita=="Londra") ){
$MySql = "SELECT * FROM '.$tbl_name.' WHERE user_name='$username'";
$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita");
$rs = mysql_fetch_array($Result);
$a1 = $rs['user'];
$a2 = $rs['email'];
$rs->close;
if($a1 == $username){
die("Questo Nome utente gi&agrave esiste!");
}
$Result2 = mysql_query("SELECT * FROM '.$tb1_name.' WHERE e-mail='$email'") or die(mysql_query());
$rs2 = mysql_fetch_array($Result2);
$a2 = $rs2['email'];
$a3 = $rs2['user'];
$rs->close;
if($a2 == $email){
die("Questa email &egrave gi&agrave stata usata dall'utente: $a3");
}
$query="Insert into `.$tbl_name.` (`nome`,`cognome`,`user_name`,`password`,'e-mail','universita') VALUES ('$nome','$cognome','$username','$password','$email','$universita')";
$password=d5(sha1(md5(sha1($password))));
//$query="Insert into ".$tb1_name." (`nome`,`cognome`,`user_name`,`password`,`e-mail`,`universita`) VALUES ('".$nome."','".$cognome."','".$username."','".$password."','".$email."','".$universita."')";

$result=mysql_query($query,$conn); // result ci serve x fare il controllo
//mysql_close($conn);
var_dump($query);
if (!$result) die("errore registrazione");
else echo "<center>".$nome ." ti sei iscritto, ora sei riconosciuto come ".$username."</center>";
}
else{
if(empty($universita)) echo"<center>Spiacente se non inserisce la sua universit&agrave non pu&ograve proseguire</center>";
else echo"<center>Spiacente la tua universit&agrave non fa parte del progetto European Platform </center>";
}
}
}
}
else
echo"<center>campi password non inseriti correttamente</center>";
}



?>
<?php

function chkEmail($email)
{
// elimino spazi, "a capo" e altro alle estremità della stringa
$email = trim($email);
// se la stringa è vuota sicuramente non è una mail
if(!$email) {
return false;
}
// controllo che ci sia una sola @ nella stringa
$num_at = count(explode( '@', $email )) - 1;
if($num_at != 1) {
return false;
}
// controllo la presenza di ulteriori caratteri "pericolosi":
if(strpos($email,';') || strpos($email,',') || strpos($email,' ')) {
return false;
}
// la stringa rispetta il formato classico di una mail?
if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email)) {
return false;
}
return true;
}

?>

Per controllare che la registrazione è andata a buon fine devo verificare che la variabile della query sia 'false'?
Non riesco a capire perchè non riesco ad eseguirla è un problema del database che ho chiamato il nick con campo 'user_name' ? Forse dovrei togliere l' '_' .
Cmq come errore mi restituisce : Da errore su questa riga :
$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita"); la stringa di comunicazione fallita

darkito85
25-05-2010, 13:26
Credo che hai sbagliato a scrivere questa query:
$MySql = "SELECT * FROM '.$tbl_name.' WHERE user_name='$username'";

La query giusta dovrebbe essere questa:
$MySql = "SELECT * FROM $tbl_name WHERE user_name='$username'";

Comunque in fase di "debug" ti consiglio di inserire tra le tue "linee di codice più pericolose" la seguente riga

echo mysql_error();

Che non fa altro che visualizzare sul dispositivo di output eventuali errori relativi a mysql.

Gacoment
25-05-2010, 15:15
Non è questo il problema, perchè ho visto che la sintassi con la concatenazione è corretta, cmq anche se ometto i punti l'errore è lo stesso, mi stampa la stringa della prima query di comunicazione fallita. Sinceramente sto uscendo pazzo :muro: .

ndakota
25-05-2010, 16:16
$MySql = "SELECT * FROM '.$tbl_name.' WHERE user_name='$username'";



E' questa la riga incriminata? Prova così

$MySql = "SELECT * FROM " . $tbl_name . " WHERE user_name='" . $username . "'";

Gacoment
25-05-2010, 17:16
E' questa la riga incriminata? Prova così

$MySql = "SELECT * FROM " . $tbl_name . " WHERE user_name='" . $username . "'";


Ok ora sembra che almeno questa riga sia corretta anche se non ho capito ancora quale sia la logica per la giusta correzione, cmq ho adottato la stessa tecnica per la seconda query e lì mi stampa il messaggio di errore per $Result2. Guarda ho modificato così :

<?PHP
// variabili di connessione
// nome server, nome utente,
// Password, nomedatabase, tabella
$ServerName = "localhost";
$UserName = "root";
$Password = "madara";
$DbName = "EP";
$tbl_name="studente";

// la connessione al database e alla tabella
$conn = mysql_connect($ServerName, $UserName, $Password) or die("CONNECTION NON RIUSCITA");
mysql_select_db($DbName, $conn);
$nome = $_GET["nome"];
$cognome = $_GET["cognome"];
$universita=$_GET['universita'];
$username = $_GET["username"];
$password = $_GET["password"];
$conferma=$_GET['conferma'];
$email = $_GET["email"];
$universita = $_GET["universita"];


//Verifico il valore di $nome;
if(chkEmail($email)) {
if( (!empty($password)) and (!empty($conferma)) ){
if( $password!=$conferma ) echo"<center>le password non corrispondono : ricontrolla i campi password</center>";
else{
if( (empty($nome)) or (empty($cognome)) or (empty($username)) )
echo"<center>inserire tutti i campi è obbligatorio</center>";
else{
if( ($universita=="Salerno") or ($universita=="Londra") ){
$MySql = "SELECT * FROM " . $tbl_name . " WHERE user_name='" . $username . "'";
$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita");
$rs = mysql_fetch_array($Result);
$a1 = $rs['user'];
$a2 = $rs['email'];
$rs->close;
if($a1 == $username){
die("Questo Nome utente gi&agrave esiste!");
}
$MySql2 = "SELECT * FROM " . $tbl_name . " WHERE e-mail='" . $email ."'";
$Result2 = mysql_query($MySql2,$conn) or die("Comunicazione al database 2 fallita");
$rs2 = mysql_fetch_array($Result2);
$a2 = $rs2['email'];
$a3 = $rs2['user'];
$rs->close;
if($a2 == $email){
die("Questa email &egrave gi&agrave stata usata dall'utente: $a3");
}
$query="Insert into `.$tbl_name.` (`nome`,`cognome`,`user_name`,`password`,'e-mail','universita') VALUES ('$nome','$cognome','$username','$password','$email','$universita')";
$password=d5(sha1(md5(sha1($password))));
//$query="Insert into ".$tb1_name." (`nome`,`cognome`,`user_name`,`password`,`e-mail`,`universita`) VALUES ('".$nome."','".$cognome."','".$username."','".$password."','".$email."','".$universita."')";

$result=mysql_query($query,$conn); // result ci serve x fare il controllo
//mysql_close($conn);
var_dump($query);
if (!$result) die("errore registrazione");
else echo "<center>".$nome ." ti sei iscritto, ora sei riconosciuto come ".$username."</center>";
}
else{
if(empty($universita)) echo"<center>Spiacente se non inserisce la sua universit&agrave non pu&ograve proseguire</center>";
else echo"<center>Spiacente la tua universit&agrave non fa parte del progetto European Platform </center>";
}
}
}
}
else
echo"<center>campi password non inseriti correttamente</center>";
}



?>
<?php

function chkEmail($email)
{
// elimino spazi, "a capo" e altro alle estremità della stringa
$email = trim($email);
// se la stringa è vuota sicuramente non è una mail
if(!$email) {
return false;
}
// controllo che ci sia una sola @ nella stringa
$num_at = count(explode( '@', $email )) - 1;
if($num_at != 1) {
return false;
}
// controllo la presenza di ulteriori caratteri "pericolosi":
if(strpos($email,';') || strpos($email,',') || strpos($email,' ')) {
return false;
}
// la stringa rispetta il formato classico di una mail?
if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email)) {
return false;
}
return true;
}

?>

ndakota
25-05-2010, 20:37
Gli apici li metti solo intorno alle variabili dei campi stringa.


query = "insert into " . $tbl_name. "(nome, cognome, user_name, password, e-mail, universita) VALUES ('$nome', '$cognome', '$username', '$password', '$email', '$universita')";


Quindi dovrebbe essere così.

EDIT: ops, sorry. Penso tu ti riferisca alla select. Solo che quella sembra esatta.

Gacoment
25-05-2010, 22:23
Allora da errore sempre sulla seconda query e poi per controllare se inserimento della form viene correttamente nel database devo fare quell'if se è falso vuol dire che non è andato a buon fine giusto?
Perchè se è corretto come ho scritto non funziona nemmeno la query per la registrazione.
Problema 1:
$Result2 da il messaggio di errore
Problema 2:
se tralascio il precedente $query nell'if(!$result) stampa il messaggio di errore

<?PHP
// variabili di connessione
// nome server, nome utente,
// Password, nomedatabase, tabella
$ServerName = "localhost";
$UserName = "root";
$Password = "madara";
$DbName = "EP";
$tbl_name="studente";

// la connessione al database e alla tabella
$conn = mysql_connect($ServerName, $UserName, $Password) or die("CONNECTION NON RIUSCITA");
mysql_select_db($DbName, $conn);
$nome = $_GET["nome"];
$cognome = $_GET["cognome"];
$universita=$_GET['universita'];
$username = $_GET["username"];
$password = $_GET["password"];
$conferma=$_GET['conferma'];
$email = $_GET["email"];
$universita = $_GET["universita"];


//Verifico il valore di $nome;
if(chkEmail($email)) {
if( (!empty($password)) and (!empty($conferma)) ){
if( $password!=$conferma ) echo"<center>le password non corrispondono : ricontrolla i campi password</center>";
else{
if( (empty($nome)) or (empty($cognome)) or (empty($username)) )
echo"<center>inserire tutti i campi è obbligatorio</center>";
else{
if( ($universita=="Salerno") or ($universita=="Londra") ){
$MySql = "SELECT * FROM " . $tbl_name . " WHERE user_name='" . $username . "'";
$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita");
$rs = mysql_fetch_array($Result);
$a1 = $rs['user_name'];
$a2 = $rs['email'];
$rs->close;
if($a1 == $username){
die("Questo Nome utente gi&agrave esiste!");
}
$MySql2 = "SELECT * FROM " . $tbl_name . " WHERE e-mail='" . $email ."'";
$Result2 = mysql_query($MySql2,$conn) or die("Comunicazione al database 2 fallita");

$rs2 = mysql_fetch_array($Result2);
$a2 = $rs2['email'];
$a3 = $rs2['user_name'];
$rs->close;
if($a2 == $email){
die("Questa email &egrave gi&agrave stata usata dall'utente: $a3");
}
$password=(sha1(md5(sha1($password))));
$query = "insert into " . $tbl_name. "(nome, cognome, user_name, password, e-mail, universita) VALUES ('$nome', '$cognome', '$username', '$password', '$email', '$universita')";


$result=mysql_query($query,$conn); // result ci serve x fare il controllo
var_dump($query); //sappiamo cosa ci restituisce la query
if (!$result) die("errore registrazione");
else echo "<center>".$nome ." ti sei iscritto, ora sei riconosciuto come ".$username."</center>";
}
else{
if(empty($universita)) echo"<center>Spiacente se non inserisce la sua universit&agrave non pu&ograve proseguire</center>";
else echo"<center>Spiacente la tua universit&agrave non fa parte del progetto European Platform </center>";
}
}
}
}
else
echo"<center>campi password non inseriti correttamente</center>";
}



?>
<?php

function chkEmail($email)
{
// elimino spazi, "a capo" e altro alle estremità della stringa
$email = trim($email);
// se la stringa è vuota sicuramente non è una mail
if(!$email) {
return false;
}
// controllo che ci sia una sola @ nella stringa
$num_at = count(explode( '@', $email )) - 1;
if($num_at != 1) {
return false;
}
// controllo la presenza di ulteriori caratteri "pericolosi":
if(strpos($email,';') || strpos($email,',') || strpos($email,' ')) {
return false;
}
// la stringa rispetta il formato classico di una mail?
if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $email)) {
return false;
}
return true;
}

?>

Gacoment
26-05-2010, 10:05
Nessuna soluzione?

Gacoment
27-05-2010, 14:54
ok il problema era la variabile e-mail nel database, non prendeva il trattino ora mettendo e_mail funziona :). Mi ha fatto dannare .