2014-11-25 3 views
0

Хорошо, таким образом я получил контактную форму:Форма контакта Исчезновение Когда установлено Div?

<?php 
    if (isset($_POST['subtest'])) { 

     $to = '[email protected]'; 

     $name = $_POST['firstname']; 
     $lastName = $_POST['lastname']; 
     $email = $_POST['email']; 
     $city = $_POST['city']; 
     $state = $_POST['state']; 
     $zip = $_POST['zip']; 
     $comments = $_POST['comments']; 

     $Message = <<< STOP 
     From: $name $lastName 
     Email: $email 
     In: $city, $state, $zip 
     Comments: $comments 

STOP; 

     $subject = "Contact Request"; 
     $headers = 'From: system'; 

     if (mail($to, $subject, $Message, $headers)) { 
      echo '<div id="thanks">Mail sent</div>'; 
      exit(); 
     } 
     else { 
      echo 'Mail Failed'; 
     } 
    } 
    ?> 

    <form name="contact_form" action="" method="post"> 
     <input type="hidden" name="subtest" value="true"> 
     First Name:<br> 
     <input type="text" name="firstname"> 
     <br> 
     Last Name:<br> 
     <input type="text" name="lastname"> 
     <br> 
     Email Address:<br> 
     <input type="text" name="email"> 
     <br> 
     City:<br> 
     <input type="text" name="city"> 
     <br> 
     State:<br> 
     <input type="text" name="state"> 
     <br> 
     Zip:<br> 
     <input type="text" name="zip"> 
     <br> 
     Comments:<br> 
     <textarea name="comments"></textarea> 
     <br> 

     <input id="submit" type="submit" name="submit" value="Send"> 
     <br> 
    </form> 

Проблема в том, я хочу echo mail sent правильно отформатированные (с зеленым цветом, в правильном положении на странице и т.д.). Как вы можете видеть, я положил его в div. Когда я отправляю форму, я перенаправляюсь обратно на страницу формы, за исключением того, что вся форма и нижний колонтитул исчезают, а почта отправляется в нижней части страницы (правильно отформатирована).

Любые идеи?

+0

Проблема, с которой вы столкнетесь с этим кодом, заключается в том, что даже если она будет работать по назначению после удаления 'exit()', обновление страницы будет отправлено по почте ... – raidenace

ответ

0

Функция exit() предотвращает выполнение остальной части скрипта, которая включает в себя вашу форму и нижний колонтитул. Удалите его, и он будет работать.

if (mail($to, $subject, $Message, $headers)) { 
    echo '<div id="thanks">Mail sent</div>'; 
} else { 
    echo 'Mail Failed'; 
} 

Как Raidenance отметил, если кто-то обновляет эту страницу после отправки формы он будет отправить письмо повторно адрес электронной почты. Лучшим решением этой проблемы является размещать свою контактную форму на другой URL (/contact/submit, например), и по завершении выполнения сценария на этом URL просто перенаправляет обратно в форму контакта с параметром

header("Location:/contact?success=true"); 

Тогда на вашем контактная форма страница:

if (isset($_GET['success']) && $_GET['success'] == "true") { 
    echo '<div id="thanks">Mail sent</div>'; 
} else { 
    echo 'Mail Failed'; 
} 

Это предотвратит повторную загрузку и получение электронной почты пользователем.