php простая форма обратной отправки при обновлении браузера

#javascript #php #jquery #html #forms

#javascript #php #jquery #HTML #формы

Вопрос:

Следующая форма работает по назначению, включая honeypot, но если кто-то нажимает на обновление в браузере до завершения формы, он пытается повторно отправить. Я пробовал сеансы, но это не работает. Кто-нибудь знает, как я могу перенаправить страницу обратно на contact.php или завершить сеанс, чтобы он не отправлялся повторно при обновлении в браузере? (Я потратил 2 дня на поиск ответов). Спасибо

Код:

 <!--form-->
<?php
//fields
    $link_address   = 'contact.php'; // page to redirect to home page
    $honeypot   = '';
    $error      = '';
    $name       = 'Name (required)';
    $email      = 'Email (required)';
    $comments   = 'Message (required)';

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

    $honeypot   = $_POST['honeypot'];
    $name       = $_POST['name'];
    $email      = $_POST['email'];
    $comments   = $_POST['comments'];

// honeypot
if($honeypot)
  exit(1);


//error messages
    if(trim($name) == 'Name (required)') {
        $error = '<div class="error_message">Please enter your Name</div>';
    } else if(trim($name) == '') {
        $error = '<div class="error_message">Please enter your Name</div>';

    } else if(trim($email) == 'Email (required)') {
        $error = '<div class="error_message">Please enter an email address</div>';
    } else if(trim($email) == '') {
        $error = '<div class="error_message">Please enter an email address</div>';

    } else if(!isEmail($email)) {
        $error = '<div class="error_message">Please enter a valid email address</div>';

    } else if(trim($comments) == 'Message (required)') {
        $error = '<div class="error_message">Please enter a Message</div>';
    } else if(trim($comments) == '') {
        $error = '<div class="error_message">Please enter a Message</div>';

    }
    if($error == '') {
        if(get_magic_quotes_gpc()) {
            $comments = stripslashes($comments);
    }

//email address
    $address = "email@youremail.com";
//email message     
    $e_subject = 'Web Message from: ' . $name . '.';
    $e_body = "From:    $namenEmail:   $email rnnMessage:n$commentsnnn";

    $msg = $e_body . $e_content . $e_reply;
    if(mail($address, $e_subject, $msg, "From: $emailrnReply-To: $emailrnReturn-Path: $emailrn"))
    {
//success html page response
     echo "<div id='success_page'>";
     echo "<div id='thanks'>";
     echo "<h1>Message Sent Successfully.</h1>";
     echo "<p id='cprint1'>Thank you. Your message was sent to us. </br>We will be in touch shortly.</p>";
     echo "<p id='print'><a href='javascript:window.print()'>Print your Message</a></p>";
     echo "<p id='cclose'><a href='$link_address'>Close this Message</a></p>";
     echo "</div>";
     echo "<div id='thanks2'>";
     echo "<div id='titlemsg'>Below is your message</div>";
     echo "<p><span>Name:</span> $name</p>";
     echo "<p><span>Email:</span> $email</p>";
     echo "<p><span>Message:</span>$comments</p>";
     echo "</div>";
     echo "</div>";
     } else echo "Error. Mail not sent";
    }
}
    if(!isset($_POST['contactus']) || $error != '') // Do not edit.
    {

?>
<!--form-->



<form method="post" action="" id="myform" autocomplete="off">
<div id="error"><?php echo $error; ?></div>

<input name="name" type="text" id="name" class="form1" 
value="<?php echo $name; ?>" onfocus="if(this.value == 'Name (required)') {this.value = ''; }" onblur="if(this.value == '') { this.value = 'Name (required)'; }" value="Name (required)" />

<input name="email" type="text" id="email" class="form1" 
value="<?php echo $email; ?>" onfocus="if(this.value == 'Email (required)') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Email (required)'; }" value="Email (required)" />

<input name="honeypot" type="text" id="honeypot" class="form2"     value="<?php echo $honeypot; ?>" />

<textarea name="comments" cols="40" rows="3" id="comments" 
value="<?php echo $comments; ?>" onfocus="if(this.value == 'Message (required)') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Message (required)'; }" value="Message (required)"><?php echo $comments; ?></textarea>

<input name="contactus" type="submit" class="submit" id="contactus"     value="Contact us" />


</form>
<?php }
function isEmail($email) { // Email address verification, do not edit.
return(preg_match("/^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,12})$/",$email));
}
?>
  

Комментарии:

1.вы можете использовать перенаправление после сумбита формы header('Location: '.$newURL); php.net/manual/en/function .header.php

Ответ №1:

Вы можете сохранить свое сообщение в сеансе при успешной отправке почты. а затем обновите свою страницу и проверьте, существует ли сеанс, затем покажите сообщение и сбросьте сеанс.

Просто перенаправьте ее на ту же страницу после использования данных формы. Пример-

 header('location:yourpage.php');
  

и вы также можете сбросить значение $_POST после вставки его в базу данных.

 unset($_POST);
  

Ответ №2:

Вы можете использовать перенаправление javascript:

 <script>
    window.location.href = 'test.php';
</script>