[risolto] Controlli form iscrizione

  • Creatore Discussione Creatore Discussione Hackx
  • Data di inizio Data di inizio

Hackx

Utente Attivo
20 Ago 2013
108
0
16
Ciao a tutti !!
Mi serviva una mano per i controlli di un form di iscrizione.
Poniamo come esempio che devo far inserire nome, cognome, email, email conferma, password e password di conferma.

PHP:
include "connessione.php";

//le variabili
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$email = $_POST['email'];
$email_conferma = $_POST['email_conferma'];
$pass = $_POST['pass'];
$pass_conferma = $_POST['pass_conferma'];

 //esempio 
$query = "SELECT email FROM utenti WHERE email = '$email'";
$ris = mysql_query($query, $db);
$num = mysql_num_rows($ris);

// Controllo dei campi
if (($nome == '') || ($cognome == '') || ($email == '') || ($email_conferma == '') || ($pass == '') || ($pass_conferma == '')) 
{ 
echo "Non hai compilato tutti i campi."; 
}else {
     
if (!ereg('[a-zA-Z]', $nome)) 
{ 
echo "Il nome deve essere composto da sole lettere"; 
}else {
          
 //email
         
if (!ereg('^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)*\.([a-zA-Z]{2,6})$', $_POST['email'])) 
{ 
echo "L'e-mail inserita non è valida"; 
}else {
         
// password
if ((strlen($pass) < '6') || (strlen($pass) > '16')) 
{ 
echo "Errore lunghezza password"; 
}else {
                  
// coincidenza password
if ($pass != $pass2) 
{ 
echo "Password non coincidono"; 
}else{

//coincidenza email
if ($email != $email_conferma)
{
echo "L'email non coincide";
}else{
                          
// Controllo che l'e-mail scelta non sia già in uso
if($num != '0') 
{ 
die("L'email scelta è già in uso"); 
}else{ 
                              
// Salvo i dati 
mysql_query("INSERT INTO users (nome, cognome, email, password) VALUES ('$nome', '$cognome', '$email' '$pass'") or die (mysql_error()); 
echo("Registrazione avvenuta con successo!"); 
                            }
                        }
                    }
                }
            }
        }
    }

?>
Il problema è che gli errori non partono, diciamo che è un po tutto bloccato ! .. come posso risolvere questo/i problema/i ??

Grazie mille in anticipo per l'aiuto,
Andrea

P.s.
Nel codice mi potrebbe essere sfuggito qualcosa visto che l'ho dovuto riscrivere tutto !.. ma soprattutto sto muovendo i primi passi nel PHP!
 
Ciao ciao :) ,

Innanzitutto volevo ringraziare ad entrambi per l'aiuto.. e se devo essere sincero il pdo non lo so usare benissimo, anzi per niente! .. infatti ti/vi volevo chiedere se mi potevate (senza riscrivere tutto il codice .. è chiaro ) solo le parti che ritenete di correggere!

Ringrazio,
Andrea

P.S.
Va bene:
if (filter_var ( "[email protected]" , FILTER_VALIDATE_EMAIL))
{ } else { }

Mentre:
per prag_match...come lo posso inserire nel mio codice??

Grazie ancora !!!!
 
