Form Registrazione

Ragazzi 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:

Codice:
<?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"];
//$nome = preg_replace("/[^a-z0-9]+/i", "", $_GET['nome']);
//ad eliminare tutti i caratteri in una stringa che non sono numeri/lettere
//ctype_alnum() -> numeri e lettere 
//$str = "CIAO"; $str .= "MONDO"; risultato $str = "CIAO $mondo";
//vedi funzione extract()
//mysql_real_escape_string fa l'escape dei caratteri speciali tipo 
//$username_safe = mysql_real_escape_string($username) e nella query devo mettere per tutte le variabili xxxxx_safe per salvaguardarle

//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);
                           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' '_' .
 
ciao

PHP:
<?php
 $query="Insert into ".$tb1_name." (`nome`,`cognome`,`user_name`,`password`,`e-mail`,`universita`) VALUES ('".$nome."','".$cognome."','".$username."','".$password."','".$email."','".$universita."')";
?>
i nomi dei campi non vanno "apiciati"
scrivi la querry così, mettendo sotto un var_dump per vedere cosa ti restituisce (poi lo togli)

PHP:
<?php
 $query="Insert into $tb1_name (nome,cognome,user_name,password,e-mail,universita) VALUES ('$nome','$cognome','$username','$password','$email','$universita')";
 var_dump($query);
?>
inoltre togli quel
mysql_close($conn);
generalmente non serve, ci pensa php a chiudere la connessione all'uscita della pagina, spesso da più fastidi che benefici se per caso non si trova al posto giusto

poi per validare l'indirizzo email, al posto dello sproloquio postato, leggi quest'articolo
http://blog.mrwebmaster.it/2010/03/21/validare-email-php5.html

intanto prova così, poi eventualmente riposta
 
L'email funziona, sicuramente il tuo codice è meglio però a me importi che funzioni la comunicazione col database, leviamoci prima gli esami da mezzo XD.
Da errore su questa riga :
Codice:
$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita");
mi restituisce la stringa
 
Ultima modifica:
I campi in ordine del db sono:

id int(25) chiave primaria auto_increment
nickname varchar(25)
password varchar(255)
email varchar(25)
manager varchar(25)
team varchar(25)

quella con i tuoi campi è
$query_1=mysql_query("SELECT * FROM iscritti WHERE email='".$mail."' or nickname='".$user."'")
or die("errore nella query;".mysql_error());
$num=mysql_num_rows($query_1);
//se ci sono campi gia occupati
if($num > 0)
{
header("location:error2.php");
exit;
}
//altrimenti procedo con l'inserimento
else
{
$query_insert=mysql_query("INSERT INTO iscritti
(nickname, password, email, manager, team)
VALUES
('$user', '$pass', '$mail', '$manager',
'$team')")or die("errore nella query;".mysql_error());
$result=query($query);
header("location:reg_success.php");
}
alla fine rivediti il codice e cerca di capire cosa abbiamo fatto
ciao
 
ciao
scusate se vi incasino un po', ma la funzione
ereg e tutte le simili sono deprecate
quuindi usa le preg o vai ha vedere le filter_var

Ciao Borgo, deprecate intendi che non sono funzionanti oppure che non si usano più e quindi ci sono delle migliore, mi faresti un esempio di come la faresti tu
grazie da minatore
 
ciao torniamo al problema di Marchintosh
intanto prova a scrivere la riga

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

in questo modo e aggiungici sotto un var_dump cher poi toglierai

$MySql = "SELECT * FROM $tbl_name WHERE user_name='$username'";
var_dump($MySql);

e quarda cosa ti restituisce, perche l'errore a mio parere non è nella riga

$Result = mysql_query($MySql,$conn) or die("Comunicazione al database fallita");

ma nasce a monte
 
La registrazione funziona!:mavieni:

Grazie a tutti per il vostro preziosissimo aiuto,in particolare a minatore!0:)

Per il log in una pagina tipo questa può andare bene:

PHP:
<?php
$dbhost="localhost";
$dbuser="beamanager";
$dbpass="";
$conn=mysql_connect($dbhost,$dbuser,$dbpass);

$dbname="my_beamanager";
mysql_select_db($dbname,$conn) or die("Erroe nella connessione");

session_start();
$user=$_POST["user"];
$pass=$_POST["pass"];
if($user!="nome_utente")
{
header("Location:log_error.php");
exit;
}
elseif($pass!="pass")
{
header("Location:log_error.php");
exit;
}
else
{
$_SESSION[username]= $user;
$_SESSION[password]= $pass;
header("Location:/game_index.php");
}
?>
 
ciao
quando una funzione è deprecata speso vuo dire che ha vita breve, cioè per ora funzia, ma alla prossima versione può darsi di no, quindi meglio non usare le deprecate si corre il rischio di dover riscrivere.
per come farei io ripeto il link di due post fa'

http://blog.mrwebmaster.it/2010/03/21/validare-email-php5.html

Ho inserito le righe del tuo codice in un form, forse non avrò capito bene come funziona, ma non va, inserendo un indirizzo mail non valido non mi torna niente, mi potresti far capire meglio, grazie
 
