- Home
- Categorie
- Coding e Sistemistica
- PHP
- Modulo di registrazione utenti
-
Non ancora, ma osservandolo, vedo che il codice php è inserito nella pagina stessa del form. Cambia qualcosa?
Il resto del codice gli hai dato un'occhiata?
Devo rivedere completamente anche quello?
-
Ciao Ranz,
ho corretto il tuo codice, ma non lo ho testato.E' cambiato un po' rispetto alla versione che hai postato, ma ho cercato
di rispettare l'ordine logico che avevi impostato.Fammi sapere
Ciao[php]
require('config.php');// Inizializzo tutti i campi con i dati Inviati dal modulo
$submitted = (isset($_POST['Invia'])) ? $_POST['Invia'] : null;
$nome = (isset($_POST['nome'])) ? $_POST['nome'] : null;
$cognome = (isset($_POST['cognome'])) ? $_POST['cognome'] : null;
$giorno = (isset($_POST['giorno'])) ? $_POST['giorno'] : null;
$mese = (isset($_POST['mese'])) ? $_POST['mese'] : null;
$anno = (isset($_POST['anno'])) ? $_POST['anno'] : null;
$luogo_nascita = (isset($_POST['luogo_nascita'])) ? $_POST['luogo_nascita'] : null;
$indirizzo= (isset($_POST['indirizzo'])) ? $_POST['inirizzo'] : null;
$cap = (isset($_POST['cap'])) ? $_POST['cap'] : null;
$citta = (isset($_POST['citta'])) ? $_POST['citta'] : null;
$provincia = (isset($_POST['provincia'])) ? $_POST['provincia'] : null;
$email= (isset($_POST['email'])) ? trim($_POST['email']) : null;
$password = (isset($_POST['password'])) ? trim($_POST['password']) : null ;
$verifica_password = (isset($_POST['verifica_password'])) ? trim($_POST['verifica_password']) :null;//Verifico che TUTTI i campi sono stati valorizzati
if(!isset($submitted) || !isset($nome) || !isset($cognome) || !isset($giorno) || !isset($mese) || !isset($anno)
|| !isset($luogo_nascita) || !isset($indirizzo) || !isset($cap) || !isset($citta) || !isset($provincia)
|| !isset($email) || !isset($password) || !isset($verifica_password)){die('Tutti i campi devono essere valorizzati');
}//Crypt della password per garantire una miglior sicurezza
$password = md5($password);// Query per l'inserimento dell'utente nel database sprintf parsa la stringa e sostituisce il token %s con i valori passati come argomenti
$strSQL = sprintf("INSERT INTO soci (nome,cognome,giorno,mese, anno, luogo_nascita, indirizzo, cap, citta,provincia, email, password, verifica_password) " . " VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", $nome, $cognome, $giorno,$mese, $anno, $luogo_nascita,
$indirizzo, $cap, $citta,$provincia, $email, $password, $verifica_password);sql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
//Edito i parametri sottostanti con i dati relativi al sito
$web_site = 'AssociazioneCulturaleCalliope.org';
$webmaster = 'Associazione Culturale Calliope';
$web_mail = '[email protected]';$header = "From: ". $web_site . " <" . $web_mail . ">\r\n";
// Edito l'oggetto e il messaggio
$subject = "Dettagli registrazione";
$message = "Gentile $nome $cognome, l'Associazione Culturale Calliope ti ringrazia per esserti registrato su $web_site. La tua richiesta sarà adesso ".
"esaminata dal consiglio direttivo e in caso di approvazione riceverai l'email specifica. Per usufruire dei nostri servizi devi semplicemente ".
" inserire questi dati nel login apposito: Email: $email ; Password: $password.\n\n\nConserva queste informazioni o meglio ancora stampa questa ".
" mail. Grazie infinite, $webmaster";// Spedisc la mail
mail($email, $subject, $message, $header);
$subject1 = "Richiesta di iscrizione";
$message1= "Spett.le Associazione Culturale Calliope,
$nome, $cognome, $email,richiede di poter accedere alla sezione privata del sito";
mail ($web_mail, $subject1, $message1, $header);
echo('Registrazione avvenuta, Benvenuto !!!<br /> Le informazioni che ci hai fornito ti sono state spedite via mail.');// Reindirizzo l'utente ad una pagina di conferma della registrazione
header('Location: registrato.php');
exit;
[/php]
-
Anche se il codice è nella stessa pagina non cambia niente.
Questo if è inutile, la condizione è sempre true per forza:
[php]
//Verifico che TUTTI i campi sono stati valorizzati
if(!isset($submitted) || !isset($nome) || !isset($cognome) || !isset($giorno) || !isset($mese) || !isset($anno)
|| !isset($luogo_nascita) || !isset($indirizzo) || !isset($cap) || !isset($citta) || !isset($provincia)
|| !isset($email) || !isset($password) || !isset($verifica_password)){die('Tutti i campi devono essere valorizzati');
}
[/php]
Dovresti farti i controlli di prima con strlen.
-
La funzione strlen va usata anche $submitted?
-
Scusa Thedarkita,
non mi è ben chiara l'inutilità delle condizioni testate con quella if.Description
bool **isset** ( mixed $var [, mixed $var [, $... ]] ) Determine if a variable is set and is not **NULL**. If a variable has been unset with unset(), it will no longer be set. **isset()** will return **FALSE** if testing a variable that has been set to **NULL**.
Grazie e ciao
-
Errore mio, non avevo visto che avevi messo null ero convinto avessi messo ''.
$submitted può anche essere eliminata tanto non ti serve a niente in questo caso.
-
Si è vero,
nel cercare di replicare più fedelmente possibile la logica originale
non me ne ero accorto.Può però servire per identificare il FORM HTML da cui è avvenuta la POST HTTP.
Per essere sicuri che qualcuno non si stia registrando da un altro sito però
è necessario che il valore sia ogni volta diverso e conosciuto a priori tipo
il SESSION ID.Ciao e buona serata.
-
Ho testatoil file, ma esce scritto :"Tutti i campi devono essere valorizzati"
-
Sto realizzando anche la pagina login.php seguendo le direttive di thedarkita.
Il valore Livello che ho inserito nella pagina accedi.php mi serve per abilitare gli utenti: in fase di registrazione è settato a 0 e non si può accedere all'area privata, poi sono io che lo modifico a 1 direttamente su mysql, abilitando l'utente nell'area privata.
Posto il codice della pagina login e quello della pagina accedi che dovrebbe ricevere i dati del form, perchè mi esce pagina bianca
Dov'è che sbaglio?[HTML]<form action="accedi.php" method="post" name="login" id="login">
<table width="36%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="26%"><font color="#000099" face="Arial, Helvetica, sans-serif"><strong>Email
:</strong></font></td>
<td width="74%"><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td><font color="#000099" face="Arial, Helvetica, sans-serif"><strong>Password
:</strong></font></td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="accedi" value="Accedi">
<input type="reset" value="Resetta"class="button">
</div></td>
</tr>
</table>
</form>[/HTML]Questo è il php
[PHP]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['accedi']))
{// Dati Inviati dal modulo $email = (isset($_POST['email'])) ? trim($_POST['email']) : ''; // Metto nella variabile 'email' il dato inviato dal modulo, se non viene inviato dò di default '' $password = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'password' il dato inviato dal modulo, se non viene inviato dò di default '' // Crypto la password e la confronto con quella nel database $password = md5($password); // Controllo l'utente esiste $query = mysql_query("SELECT user_id FROM soci WHERE email = '$email' AND password = '$password' and livello = 1"); // Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $accedi = mysql_fetch_array($query); // Creo una variabile di sessione $_SESSION['accedi'] = $accedi['user_id']; // reindirizzo l'utente header('Location: area_riservata.php'); exit; } // se non esiste da l'errore else die('L''utente non è stato riconosciuto o non ha i privilegi per accedere all''area riservata');
}
?>[/PHP]
-
Ma come fa ad uscirti sempre pagina bianca? C'è qualcosa che non va...
-
Lo so,infatti per questo chiedo consiglio.
Per il file della registrazione, adesso provo a scrivere il tutto con la funzione strlen
-
Controllando il file di mirko,mi sono accorto che avevo sbagliato a ricopiare il nome di una variabile.
Adesso l'ho aggiustato e ho fatto delle prove: sia nel caso in cui riempio tutti i campi,sia nel caso in cui ne lascio unovuoto, come risultato esce una pagina vuota senza grafica o messaggi d'errore e l'inserimento non avviene
-
Ciao ranz,
dopo aver inizializzato le variabili PHP scrivi il loro contenuto a video con echo,
in questo modo capirai quale variabile rimane a null.Ciao
-
Allora, ho fatto la prova Mirko.
Vengono visualizzate tutte, ma non vi è l'inserimento nel database, però se salto volontariamente un campo,non viene visualizzato l'avvertimento del mancato inserimento
-
A questo punto voglio provare a postare il codice della tabella soci dove dovrebbe avvenire l'inserimento, può darsi che l'errore sia lì
CREATE TABLE `soci` ( `user_id` mediumint(9) NOT NULL auto_increment, `nome` varchar(255) NOT NULL, `cognome` varchar(255) NOT NULL, `giorno` mediumint(9) NOT NULL, `mese` mediumint(9) NOT NULL, `anno` mediumint(4) NOT NULL, `luogo_nascita` varchar(255) NOT NULL, `indirizzo` varchar(255) NOT NULL, `cap` varchar(5) NOT NULL, `citta` varchar(255) NOT NULL, `provincia` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(12) NOT NULL, `verifica_password` varchar(12) NOT NULL, `livello` tinyint(4) NOT NULL default '0', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
-
A poco alla volta sto risolvendo i vari problemi.
Ora riesco a inserire i dati, ma non a far partire l'email,ma non desisto
-
Niente da fare, per il momento non riesco a far partire la mail. Mi potete controllare il codice per favore?
[PHP]
//Edito i parametri sottostanti con i dati relativi al sito
$web_site = '';
$webmaster = 'Associazione Culturale Calliope';
$web_mail = '';
$pass_utente = $_POST['password'];
$mail_utente = $_POST['email'];
$nome = $_POST['nome'];
$cognome =$_POST['nome'];
$header = "From: ". $web_site . " <" . $web_mail . ">\r\n";
// Edito l'oggetto e il messaggio
$subject = "Dettagli registrazione";
$message = "Gentile $nome $cognome, l'Associazione Culturale Calliope ti ringrazia per esserti registrato su $web_site. La tua richiesta sarà adesso
esaminata dal consiglio direttivo e in caso di approvazione riceverai l'email specifica. Per usufruire dei nostri servizi devi semplicemente
inserire questi dati nel login apposito:
Email: $mail_utente ; Password: $password
Conserva queste informazioni o meglio ancora stampa questa mail.
Grazie infinite, $webmaster";// Spedisco la mail
mail($mail_utente, $subject, $message, $header);$subject1 = "Richiesta di iscrizione";
$message1= "Spett.le Associazione Culturale Calliope,
$nome, $cognome, $email,richiede di poter accedere alla sezione privata del sito";
mail ($web_mail, $subject1, $message1, $header);
echo('Registrazione avvenuta, Benvenuto !!!<br /> Le informazioni che ci hai fornito ti sono state spedite via mail.');
[/PHP]Per inciso, le prove le sto realizzandoin privato e nella variabile $web_mail sto provando di volta in volta varie email,ma non funziona.
Scusate, poichè non conosco nulla per quanto riguarda le sessioni, sapreste indicarmi un tutorial semplice semplice. Mi interessa realizzare delle pagine che solo gli utenti registrati potranno visitare, quindi se ci clicca sopra un utente non registrato, voglio che venga reindirizzato a un'altra pagina