2015-10-16 2 views
0

Я искал здесь и, похоже, не нашел удовлетворительного решения, поэтому задаю вопрос.Одностраничная контактная форма, перенаправление на форму после отправки и предотвращения повторной отправки на странице обновления

У меня есть сайт на одной странице с формой, которая работает в отношении отправки на правильный адрес электронной почты и отображения правильного эхо-заголовка результата; но при тестировании каждый раз, когда я обновляю страницу, которую отправляет сообщение, в дополнение к этому я хотел бы, чтобы порт просмотра браузера отображал форму контакта после нажатия кнопки отправки, чтобы пользователь мог видеть форму, отправленную или Сообщения об ошибках.

Это мой код ...

<?php 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $from = $_POST['email']; 
     $to = '[email protected]**************.com'; 
     $subject = 'New enquiry from website'; 
     $human = $_POST['human']; 

     $body = "From: $name\n E-Mail: $email\n Message:\n $message"; 

     if ($_POST['submit'] && $human == '4') {     
      if (mail ($to, $subject, $body, $from)) { 
      echo '<p class="emailSent">Thanks. Your message has been sent! We will be in touch shortly.</p>'; 
     } else { 
      echo '<p class="errorMessage">Something went wrong, go back and try again!</p>'; 
     } 
     } else if ($_POST['submit'] && $human != '4') { 
      echo '<p class="errorMessage">You answered the anti-spam question incorrectly. Please try again.</p>'; 
     } 
    ?> 


    <div class="large-6 medium-6 small-12 columns form-left"> 
     <form class="footer-form" method="post" action="index.php"> 
     <div class="row"> 
       <div class="medium-9 medium-push-3 columns"> 
       <label> 
        <input name="name" type="name" id="name" value="" placeholder="Your name" /> 
       </label> 
       </div> 
     </div> 
     <div class="row"> 
       <div class="medium-9 medium-push-3 columns"> 
       <label> 
        <input name="email" type="email" id="email" value="" placeholder="Email Address" /> 
       </label> 
       </div> 
     </div> 
     <div class="row"> 
       <div class="medium-9 medium-push-3 columns"> 
       <label> 
        <textarea name="message" id="message" placeholder="Your enquiry"></textarea> 
       </label> 
       </div> 
     </div> 
     <div class="row"> 
       <div class="medium-9 medium-push-3 columns"> 
        <label>*What is 2+2? (Anti-spam)</label> 
        <input name="human" id="name" placeholder="Type Here">  
       </div> 
     </div> 
     <div class="row"> 
      <div class="medium-9 medium-push-3 columns"> 
       <button class="submit contact-button" id="name" name="submit" type="submit" value="Send email">Send</button> 
      </div> 
     </div> 
     </form> 
    </div> 

Я бы очень признателен за помощь по этому вопросу.

Спасибо.

Марк

+0

https: //en.wikipedia.org/wiki/Post/Redirect/Get - объединить это с якорем и хешем в форме action/URL, которая перенаправляется и выполняется. – CBroe

ответ

1

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

EDIT

Хорошо, есть страницы, в частности для формы, давайте назовем его form.php.

На вашей странице шаблона или в любом месте вашего пользовательского интерфейса (для этого примера давайте притворимся, что это index.php), создайте форму так же, как и вы, но вместо установки «действия» страницы для индексации. php, установите его в form.php.

например. <form action="form.php" method="post">

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

Используйте это, если вы хотите, чтобы вернуть их к index.php мгновенно

Еще сделайте первый шаг, который был вместо того, чтобы «действие» страницы на index.php, установите to form.php.

например. <form action="form.php" method="post">

Теперь, когда пользователь находится на form.php, все будет происходить довольно быстро, поэтому убедитесь, что в конце сценария, вы перенаправить их обратно в index.php с помощью header('Location: index.php');

Вы также сказали, что вы хотел метод ошибки или успеха, без проблем. Если вы хотите, чтобы сообщение зависело от операторов if на странице формы, сделайте это. На form.php, прежде чем перенаправить их, создайте переменную $ message и настройте ее так, как хотите. Затем вернитесь в index.php, напишите include_once('form.php');, который позволит вам использовать переменную $message, созданную вами на form.php в вашем index.php.

Возможно, сообщение должно быть $message = "", прежде чем пользователь будет перенаправлен, так что пока не будет отправлена ​​форма, ничего не появится, но это решение должно работать нормально, надеюсь, это поможет!

+0

HI, спасибо за ваш ответ. Да, я понял, что это всегда будет сделано. Итак, как мне перенаправить обратно в форму после выполнения скрипта? Мне нужно, чтобы он переместился в конкретное место, где форма находится на странице (внизу), чтобы пользователь мог видеть сообщение об успехе или ошибке. В момент отправки формы он просто возвращается в начало страницы. Спасибо. Marc –

Смежные вопросы