Codice PHP:
<?php
require('connessionedb.php'); //o le vostre istruzioni per il collegamento al database
/*La prima cosa da notere è l'utilizzo di mysql_real_escape_string():
- questa funzione ci permette di inserire nel db (se utiliziamo mysql)
il contenuto della variabile post esattamnete così com'è,
senza creare problemi di sintassi durante l'inserimento.Si veda l'esempio sotto*/
$user = mysql_real_escape_string($_POST['user']); /* Se il valore contenuto in $_POST['user'] è: D'amico questo viene trasformato in: D'amico*/
$user_mail = $_POST['user']; // Viceversa se usiamo il metodo tradizionale di assegnazione
//rimane il valore originale assegnato: D'amico
//quello che in questo esempio ci serve per inviare una mail all'utente,
//contenente l'username originale (non trasformato).
$pass = mysql_real_escape_string(md5($_POST['pass']));
//La funzione md5 ci permette di trasformare il contenuto di una stringa
//in una sequenza di 32 simboli alfa nimerici detta hash.
//Noi utiliziamo questa funzione per memorizzare nel db NON il valore originale della password,
//ma il suo hash.
//N.B. Questo significa che una volta persa (dimenticata) la password non è più possibile
//risalire al suo valore originale.
$pass_mail = $_POST['pass'];
$firstname = mysql_real_escape_string($_POST['firstname']);
$lastname = mysql_real_escape_string($_POST['lastname']);
//Poi verifichiamo che l'username e l'email non siano gia presenti nel db
$query = "SELECT * FROM user " .
"WHERE user_username = '$user' " .
"OR user_email = '$pass' ";
$result = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($result) != 0)
{
while ($row = mysql_fetch_array($result))
{
//username già presente nel db
if ($row['user_username'] == $user)
{
echo "<p>";
echo "L'username, <b>" . $row['user_username'] . "</b> è già in uso da un altro utente, scegliere uno diverso";
echo "</p>";
}
//email già presente nel db
if ($row['user_email'] == $_POST['email'])
{
echo "<p>";
echo "La casella E-mail, <b>" . $row['user_email'] . "</b> è già presente nel Data Base, scegliere una diversa";
echo "</p>";
}
}
//rimandiamo l'utente alla pagina precedente
echo "<p>";
echo "<a href=\"registrazione.php\">";
echo "<<< Clicca qui per ritornare alla pagina precedente";
echo "</a>";
echo "</p>";
exit();
}
//Se invece username e email non sono presenti nel db procediamo con l'inserimanto
else
{
switch ($_GET['action'])
{
case "add":
switch ($_GET['type'])
{
case "user":
$sql = "INSERT INTO user
(user_firstname,
user_lastname,
user_username,
user_password,
user_email)
VALUES
('$firstname',
'$lastname',
'$user',
$pass',
'" . $_POST['email'] . "')";
$users = mysql_query($sql) or die(mysql_error());
$id = mysql_insert_id(); // recuperiamo l'id (contenuto nel campo user_id) dell'utente appena inserito
break;
}
break;
}
}
//Andiamo avanti assegnando un valore casuale alla variabile $msgid:
//un valore identificativo che verrà inserito nella tabella confirm e permetterà la conclusione dell'iscirzione.
//Anche in questo caso utilizziamo la funzione md5, generando però un hash casuale, perchè l'hash generato sia diverso per ogni iscrizione.
$temp = gettimeofday();
$msec = (int) $temp["usec"];
$msgid = md5(time() . $msec);
$ins = "INSERT INTO confirm
(confirm_validator,
confirm_userid)
VALUES
('$msgid',
'$id')";
$res = mysql_query($ins) or die(mysql_error());
?>
<html>
<head>
<title>Inserimento dati</title>
</head>
<body>
<?php
/*Arrivati a questo punto non ci resta che spedire un'email all'utente (all'indirizzo fornito
in fase di registrazione) che contiene:la sua password in chiaro,il suo username ed un link
alla pagina confirm_reg.php.*/
//Vediamo come funziona
$to = $_POST["email"];
$toname = $_POST["firstname"];
$subject = "Completa la tua registrazione";
/* Prima di continuare apriamo una piccola parentesi, chiarendo un concetto molto semplice:
- Se vogliamo inviare un email che contiene formattazioni html, bisogna ricorrere all'utilizzo di una classe.
- Se si vuol mandare un'email semplice che non contiene formattazioni html, non è necessario usare una classe
Nel nostro esempio, abbiamo scelto di inviare un'eamil, utlizzando una classe che definisce
il corpo del messaggio e le intestazione del messaggio.
Forniamo un link ad una classe mail completa e performante
[url]http://phpmailer.sourceforge.net[/url] */
//Definiamo la classe che definisce il corpo del messaggio ($message) e le intestazione del messaggio ($headers)
$boundary = "==MP_Bound_xyccr948x==";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
$headers .= "From: [email]quellochevuoi@tuoserver.it[/email]\r\n"; //inseriamo l'indirizzo email del mittente, cioè il nostro
$html_msg = "<center>";
$html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
$html_msg .= "<tr><td align=\"center\"> ";
$html_msg .= "</td></tr>";
$html_msg .= "<tr><td>Questi sono i dati della tua registrazione:";
$html_msg .= "</td></tr><tr><td>Username: <font color=\"red\">" . $user_mail . "</font>";
$html_msg .= "</td></tr><tr><td>Password: <font color=\"red\">" . $pass_mail . "</font>";
$html_msg .= "</td></tr><tr><td align=\"center\"> ";
$html_msg .= "</td></tr></table></center>";
$confirmmessage = "Salve " . $toname . ",\n\n";
$confirmmessage .= "per completare la tua registrazione devi cliccare sul link sottostante:\n\n";
$confirmmessage .= $html_msg . "\n\n";
// Attenzione! Qui sotto dobbiamo inserire il percorso esatto che porta alla nostra pagina confirm_reg.php
$confirmmessage .= "<a href=\"http://localhost/percorso pagina confirm_reg.php" .
"?id=$msgid\">Clicca qui per confermare la tua registrazione</a>";
$message = "This is a Multipart Message in MIME format\n";
$message .= "--$boundary\n";
$message .= "Content-type: text/html; charset=iso-8859-1\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= $confirmmessage . "\n";
$message .= "--$boundary--";
$mailsent = mail($to, $subject, $message, $headers);
if ($mailsent)
{
echo "Salve" . $toname . ",<br>";
echo "Un messaggio è stato inviato all'indirizzo <b>" . $to . "</b> da te fornito.<br><br>";
echo "IMPORTANTE:<br>";
echo "Per completare la registrazione al sito devi aprire la tua casella e-mail, leggere il messaggio di conferma e cliccare sul link che troverai all'interno.<br><br>";
} else {
echo "Errore durante l'invio dell'e-mail.";
}
?>
</body>
</html>