Io ad ogni iscritto alla newsletter invierei una password usa e getta, valida per un solo download. Nel database creerei una tabella con tre campi (o più in caso vengono registrati anche i dati anagrafici dell'iscritto):
utenti_newsletter
|email|password|validità|
Nella pagina dove invii al database i dati del form d'iscrizione, farei generare una password casuale tramite la funzione rand()
codice:
<?php
$email = $_POST['email']; //recupero l'email inserita nel form d' iscrizione
$pws_down = rand(10,90); // genero una password casuale tramite la funzione rand()
// mi connetto al DB
$connessione = mysql_connect("host","username","password");
mysql_select_db("nome_db");
// Inserisco nella tabella degli iscritti l'email, la password e imposto la sua validità a 1
INSERT INTO utenti_newsletter(email,password,validità) VALUES ('$email','$pws_down','1');
// Invio una email contenente la password usa e getta
$destinatario = "$email";
$oggetto = "Password download e-book";
$messaggio= "<p>La sua password per accedere al download è: $pws_down</p>";
$messaggio= "<p>Link per il download: <a href='http://iltuosito.it/pagina_download.php'>Download</a></p>";
$mittente = "tu <tu@tu.com>";
$html = "MIME-Version: 1.0\r\n";
$html .= "Content-type: text/html; charset=iso-8859-1\r\n";
if(@mail($destinatario, $oggetto, $messaggio, $html . "From: $mittente")) {
echo "Email Inviata";
} else {
echo "Errore!";
}
mysql_close($db); //chiudo la connessione al db
//reindirizzo l'utente a una pagina di ringraziamento, dove gli comunico che gli è stata inviata una email contenete la password e il link per il download.
header("Location: ../pagina_ringraziamento.php");
?>
Poi nella pagina_download.php crei un form dove richiedi la password all'utente:
codice:
<html>
<head><title>Pagina Download</title></head>
<body>
<form id="controllo_download" action="controllo_download.php" method="post">
<p>Inserisci la password per accedere al download</font></p>
<p><input type="password" name="pws_down" value=""/></p>
</form>
</body>
</html>
Nella pagina controllo_download.php esegui una query dove ti accerti se nella tabella utenti_newsletter esiste la password inserita dall'utente e se è stata già utilizzata, controllando se il valore del campo validità sia impostato su 1. In caso la password esiste e il campo validità sia impostato su 1, fai accedere accedere l'utente al download ed imposti il campo validità su 0, altrimenti lo rimandi a una pagina di errore.
codice:
<?php
$pass_down = $_POST['pws_down']; //recupero la password inserita nel form
// mi connetto al DB
$connessione = mysql_connect("host","username","password");
mysql_select_db("nome_db");
//controllo se nella tabella utenti_newsletter esiste la password inserita dall'utente e che sia ancora attiva (validità = 1)
$query_controllo = mysql_query("SELECT * FROM utenti_newsletter WHERE password = '$pass_down' AND validità ='1' ");
//controllo se i risultati ottenuti dalla query sono maggiori di 0
$conteggio_record = mysql_num_rows($query_controllo);
//Se i risultati sono maggiori di 0, modifico il valore del campo validità da 1 a 0 rendendo non più valida e reindirizzo l'utente alla pagina del download
if ($conteggio_record > 0){
$modifica_validità = mysql_query("UPDATE utenti_newsletter SET validità = '0' WHERE password = '$pass_down' ");
echo '<script language=javascript>document.location.href = "http://tuosito.it/download/ebook.pdf";</script> ';
} else {
// in caso contrario, reindirizzo l'utente a una pagina di errore
echo '<script language=javascript>document.location.href ="http://tuosito.it/pagina_di_errore.php";</script> ';
}