Salve ragazzi,
devo fare un sito in cui devo consentire agli utenti di registrarsi compilando un primo form di registrazione. Successivamente il sistema invierà all’indirizzo mail indicato una mail di invito in cui è indicata la URL a cui accedere per poter completare la registrazione. Il completamento della registrazione avviene nella url indicata nella mail di invito, in cui l’utente fornisce un nome_utente e una password.
Ho svolto in questa maniera qui
registrazione.php
paginacontinuaregistrazione.php
Va tutto bene, tranne l'update dei dati. Ovvero nella seconda parte della registrazione, quando inserisco username e password e vado a fare l'update nel database, la query va a buon fine ma non viene effettuato nessun aggiornamento dei campi username e password. (ho provato a stampare anche la $mail = $_GET['user']; e mi esce effettivamente la mail dal quale si arriva). Come è possibile? Vi prego aiutatemi, sto perdendo la testa.
Dimenticavo...questo lo script database:
create database sito
use sito;
CREATE TABLE IF NOT EXISTS `utenti` (
`nome` varchar(45) NOT NULL,
`cognome` varchar(60) NOT NULL,
`ruolo` varchar(20) NOT NULL,
`mail` varchar(60) NOT NULL,
`username` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`isAmministratore` bit(11) DEFAULT b'0',
PRIMARY KEY (`mail`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
devo fare un sito in cui devo consentire agli utenti di registrarsi compilando un primo form di registrazione. Successivamente il sistema invierà all’indirizzo mail indicato una mail di invito in cui è indicata la URL a cui accedere per poter completare la registrazione. Il completamento della registrazione avviene nella url indicata nella mail di invito, in cui l’utente fornisce un nome_utente e una password.
Ho svolto in questa maniera qui
registrazione.php
PHP:
<?php
ob_start();
// includo il file di connessione al database
include ('configurazione.php');
?>
<html>
<div class="row">
<div class="col-md-4 col-md-offset-4" background-color="green" >
<!-- Titolo -->
<h1 class="text-center" >Registrazione</h1><br>
<h5 class="text-center" >File contrassegnati da asterisco sono obbligatori</h5><br>
<form action='?inviodati=ok' method='POST'>
<!--- form -->
<div class="form-group">
<label>Nome*</label>
<input class="form-control" type='text' name='nome' class="inputbox select validate[required] " value="<?=(isset($_POST['nome']) ? $_POST['nome'] : '')?>"></input>
</div>
<div class="form-group">
<label>Cognome*</label>
<input class="form-control" type='text' name='cognome' class="inputbox select validate[required] " value="<?=(isset($_POST['cognome']) ? $_POST['cognome'] : '')?>"></input>
</div>
<div class="form-group">
<label>Ruolo*</label>
<select class="form-control" name="ruolo">
<option selected>Docente</option>
<option>Studente</option>
</select>
</div>
<div class="form-group">
<label>Email*</label>
<input class="form-control" type='text' name='mail' value="<?=(isset($_POST['mail']) ? $_POST['mail'] : '')?>"></input>
</div>
<br>
<br>
<div>
<button type="submit" class="btn btn-primary btn-lg btn-block" value='Registrati' >Submit</button>
</form>
</div>
</div>
</html>
<?php
//funzione per il classico check del formato mail
function chkEmail($mail)
{
// elimino spazi, "a capo" e altro alle estremità della stringa
$mail = trim($mail);
// se la stringa è vuota sicuramente non è una mail
if(!$mail) {
return false;
}
// controllo che ci sia una sola @ nella stringa
$num_at = count(explode( '@', $mail )) - 1;
if($num_at != 1) {
return false;
}
// controllo la presenza di ulteriori caratteri "pericolosi":
if(strpos($mail,';') || strpos($mail,',') || strpos($mail,' ')) {
return false;
}
// la stringa rispetta il formato classico di una mail?
if(!preg_match( '/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $mail)) {
return false;
}
return true;
}
//controllo il formato della mail se è studente
function chkEmailStud($mail)
{
if (strstr($mail, "@studenti.uniba.it")=="@studenti.uniba.it")
{
return true;
}
echo "Utilizza il formato ''[email protected]'' per gli studenti. ";
return false;
}
//controllo il formato della mail se è docente
function chkEmailDoc($mail)
{
if (strstr($mail, "@uniba.it") == "@uniba.it")
{
return true;
}
echo " Utilizza il formato ''[email protected]'' per i docenti. ";
return false;
}
// controllo che il form sia stato inviato
if ( isset($_GET['inviodati']) && $_GET['inviodati'] == "ok") {
// recupero i dati inviati con il form
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$ruolo = $_POST['ruolo'];
$mail = $_POST['mail'];
// controllo che i campi siano stati tutti compilati
if ($nome == TRUE && $cognome == TRUE && $ruolo == TRUE && $mail == TRUE ) {
// controllo se il campo mail è stato scritto in maniera errata
if(chkEmail($mail)) {
$isstudente = strstr($ruolo,'Studente');
$isdocente = strstr($ruolo,'Docente');
if($isstudente == TRUE){
$check = chkEmailStud($mail);
} else
if($isdocente == TRUE){
$check = chkEmailDoc($mail);}
if($check){
// controllo se l'email è presente già nel database
$sql = mysql_query("SELECT * FROM utenti WHERE mail = '$mail'") or die (mysql_error());
$num_rows = mysql_num_rows($sql);
if ( $num_rows == 0 ) {
//inserisco i dati nel database
mysql_query("INSERT INTO utenti
(nome, cognome, ruolo, mail )
VALUES
('$nome','$cognome','$ruolo', '$mail')") OR DIE(mysql_error());
// e invio una mail con la riuscita registazione
define("EOL", "\r\n");
$header = "MIME-Version: 1.0" . EOL;
$header .= "Content-Type: text/html" . EOL;
$header .= "From: Consegna Elettronica <[email protected]>\n";
$header .="X-Priority: 2\r\n";
$destinatario = $mail;
$object = "Registrazione conferma elettronica";
$message = "
Congratulazioni! La tua registrazione è andata a buon fine. <br>
Per confemare vai alla pagina http://consegnaelettronica.altervista.org/Consegnaelettronica/paginacontinuaregistrazione.php?user=$mail;
<br>Da questo indirizzo potrai completare la tua registrazione inserendo username e password che utilizzerai per il login.<br>
Ecco un riepilogo dei tuoi dati: <br>
<br>Questo il nome: $nome<br>
<br>Questo il cognome: $cognome<br>
<br>Questo il ruolo: $ruolo<br>
<br>Questa la mail: $mail<br>
";
mail($destinatario, $object,$message, $header);
header("location: paginaconfermaregistrazione.php");
} else{
echo'Email è già in uso!';
}
} else {
echo "Mail non vailda!\n";
}
}else{
echo "Questa mail non e' consentita.";
}
} else {
echo "I campi contrassegnati sono obbligatori";
}
}
?>
paginacontinuaregistrazione.php
PHP:
<?php
ob_start();
// includo il file di connessione al database
include ('configurazione.php');
?>
<html>
<title>Continua registrazione</title>
<span class="Stile147">Adesso scegli un username e una password</span>
<form action='?inviodati=ok' method='POST'>
<p><span class="Stile147">Account</span></p>
<table width="700" border="1" cellpadding="10" cellspacing="10" bordercolor="#CCCCCC">
<tr>
<td width="50%" bordercolor="#CCCCCC" bgcolor="#EAF1F5"><span class="Stile145"><b>Username</b></span><br>
<input type='text' name='username' value="<?=(isset($_POST['username']) ? $_POST['username'] : '')?>"></td>
</tr>
<tr>
<td colspan="2" bordercolor="#CCCCCC"><span class="Stile145"><b>Password</b></span><br>
<input type='password' name='password'></td>
</tr>
<tr>
<td colspan="2" bgcolor="#EAF1F5"><span class="Stile145"><b>Confirm Password</b></span><br>
<input type='password' name='confirm_password'></td>
</tr>
</table>
<p>
<input type='submit' value='Submit'>
<br>
</p>
</form>
<?php
$mail = $_GET['user'];
// controllo che il form sia stato inviato
if ( isset($_GET['inviodati']) && $_GET['inviodati'] == "ok") {
// recupero i dati inviati con il form
$username = $_POST['username'];
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];
// controllo che i campi siano stati tutti compilati
if ($username == TRUE && $password == TRUE && $confirm_password == TRUE ) {
// controllo se l'username è presente già nel database
$sql = mysql_query("SELECT * FROM utenti WHERE username = '$username'") or die (mysql_error());
$num_rows = mysql_num_rows($sql);
if ( $num_rows == 0 ) {
//controllo se la password abbia più di 6 caratteri
if (strlen($password) >= 6)
{
//ora controllo se le passw inserite siano identiche
if ( $password == $confirm_password ) {
$pass_md5 = md5($password);
//inserisco i dati nel database
//mysql_query('UPDATE utenti SET username = '$username', password='$pass_md5' WHERE mail = '$mail'') OR DIE(mysql_error());
mysql_query("UPDATE utenti SET username ='$username', password ='$pass_md5' WHERE mail = '$mail'")OR DIE(mysql_error());
//header("location: paginacompletaregistrazione.php");
} else {
echo "Passwords do not match";
}
}else { echo "Password is too short. It must be at least 6 characters long.";
}
} else{
echo'Username address already in use';
}
} else {
echo "Marked fields are mandatory";
}
}
?>
Va tutto bene, tranne l'update dei dati. Ovvero nella seconda parte della registrazione, quando inserisco username e password e vado a fare l'update nel database, la query va a buon fine ma non viene effettuato nessun aggiornamento dei campi username e password. (ho provato a stampare anche la $mail = $_GET['user']; e mi esce effettivamente la mail dal quale si arriva). Come è possibile? Vi prego aiutatemi, sto perdendo la testa.
Dimenticavo...questo lo script database:
create database sito
use sito;
CREATE TABLE IF NOT EXISTS `utenti` (
`nome` varchar(45) NOT NULL,
`cognome` varchar(60) NOT NULL,
`ruolo` varchar(20) NOT NULL,
`mail` varchar(60) NOT NULL,
`username` varchar(45) NOT NULL,
`password` varchar(45) NOT NULL,
`isAmministratore` bit(11) DEFAULT b'0',
PRIMARY KEY (`mail`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;