Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di ada50
    Registrato dal
    Aug 2009
    Messaggi
    27

    Download di un file inserendo una password

    Salve ho un e-book che gli utenti possono scaricare come regalo dopo essersi iscritti alla newsletter.
    Ieri consultando le statistiche del sito mi sono accorto che il numero dei download è superiore al numero di iscritti alla newsletter.

    Ho provato ad inserire nella ricerca di Google il titolo dell' e-book e anche se lo rappresenta come "untitled.pdf" dà la possibilità di scaricarlo.

    L' e-book è costato parecchio lavoro e vorrei proteggerlo garantendo però a chi si iscrive di poterlo scaricare.

    L'iscrizione alla newsletter avviene tramite un form php che porta ad una pagina con i ringraziamenti nella quale si trova il link per scaricarlo, anche questa pagina è in php.

    Intanto ho inserito il disallow per il file nel robots.txt.

    Potete suggerirmi qualche soluzione che preveda l'inserimento di una password per poter scaricare il file?
    Grazie
    ada50

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,779
    visto che lavori in pi-acca-pì... sposto-lì

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    23
    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:
    
    
    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> ';
    
    }


    Ultima modifica di Dr.chm; 26-08-2015 a 20:17
    Se sei padrone di te stesso sei padrone
    del mondo...

  4. #4
    Utente di HTML.it L'avatar di ada50
    Registrato dal
    Aug 2009
    Messaggi
    27
    Ciao e grazie per la risposta, mi sembra un ottimo sistema e vorrei provarlo.
    Mi resta un dubbio su come integrare lo script PHP per la pagina di invio al DB con lo script del form sempre in PHP già esistente sulla mia pagina, lo script è questo:

    <?php
    require 'phpmailerautoload.php';
    function ValidateEmail($email)
    {
    $pattern = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
    return preg_match($pattern, $email);
    }
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['formid'] == 'newsletterform')
    {
    $mailto = 'io-news@io;
    $mailfrom = isset($_POST['email']) ? $_POST['email'] : $mailto;
    $subject = 'Subscribe';
    $message = '';
    $success_url = './news_conferma.php';
    $error_url = './error.html';
    $csvFile = "./formdata.csv";
    $error = '';
    $eol = "\n";
    $max_filesize = isset($_POST['filesize']) ? $_POST['filesize'] * 1024 : 1024000;
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = 'SMTP.mio';
    $mail->Port = 25;
    $mail->SMTPAuth = true;
    $mail->Username = 'mio@user';
    $mail->Password = 'password';
    $mail->Subject = stripslashes($subject);
    $mail->From = $mailfrom;
    $mail->FromName = $mailfrom;
    $mailto_array = explode(",", $mailto);
    for ($i = 0; $i < count($mailto_array); $i++)
    {
    if(trim($mailto_array[$i]) != "")
    {
    $mail->AddAddress($mailto_array[$i], "");
    }
    }
    $mail->AddReplyTo($mailfrom);
    if (!ValidateEmail($mailfrom))
    {
    $error .= "The specified email address is invalid!\n<br>";
    }
    if (!empty($error))
    {
    $errorcode = file_get_contents($error_url);
    $replace = "##error##";
    $errorcode = str_replace($replace, $error, $errorcode);
    echo $errorcode;
    exit;
    }
    $internalfields = array ("submit", "reset", "send", "filesize", "formid", "captcha_code", "recaptcha_challenge_field", "recaptcha_response_field", "g-recaptcha-response");
    $message .= $eol;
    foreach ($_POST as $key => $value)
    {
    if (!in_array(strtolower($key), $internalfields))
    {
    $logdata .= ',';
    if (!is_array($value))
    {
    $message .= ucwords(str_replace("_", " ", $key)) . " : " . $value . $eol;
    $value = str_replace(",", " ", $value);
    $logdata .= $value;
    }
    else
    {
    $message .= ucwords(str_replace("_", " ", $key)) . " : " . implode(",", $value) . $eol;
    $logdata .= implode("|", $value);
    }
    }
    }
    $logdata = str_replace("\r", "", $logdata);
    $logdata = str_replace("\n", " ", $logdata);
    $logdata .= "\r\n";
    $handle = fopen($csvFile, 'a') or die("can't open file");
    $logtime = date("Y-m-d H:i:s,");
    fwrite($handle, $logtime);
    fwrite($handle, $logdata);
    fclose($handle);
    $mail->CharSet = 'ISO-8859-1';
    if (!empty($_FILES))
    {
    foreach ($_FILES as $key => $value)
    {
    if ($_FILES[$key]['error'] == 0 && $_FILES[$key]['size'] <= $max_filesize)
    {
    $mail->AddAttachment($_FILES[$key]['tmp_name'], $_FILES[$key]['name']);
    }
    }
    }
    $mail->WordWrap = 80;
    $mail->Body = $message;
    if (!$mail->Send())
    {
    die('PHPMailer error: ' . $mail->ErrorInfo);
    }
    header('Location: '.$success_url);
    exit;
    }
    ?>

    Non sono espertissimo di php e non so se il tuo script vada inserito prima o dopo di questo.

    Ti ringrazio in anticipo
    ada50

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    23
    Non credo che ti convenga integrarlo con quello già esistente, ti conviene inserire uno simile a quello che ti ho postato, poichè svolge tutte le funzioni che ti servono. :-)
    Se sei padrone di te stesso sei padrone
    del mondo...

  6. #6
    Utente di HTML.it L'avatar di ada50
    Registrato dal
    Aug 2009
    Messaggi
    27
    Scusami non voglio assolutamente approfittare, il codice che ho postato io è quello del mio Form che contiene solo due campi "Nome, Email" dell'iscritto cliccando su INVIA i dati vengono inviati al momento a un csv, in più l'utente viene inserito automaticamente nella lista di Sendblaster.

    Fare un DB al posto del csv non mi crea problemi, scorrendo il tuo script non sono riuscito a capire come legargli i due campi che ho nel form.


    Forse non uso i termini giusti ma spero di essere riuscito a farmi capire-
    ada50

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    23
    Scusami non voglio assolutamente approfittare
    Tranquillo

    scorrendo il tuo script non sono riuscito a capire come legargli i due campi che ho nel form.
    Glie li passi tramite il metodo POST
    codice:
    <?php
    
    
     $email    = $_POST['email'];
     $nome    = $_POST['nome'];
    
    
    ?>
    Se sei padrone di te stesso sei padrone
    del mondo...

  8. #8
    Utente di HTML.it L'avatar di ada50
    Registrato dal
    Aug 2009
    Messaggi
    27
    Ok ci provo e dopo posto il risultato, prima però devo formattare il mio PC quindi non so quando potrò postare.
    Intanto grazie
    ada50

  9. #9
    Utente di HTML.it L'avatar di ada50
    Registrato dal
    Aug 2009
    Messaggi
    27

    Test dello script

    @Dr.chm
    Ciao nella pagina "invio dati" mi dà errore su questa riga:
    Codice PHP:
    INSERT INTO utenti_news(nome,email,password,validitàVALUES('$nome','$email','$pws_down','1'); 
    al posto di utenti_news ho messo il nome della mia tabella, e ho aggiunto nome ai dati

    questo è l'errore:
    [03-Sep-2015 17:47:07 Europe/Berlin] PHP Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/account/public_html/test/newsletter.php on line
    107
    [03-Sep-2015 17:49:45 Europe/Berlin] PHP Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/account/public_html/test/newsletter.php on line
    107
    [03-Sep-2015 18:04:14 Europe/Berlin] PHP Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/account/public_html/test/newsletter.php on line
    107
    [03-Sep-2015 18:04:23 Europe/Berlin] PHP Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/account/public_html/test/newsletter.php on line
    107
    [03-Sep-2015 18:11:45 Europe/Berlin] PHP Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/account/public_html/test/newsletter.php on line
    107

    Non riesco a correggerlo
    ada50

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    23
    Ciao, modifica il codice così:

    codice:
    $inserimento_dati = mysql_query ("INSERT INTO tua_tabella (nome,email,password,validità) VALUES ('$nome','$email','$pws_down','1')");
    fammi sapere
    Ultima modifica di Dr.chm; 03-09-2015 a 20:46
    Se sei padrone di te stesso sei padrone
    del mondo...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.