Buon giorno, arrivo al punto.
All'atto della registrazione invio una mail dove è incluso un link per confermare la registrazione.
Tralasciando il form vorrei soffermarmi sullo script di inserimento dati nel DB e l'invio della mail.
Il problema è che ci sono utenti che ricevono il link completo di "hash" e id dell'utente appena creato e a chi gli manca l'id.
es:
- Senza Id
modifica
- COn Id
modifica
Quindi ne consegue che, ricevendo la mail senza l'id la registrazione o la modifica di un qualcosa non andrà a buon fine.
Questa è la pagina:
codice:
<?php
include('decripta_password/EncDec.class.php');
$txtG = $_POST['txtG'];
$txtM = $_POST['txtM'];
$txtUserName = $_POST['txtUserName'];
$txtNewUserName = $_POST['txtNewUserName'];
$txtPassword = $_POST['txtPassword'];
$txtMail = $_POST['txtMail'];
echo "<div id='container'>";
if(!$Connessione){
echo "Non è possibile connettersi";
exit;
}
else{
if($txtG!="" && $txtM != ""){
$sql = "SELECT Username FROM TBESTERNI WHERE Username=\"".$txtNewUserName."\"";
$rsUser= mysql_query($sql) or die ("Impossibile connettersi!" . mysql_error());
$num_righe = mysql_num_rows($rsUser);
$cPassword = str_crypt($txtPassword, $txtNewUserName);
if ($num_righe == false) {
//se la nuova user non è presente nel db allora la cambia
//*******************UPDATE - INSERT ***********************//
$sql = "UPDATE TBESTERNI SET"
." Username=\"".$txtNewUserName."\""
.", Pwd=\"".$cPassword."\""
.", dModifica=\"".date("Y-m-d G:i:s")."\""
.", abilita=\"0\""
." WHERE Username = \"".$txtUserName."\" and (Mat=\"".$txtM."\" and Giu=\"".$txtG."\")";
$rsUser= mysql_query($sql) or die ("Impossibile connettersi!" . mysql_error());
$Update = "1";
//********SPAZIO PER REGISTRAZIONE*****************//
$hash_generato = md5(session_id()."##".mktime()).md5($txtNewUserName+$txtMail);
$sql1 = "SELECT IdUserEsterno FROM TBESTERNI WHERE UserName=\"".$txtNewUserName."\" and (Mat=\"".$txtM."\" and Giu=\"".$txtG."\")";
$rsUser2= mysql_query($sql1) or die ("Impossibile connettersi!" . mysql_error());
$row = mysql_fetch_row($rsUser2);
$sql2 = "INSERT INTO TBREGISTRAZIONE ("
."id, hash,id_utente"
." ) VALUES ("
." \"\""
.", \"".$hash_generato."\""
.", \"".$row[0]."\""
." )";
$rsUser2= mysql_query($sql2) or die ("Impossibile eseguire l'insert nella tabella registrazione!" . mysql_error());
$Insert = "1";
//mysql_free_result($rsUser);
//*******************UPDATE - INSERT ***********************//
}
else{
//verifico se le user(vecchia e nuova) appartengono alla matricola e rg digitati
$sql = "SELECT Username FROM TBESTERNI WHERE UserName=\"".$txtNewUserName."\" and (Mat=\"".$txtM."\" and Giu=\"".$txtG."\")";
$rsUser= mysql_query($sql) or die ("Impossibile connettersi!" . mysql_error());
$rowOldUser = mysql_num_rows($rsUser);
if ($num_righe == false) {
echo " Errore: La UserName da lei scelta è già presente in archivio, pertanto non è possibile procedere.
Torni al modulo scegliendo una Username diversa da quella appena digitata.";
exit;
}
else{
//se la nuova user non è presente nel db allora la cambia
//*******************UPDATE - INSERT ***********************//
$sql = "UPDATE TBESTERNI SET"
." Username=\"".$txtNewUserName."\""
.", Pwd=\"".$cPassword."\""
.", dModifica=\"".date("Y-m-d G:i:s")."\""
.", abilita=\"0\""
." WHERE Username = \"".$txtUserName."\")";
$rsUser= mysql_query($sql) or die ("Impossibile connettersi!" . mysql_error());
$Update = "1";
//********SPAZIO PER REGISTRAZIONE*****************//
$hash_generato = md5(session_id()."##".mktime()).md5($txtNewUserName+$txtMail);
$sql1 = "SELECT IdUserEsterno FROM TBESTERNI WHERE UserName=\"".$txtUserName."\"";
$rsUser2= mysql_query($sql1) or die ("Impossibile connettersi!" . mysql_error());
$row = mysql_fetch_row($rsUser2);
$sql2 = "INSERT INTO TBREGISTRAZIONE ("
."id, hash,id_utente"
." ) VALUES ("
." \"\""
.", \"".$hash_generato."\""
.", \"".$row[0]."\""
." )";
$rsUser2= mysql_query($sql2) or die ("Impossibile eseguire l'insert nella tabella registrazione!" . mysql_error());
$Insert = "1";
//mysql_free_result($rsUser);
//*******************UPDATE - INSERT ***********************//
}
}
}
else{
echo " Errore:
Si è verificato un problema al momento del recupero riprovate più tardi oppure contattare l’amministratore se il problema persiste.
La ringraziamo per la sua collaborazione.Buona giornata.
</p>";
exit;
}
//}
mysql_close();
if (strlen($_SESSION['SessMailUserEsterno']) > 0) {
$destinatari = $txtMail ;//$_SESSION['SessMailUserEsterno'];
$oggetto = "Segnalazione";
$messaggio = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
.'<html>'
.' <head>'
.' <title>Conferma ricezione della Vostra Registrazione del '.date("Y-m-d G:i:s").'</title>'
.' <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'
.' </head>'
.' <body>';
if($Update != "" || $Insert!=""){
if($Update=="1"){
$messaggio .='
I dati sono stati modificati in data '.date("Y-m-d G:i:s").'.</p>';
}
$messaggio .= '
Per confermare la modifica e ottenere i nuovi dati deve cliccare qui
Conferma Modifica.
</p>';
}
$messaggio .='
Un cordiale saluto.</p>.'
.' </body>'
.'</html>'
.'';
/* Per inviare email in formato HTML, si deve impostare l'intestazione Content-type. */
$intestazioni = "";
$intestazioni .= "MIME-Version: 1.0\r\n";
$intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n";
$intestazioni .= "From: AZienda <webmaster@miosito.it>\r\n";
/* ed infine l'invio */
if(isset($_SESSION['verificaInvioMail'])){
if(@mail($destinatari, $oggetto, $messaggio, $intestazioni)) {
$_SESSION['verificaInvioMail'] = "1";
if($Update == "1"){
echo " DATI AGGIORNATI!!!
LE ABBIAMO INVIATO UNA MAIL NELLA QUALE TROVERÁ UN LINK(COLLEGAMENTO) PER CONFERMARE LA MODIFICA!
FINQUANDO NON CLICCHERÀ IL LINK, IL SUO PROFILO NON SARÀ ATTIVO.
EMAIL INOLTRATA.
Tra qualche secondo sarà reindirizzato all’interno del sito.";
}
elseif($Insert == "1"){
echo " LE ABBIAMO INVIATO UNA MAIL NELLA QUALE TROVERÁ UN LINK(COLLEGAMENTO) PER CONFERMARE LA REGISTRAZIONE!
FINQUANDO NON CLICCHERÀ IL LINK, IL SUO PROFILO NON SARÀ ATTIVO.
EMAIL INOLTRATA.";
}
else{
echo "UTENTE CANCELLATO - EMAIL INOLTRATA";
}
}
else{
echo "Problemi nell'invio della mail!Controlla eventualmente nella tua casella di posta se ti è arrivata la nostra mail.";
}
}
else{
echo "OPERAZIONE GIÀ ESEGUITA ED EMAIL GIÀ INOLTRATA";
$_SESSION['verificaInvioMail'] = "";
}
header("Refresh: 15; URL=LogOut.php");
}
}
echo "</div>";
?>
La mia domanda:
sapete dirmi per favore per quale motivo alcuni ricevono il link completo di id e altri no?
PS: il valore che indica l'id è riferito a row[0].
Grazie mille e buona giornata.