2015-05-28 5 views
-1

Я работаю над формой для отправки по электронной почте, и после того, как я отправлю и обновил сообщение, продолжайте идти по электронной почте. Как я могу это исправить? Мой код ниже.PHP Контактная форма отправить

 <?php 

     if (isset($_POST['contact_name']) && isset($_POST['contact_email']) && isset($_POST['contact_text'])) { 
      $contact_name = $_POST['contact_name']; 
      $contact_email = $_POST['contact_email']; 
      $contact_text = $_POST['contact_text']; 

      if (!empty($contact_name) && !empty($contact_email) && !empty($contact_text)) { 

       $to = '[email protected]'; 
       $subject = 'Contact form'; 
       $body = $contact_name."\n".$contact_text; 
       $headers = 'From: '.$contact_email; 

       if (mail($to, $subject, $body, $headers)) { 
       Echo 'Thanks for contacting me. I will be in touch soon.'; 
       } else { 
       echo 'Sorry, an error occurred. Please try again later.'; 
       } 

      } else { 
       echo 'All fields are required'; 
      } 
     } 

     ?> 
+0

сессий и жетоны и перенаправлять и перепроверить форму. Не могу победить эту комбинацию. –

ответ

1

Вы должны перенаправить пользователя на другую страницу после обработки формы & отправки по электронной почте.

Для перенаправления, вы можете использовать:

header("Location:thanks.php"); 
exit(); 

Ваш код должен быть изменен на:

if (mail($to, $subject, $body, $headers)) { 
     header("Location:thanks.php"); //<-- Note change here 
     exit(); 
    } else { 
     echo 'Sorry, an error occurred. Please try again later.'; 
    } 
+0

Где в моем коде я должен добавить это? – drizzyme

3

Если вы хотите, чтобы предотвратить ситуацию, когда пользователь повторно отправляет форму, обновив страницу, хорошим выбором является перенаправить пользователю на ту же страницу. Таким образом, последний запрос в истории браузера изменяется с POST на GET, а после обновления просто перезагружает страницу без повторной отправки формы.

Это может быть достигнуто с помощью следующего кода:

 header("HTTP/1.1 302 Moved Temporarily");   
     header("Location: the-url-of-the-page.php", true, 302); 
     header("Connection: close"); 
     exit(); 

Пожалуйста, убедитесь, что код выполняется после обработки формы (отправка электронной почты), но перед отправкой каких-либо данных в браузер.

+0

Какой код переадресации по умолчанию для заголовка? По-моему, это 302 по умолчанию. –

+0

да, это по умолчанию 302, но 1) я никогда не верю, что PHP меняется с версии на версию 2) Я вижу это каждый раз, когда вижу код и не нуждаюсь в документации, чтобы помнить. –

1

В качестве альтернативы, в если отделение, где вы выдаете почту и поблагодарить пользователя, вы можете сбросить пост вары, как показано ниже,

unset($_POST['contact_name']); 
Смежные вопросы