ciao
PHP:
<?php
if (!preg_match('/[a-zA-Z]/', $nome))
//se vuoi che il nome abbia un minimo e massimo di caratteri
//preg_match('/[a-zA-Z]{3,8}/', $nome) es. min 3 max 8
{ 
echo "Il nome deve essere composto da sole lettere"; 
}else { 
?>
per filter_var dipende
se nell'if vuoi ok e nell'else errore va bene
altrimenti
PHP:
if (!filter_var ( "[email protected]" , FILTER_VALIDATE_EMAIL)){
comunque al posto dell'indirizzo puoi mettere una variabile
poi se non vuoi fare molte modifiche passa a mysqli che ti da la possibilità di programmare ad oggetti o in modo procedurale (che assomiglia molto mysql, devi modificare la connessione e nella mysqli_query aggiungere solo il link della stessa oltre alla querystringa)
 
Ciao,

Ringrazio sempre per la vostra attenzione! e precisione nella/e risposta/e !.

Correggerò quanto prima e vi farò sapere... un'altra domanda... riguardante il PDO o mysqli, avete qualche articolo dove posso capire bene come si attiva e come funziona, anche, in modo generale ??

Ringrazio,
Andrea
 
Perfetto ho trovato tutti gli articoli riguardanti il mysqli .. me li studio !...così correggerò tutto il mio codice in maniera più sicura !!

Ringrazio,
Andrea
 
Ciao,

Ancora io ! ahah...comunque niente mi sono letto/studiato un po tutto l'articolo e mi pare di aver capito che esistono un paio di modi per connettersi al DBMS con Mysqli...io ho scelto quello con mysqli_real_connect(), visto che mi sembrava il più completo e soprattutto con moltissimi parametri addizionali (flags, se non erro).

Potrebbe andare:

PHP:
<?php

//inizializziamo Mysqli
$link = @mysqli_init();

//controllo sull'inizializzazione
if (!isset($link))
{
   die("errore nell'inizializzazione di Mysqli.");
}

//definizione delle variabili
$host =        "host";
$username = "username";
$password = "password";
$database = "database";

//connessione DB
if (!mysqli_real_connect($link, $host, $user, $pass, $db))
{
   die ("Errore in connessione (" . mysqli_connect_errno() . ") " .
   mysqli_connect_error());
}else{
     echo "Connessione avvenuta con successo.";
}

//chiusura della connessione
@mysqli_close($link);
?>

Accetto molto volentieri cosnigli :) !

Unica cosa che ancora non ho ben capito ! ..è come faccio ad inserire i dati nel DB usando questo metodo (Mysqli)?...uso sempre il comando INSERT ? mi potete scrivere un esempio di codice ?

Ringrazio,
Andrea
 
ciao
mysqli, in stile procedurale, è simile a mysql
PHP:
<?php
//....
$link = mysqli_connect($host, $username, $password, $db);//uso la mysqli_conect perche la conosco meglio
//.....
$query="INSERT INTO tabella(campo_1, campo_2) VALUES('$val_1', '$val_2'";
$ris=mysqli_query($link,$query);//rispetto a mysql deve avere in più il valore della connessione
//......
?>
poi mysqli_close($link) non so se serva, con le mysql ci pensava php a chiudere quando serviva, comunque quando fai le prove non usare il silent @, gli eventuali errori vanno eliminati non nascosti.

comunque verifica (prova) perchè mysqli è anche per me una cosa ancora tutta da scoprire, quindi non è detto che quanto dica sia corretto
 
ciao
mysqli, in stile procedurale, è simile a mysql
PHP:
<?php
//....
$link = mysqli_connect($host, $username, $password, $db);//uso la mysqli_conect perche la conosco meglio
//.....
$query="INSERT INTO tabella(campo_1, campo_2) VALUES('$val_1', '$val_2'";
$ris=mysqli_query($link,$query);//rispetto a mysql deve avere in più il valore della connessione
//......
?>
poi mysqli_close($link) non so se serva, con le mysql ci pensava php a chiudere quando serviva, comunque quando fai le prove non usare il silent @, gli eventuali errori vanno eliminati non nascosti.

comunque verifica (prova) perchè mysqli è anche per me una cosa ancora tutta da scoprire, quindi non è detto che quanto dica sia corretto

Insomma è una cosa nuova un po per tutti :) !

Comunque ho provato ciò che mi avevi consigliato .. e mi un errore.. è da stamattina che correggo e provo .. ma sinceramente non capisco come correggerlo.

Errore:
mysqli_query () si aspetta che il parametro 1 per essere mysqli, boolean

Riguardo la riga di codice:

$ris = mysqli_query($conn, $query);


Devo impostare un parametro booleano .. insomma ciò un po di confusione !! XD
non è che mi potresti aiutare ?

Ringrazio,
Andrea
 
ciao
se la connessione l'hai chiamata $conn, nella mysqli_query devi mettere $conn (nel mio caso l'avevo chiamata $link), ma non ha importanza come la chiami basta che corrisponda
 
ciao
se la connessione l'hai chiamata $conn, nella mysqli_query devi mettere $conn (nel mio caso l'avevo chiamata $link), ma non ha importanza come la chiami basta che corrisponda

Ciao,
Innanzitutto ti chiedo scusa per il ritardo nella risposta!...e poi ti volevo dire che ho trovato l'errore, era sempre nella riga della connessione, però riguardava una parentesi tonda che non ci doveva stare !

Poi dato che ci sono ti volevo fare 2 domande:

1 - Riguardo al controllo di due uguali email nel database:

PHP:
$ctrl_mail = mysql_query("SELECT * FROM iscrizione WHERE email = '$email'") or die (mysql_error());
if (mysql_num_rows ($ctrl_mail)>0)
{
echo "L'email risulta già stata registrata.";
}else{
//poi ci metto la query d'inserimento

Potrebbe andare ??

2 - Riguarda la conferma tramite email :

PHP:
//email per la conferma
$header = "From: $admin_email\nreply-To: noreply\r\n";
$subject = "Conferma la tua iscrizione."

//corpo del messaggio
$messaggio = "Ti ringrazio per la tua iscrizione. \n";
$messaggio .= "Il tuo user è: ".$email." "\n";
$messaggio .= "La tua password è:" .$password."\n";
$messaggio .= "Per confermare vai alla pagina http://www.sito.it/conferma.php";
$messaggio .= "e inserisci i dati per l'autenticazione. \n";

mail ($email, stripslashes($subject), stripslashes($messaggio), $headers);
}
?

Entrambi gli esempi li ho trovati rovistando tra i vostri articoli..però nel secondo ci sono delle piccole cose che non mi sono chiare.

