• User Attivo

    Rimuovere "dati in memoria" dopo invio mail

    Ciao a tutti.
    Ho preparato un form e faccio l'invio della mail tramite php. Fino a qui nulla di strano.
    Ho notato però che ogni volta che ricarico la pagina la mail viene inviata nuovamente, come se i dati inseriti nel form rimanessero in memoria.
    Come faccio a risolvere questo problema? Qualcuno potrebbe aiutarmi per favore? Grazie.


  • User

    Ciao,

    Potresti darci un esempio del code per favore? L'ipotesi piu' probabile e' che tu stia utilizzando la stessa pagina per compilare il form ed inviare l'email, e che i dati siano cached dal browser.


  • User Attivo

    Ciao e grazie per avermi risposto. la tua diagnosi mi sembra esatta!L'unica cosa che ho notato è che se cancello la cache del browser il problema rimane. Ti posto il mio codice.
    [PHP]
    <?php
    if(isset($_POST['submit'])){

    $name = !empty($_POST['name'])?$_POST['name']:'';
    $email = !empty($_POST['email'])?$_POST['email']:'';
    $city = !empty($_POST['city'])?$_POST['city']:'';
    $nationality = !empty($_POST['nationality'])?$_POST['nationality']:'';
    $location = !empty($_POST['location'])?$_POST['location']:'';
    $pax = !empty($_POST['pax'])?$_POST['pax']:'';
    $message = !empty($_POST['message'])?$_POST['message']:'';
    $checkbox = !empty($_POST['checkbox'])?$_POST['checkbox']:'no';

    // corpo della mail
    $to = '[email protected]'; // <--- inserire e-mail destinatario
    $subject = "Ti ha scritto dal tuo sito: $name";
    $htmlContent = "
    <ul style='list-style: none; padding-left: 0;'>
    <li style='margin: 0 0 15px 0;'>Questi sono i dettagli del messaggio:</li>
    <li style='margin: 0 0 5px 0;'><b>Nome:</b> ".$name."</li>
    <li style='margin: 0 0 5px 0;'><b>E-mail:</b> ".$email."</li>
    <li style='margin: 0 0 5px 0;'><b>Città:</b> ".$city."</li>
    <li style='margin: 0 0 5px 0;'><b>Nazionalità:</b> ".$nationality."</li>
    <li style='margin: 0 0 5px 0;'><b>Luogo in Italia:</b> ".$location."</li>
    <li style='margin: 0 0 5px 0;'><b>Persone:</b> ".$pax."</li>
    <li style='margin: 0 0 5px 0;'><b>Messaggio:</b> ".$message."</li>
    <li style='margin: 0 0 5px 0;'><b>Accettazione Privacy:</b> ".$checkbox."</li>
    </ul>
    ";

    // impostare sempre content-type quando si invia una mail in HTML
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

    // headers
    $headers .= 'From:'.$name.' <'.$email.'>' . "\r\n";

    // invio mail
    @mail($to,$subject,$htmlContent,$headers);

    $succMsg = '<script>
    UIkit.notify({
    message : "Message sent!",
    status : "success",
    timeout : 0,
    pos : "top-center"
    });
    </script>';

    $name = '';
    $email = '';
    $city = '';
    $nationality = '';
    $location = '';
    $pax = '';
    $message = '';
    $checkbox = '';
    }

    else {
    $errMsg = '<script>
    UIkit.notify({
    message : "Message not sent!",
    status : "danger",
    timeout : 0,
    pos : "top-center"
    });
    </script>';
    }

    ?>

    <?php if(!empty($errMsg)): ?><div class="errMsg"><?php echo $errMsg; ?></div><?php endif; ?>
    <?php if(!empty($succMsg)): ?><div class="succMsg"><?php echo $succMsg; ?></div><?php endif; ?>
    [/PHP]

    Grazie per l'aiuto che mi stai dando.


  • User

    Ciao,

    if(isset($_POST['submit'])){

    Quando ricarichi la pagina, di fatto re-invii una richiesta identica. Quindi, re-invii una richiesta di tipo POST che viene catturata in $_POST, eseguendo quindi lo script php.

    La soluzione piu' semplice e' di re-indirizzare l'utente verso un'altra pagina.

    Ps: Io leverai licenseKey e applicationId dal post. 🙂


  • User Attivo

    Ti ringrazio per l'avvertimento. La licenseKey e applicationId non è roba mia. Me li ha inseriti in automatico il forum. Ho eliminato la parte HTML altrimenti non me li toglieva.

    Tornando a noi. Dovrei creare una pagina apposita solo per scriverci: "complimenti hai inviato il tuo messaggio!". E' una cosa che non amo fare particolarmente.

    Soluzioni migliori non ce ne sono? Lo script originale faceva anche la verifica del re-captcha di google e non mi faceva "questo verso".