[risolto] Controlli form iscrizione

Hackx

Utente Attivo
20 Ago 2013
109
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!
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
A me sembra che sia tutto corretto.

L'unico problema è che il tuo script è vulnerabile alle SQL injection. Ti consiglio di cambiare proprio libreria, anche perché mysql è deprecata in favore di PDO o mysqli.
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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 !!!!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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)
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
Perfetto ho trovato tutti gli articoli riguardanti il mysqli .. me li studio !...così correggerò tutto il mio codice in maniera più sicura !!

Ringrazio,
Andrea
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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 [email protected]_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
?>
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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 [email protected]_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
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

Hackx

Utente Attivo
20 Ago 2013
109
0
16
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
Autore Titolo Forum Risposte Data
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
T [Photoshop] Problema creazione pennello personalizzato [RISOLTO] Photoshop 3

Discussioni simili