ciao
se leggi i commenti dovrebbe essere sufficiente come spiegazione
PHP:
<?php
//faccio la funzione
function verifica_email($em){  
	//pulisco la stringa  
	$em = filter_var($em, FILTER_SANITIZE_EMAIL);  
	//verifico e ritorno  
	return filter_var($em, FILTER_VALIDATE_EMAIL);   //questa ritorna FALSE se email non corretta, l'indirizzo se corretto
}//fine function
//qui avrò i vari $_POST che non metto ma simulo ecc......
$indirizzo="[email protected]";// 1)questo è giusto
//$indirizzo="pinco*pallo.com";//2)questo è sbagliato
/*qui faccio una variabile, ma non servirebbe la funzione può essere messa direttamente nell'if
lo faccio solo per capirci meglio*/
$verifica=verifica_email($indirizzo);
if($verifica== FALSE){
	echo "l'indirizzo inserito non è corretto";
}else{
	echo "l'indirizzo $verifica è corretto";
}
//commentando 1) e decommentando 2) vedi come cambia
?>

modifica: guarda che il filter var mi va a capo non dovrebbe
 
Ultima modifica:
Scusate ragà quest'ultima domanda,mi da un errore alla pagina per la verifica del log in,potete aiutarmi?

PHP:
<?php
$dbhost="localhost";
$dbuser="beamanager";
$dbpass="";
$conn=mysql_connect($dbhost,$dbuser,$dbpass);

$dbname="my_beamanager";
mysql_select_db($dbname,$conn) or die("Erroe nella connessione");

if($_POST) {

	effettua_login();

} else {

	mostra_form();
	
}

function mostra_form()

{

	// mostro un eventuale messaggio

if(isset($_GET['msg'])) {

	echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';
	
}

}

function effettua_login()

{
	// recupero il nome e la password inseriti dall'utente
	$user = trim($_POST['user']);

	$pass = trim($_POST['pass']);

	// verifico se devo eliminare gli slash inseriti automaticamente da PHP

if(get_magic_quotes_gpc()) {

	$user      = stripslashes($user);

	$pass  = stripslashes($pass);

}
	
 
	
	// verifico la presenza dei campi obbligatori
	
if(!$user || !$pass) {

	$messaggio = urlencode("Non hai inserito il nick o la password.");

	header("location: $_SERVER[PHP_SELF]?msg=$messaggio");

	exit;
	
}
	
	// effettuo l'escape dei caratteri speciali per inserirli all'interno della query
	
$user = mysql_real_escape_string($user);

$pass = mysql_real_escape_string($pass);

	// preparo ed invio la query
$query = ("SELECT * FROM iscritti WHERE nickname='".$user."' and password='".$pass."'")
$result = mysql_query($query);

	// controllo l'esito

if (!$result) {
die("Errore nella query $query: " . mysql_error());

}

$record = mysql_fetch_array($result);


if(!$record) {
	$messaggio = urlencode('Nome utente o password errati');
	header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
} else {
	session_start();
	$_SESSION['user_id'] = $record['id'];
	$messaggio = urlencode('Login avvenuto con successo');
	header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
}
}
?>

L'errore è alla riga 76 $result = mysql_query($query);
Ma sono sicuro di aver sbagliato qualcosa prima!
 
ciao
se leggi i commenti dovrebbe essere sufficiente come spiegazione
PHP:
<?php
//faccio la funzione
function verifica_email($em){  
	//pulisco la stringa  
	$em = filter_var($em, FILTER_SANITIZE_EMAIL);  
	//verifico e ritorno  
	return filter_var($em, FILTER_VALIDATE_EMAIL);   //questa ritorna FALSE se email non corretta, l'indirizzo se corretto
}//fine function
//qui avrò i vari $_POST che non metto ma simulo ecc......
$indirizzo="[email protected]";// 1)questo è giusto
//$indirizzo="pinco*pallo.com";//2)questo è sbagliato
/*qui faccio una variabile, ma non servirebbe la funzione può essere messa direttamente nell'if
lo faccio solo per capirci meglio*/
$verifica=verifica_email($indirizzo);
if($verifica== FALSE){
	echo "l'indirizzo inserito non è corretto";
}else{
	echo "l'indirizzo $verifica è corretto";
}
//commentando 1) e decommentando 2) vedi come cambia
?>

modifica: guarda che il filter var mi va a capo non dovrebbe

ok grazie mo la provo
 
ciao
se quanto hai postato è quello che stuai usando l'errore non è alla riga 76 ma alla precedente

$query = ("SELECT * FROM iscritti WHERE nickname='".$user."' and password='".$pass."'")
1. le parentesi non servono
2. dimenticato punto e virgola fine istruzione

$query = "SELECT * FROM iscritti WHERE nickname='".$user."' AND password='".$pass."'";
oppure, in questo caso meglio
$query = "SELECT * FROM iscritti WHERE nickname='$user' AND password='$pass.'";
 
ciao
se quanto hai postato è quello che stuai usando l'errore non è alla riga 76 ma alla precedente

$query = ("SELECT * FROM iscritti WHERE nickname='".$user."' and password='".$pass."'")
1. le parentesi non servono
2. dimenticato punto e virgola fine istruzione

$query = "SELECT * FROM iscritti WHERE nickname='".$user."' AND password='".$pass."'";
oppure, in questo caso meglio
$query = "SELECT * FROM iscritti WHERE nickname='$user' AND password='$pass.'";
1000 grazie sei stato utilissimo!Immaginavo di aver sbagliato qualcosa alla riga sopra!0:)
 
Ho revisionato in questa maniera, ma mi da sempre errore 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.
Allora riepilogando
Problema 1:
$Result2 da il messaggio di errore
Problema 2:
se tralascio il precedente $query nell'if(!$result) stampa il messaggio di errore

Codice:
<?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;
}

?>
 
ok il problema era la variabile e-mail nel database, non prendeva il trattino ora mettendo e_mail funziona :). Mi ha fatto dannare :book:.
 

Discussioni simili