-La email messa nell'heades deve essere proprio la mia? (cioè creo una email tipo libero e poi la uso per inviare le email di conferma?)
-Per cosa sta la \n in ogni riga del codice ? (sarebbe a capo ?)
ultima cosa (scusa se ti tartasso)
-il punto prima dell'uguale cosa significa?

Ti ringrazio moltissimo,
Andrea
 
ciao
cercherò di rispondere alle tue domande
1) si potrebbe andar bene (a parte le vecchie istruzioni mysql)
2) qui la risposta è più complessa
nell'header dovresi mettere la tua email, se vuoi che possano risponderti togli i no repley, se invece vuoi che non possano risponderti dalla conferma
devi mettre un indirizzo fittizio, generalmente noreplay@tuo_sito.it
e vceniamo al punto dolente
con quel sistema è facile (vedi varie discussioni) che indirizzi email tipo [email protected] [email protected] [email protected]...
non vengano ricevute quando inviate con la funzione mail(), per essere sicuro (abbastanza) che vengano ricevute devi passare alla classe phpmailer o simile.

il \n sta per ritorno a capo quando l'email in è in formato txt, se in formato html deve essere sostituito da <br />
poi riguardo a .= (analogamente per += -= ...) concatena a quello già contenuto.
per chiariti meglio prova questo miniscript
PHP:
<?php
$stringa ="pinco ";
$stringa ="esce con pallino ";
echo "$stringa<br />";//stampa: esce con pallino
$stringa ="pinco ";
$stringa .="esce con pallino ";
echo "$stringa<br />";//stampa: pinco esce con pallino
?>
 
ciao
cercherò di rispondere alle tue domande
1) si potrebbe andar bene (a parte le vecchie istruzioni mysql)
2) qui la risposta è più complessa
nell'header dovresi mettere la tua email, se vuoi che possano risponderti togli i no repley, se invece vuoi che non possano risponderti dalla conferma
devi mettre un indirizzo fittizio, generalmente noreplay@tuo_sito.it
e vceniamo al punto dolente
con quel sistema è facile (vedi varie discussioni) che indirizzi email tipo [email protected] [email protected] [email protected]...
non vengano ricevute quando inviate con la funzione mail(), per essere sicuro (abbastanza) che vengano ricevute devi passare alla classe phpmailer o simile.

il \n sta per ritorno a capo quando l'email in è in formato txt, se in formato html deve essere sostituito da <br />
poi riguardo a .= (analogamente per += -= ...) concatena a quello già contenuto.
per chiariti meglio prova questo miniscript
PHP:
<?php
$stringa ="pinco ";
$stringa ="esce con pallino ";
echo "$stringa<br />";//stampa: esce con pallino
$stringa ="pinco ";
$stringa .="esce con pallino ";
echo "$stringa<br />";//stampa: pinco esce con pallino
?>

Fine settimana d'inferno!! ..Comunque oggi riguardo tutto il codice e se ci sono problemi ti scrivo ! :)

Grazie mille,
Andrea
 
Ciao,

Ho corretto diversi dei tanti problemi che avevo.. adesso ho riscontrato questo errore nel validare una email:

PHP:
if ($_POST['email'] == '')
         {
           echo "Non hai compilato il campo email.<br/>";
         } else {
if (!filter_var ( "[email protected]" , FILTER_VALIDATE_EMAIL))  
         {
	   echo "L'email non è valida.<br/>";
	  } else {
         
$email = $_POST['email']; 
         }
         }

Cosa posso fare ?
Il problema è che non mi restituisce nessun errore..cioè anche se scrivo nome34libero.it ... non mi restituisce un bel niente quando in realtà mi dovrebbe restituire "L'email non è valida".

Ringrazio,
Andrea
 
ciao
ehem...ehem, guarda che tu stai validando [email protected] che giustamente è sempre valida,
correggi
PHP:
<?php
//....
if($_POST['email'] == ''){
	echo "Non hai compilato il campo email.<br/>";
}else{
	if(!filter_var ($_POST['email'] , FILTER_VALIDATE_EMAIL)){
		echo "L'email non è valida.<br/>";
	}else{
		$email = $_POST['email']; 
	}
}
//....
?>
allora vedrai che nome34libero.it risulterà non valido
 
ciao
ehem...ehem, guarda che tu stai validando [email protected] che giustamente è sempre valida,
correggi
PHP:
<?php
//....
if($_POST['email'] == ''){
	echo "Non hai compilato il campo email.<br/>";
}else{
	if(!filter_var ($_POST['email'] , FILTER_VALIDATE_EMAIL)){
		echo "L'email non è valida.<br/>";
	}else{
		$email = $_POST['email']; 
	}
}
//....
?>
allora vedrai che nome34libero.it risulterà non valido

ahahah oddio che svista ! .. Grazie mille per la correzzione :) !
Corretto e chiaramente funzionante !

Ringrazio,
Andrea
 

Discussioni simili