Контактная форма PHP - хотите остаться на моем сайте после отправки - PullRequest
2 голосов
/ 03 октября 2010

Я нахожусь в процессе создания контактной формы PHP , и все, что у меня есть, это небольшая проблема, с моим php-скриптом, когда при отправке электронного письма отправляется новая страница "Спасибо"так что сам сайт с контактной формой исчезает, НО Я НЕ ХОЧУ, ЧТО ПРОИЗОЙДЕТ.

Если нажата кнопка отправки, я хочу остаться на моем сайте, показывая пустойконтактная форма и, возможно, под контактной формой всего 1 строка со словами «Спасибо .....» .

Как я могу это сделать? Есть ликакой-нибудь фрагмент кода, который может объяснить мне, что я должен включить в мой HTML и мой PHP-файл?Надеюсь, так и будет ... Ниже показано, как заканчивается мой php.

// send Email 
if (@mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
    // if email was successfully send
    echo 'Thank you for your Email. We will get in touch with you very soon.';
}

РЕДАКТИРОВАТЬ
@ FreekOne
В настоящее время я использую ваш код с небольшим изменением, потому чтоЯ хотел, чтобы панель с надписью «Спасибо» и / или «Ошибка» выдвинулась, и текст постепенно исчез. Скрипт принимает мой код (потому что он все еще работает), но на самом деле я не могу видеть, что текст действительно исчезает. Я виделобразцы раздвижных панелей с выцветанием в тексте.Таким образом, кажется, что это неправильный вид кодирования, который я сделал.
Пожалуйста, просмотрите код здесь, если хотите:
http://jsbin.com/ohuya3
Maybe Вы можете указать мне правильное направление.Конечно, помощь будет оценена всеми вами, ребята, здесь.

Ответы [ 2 ]

7 голосов
/ 03 октября 2010

Установите форму для отправки данных на ту же страницу, и ваш сценарий прослушивает отправку. Что-то вроде:

contact.php

<?php
// Check if form was previously submitted
if(isset($_POST['myFormSubmitted'])) {
    // Do your form processing here and set the response
    $response = 'Thank you for your Email. We will get in touch with you very soon.';
}
?>
<!-- HTML here -->
<?php
if (isset($response)) { // If a response was set, print it out
    echo $response;
}
?>
<form method="POST" action="contact.php">
    <!-- Your inputs go here -->
    <input type="submit" name="myFormSubmitted" value="Submit">
</form>
<!-- More HTML here -->

UPDATE

Учитывая предоставленную дополнительную информацию, я лично сделал бы это с помощью jQuery через AJAX. Сначала настройте форму и контейнер для результата:

HTML

<form id="myForm" method="POST" action="contact.php">
    <input type="text" id="name" name="name">
    <input type="text" id="email" name="email">
    <input type="text" id="message" name="message">
    <input type="submit" name="myFormSubmitted" value="Submit">
</form>
<div id="formResponse" style="display: none;"></div>

Затем настройте скрипт php, который обрабатывает отправленные данные и выводит ответ.

PHP (contact.php)

<?php
if(isset($_POST['myFormSubmitted'])) {
    // Do your form processing here and set the response
    echo 'Thank you for your Email. We will get in touch with you very soon.';
}
?>

И, наконец, скрипт jQuery, который отправит вашу форму, не покидая страницы, и вставит результат в контейнер результатов (с эффектом простого и простого затухания).

JQuery

$("#myForm").submit(function() {
    $.post('contact.php', {name: $('#name').val(), email: $('#email').val(), message: $('#message').val(), myFormSubmitted: 'yes'}, function(data) {
        $("#formResponse").html(data).fadeIn('100');
        $('#name, #email, #message').val(''); /* Clear the inputs */
    }, 'text');
    return false;
});

Надеюсь, это поможет!

1 голос
/ 03 октября 2010

Все эти ответы ниже неверны.Это заставит вас время от времени получать спам с двойными сообщениями и вводить клиентов в заблуждение.

Хотя решение довольно сложное

Прежде всего, вам нужно выучить золотое правило:
После обработки запроса POST ваш код должен перенаправить браузер методом GET.Без исключений.

Итак, сначала сделайте так:

if ($_SERVER['REQUEST METHOD']=='POST') {
  mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader );
  header("Location: ".$_SERVER['PHP_SELF']);
  exit;
}  
// your form goes here

Вы должны все равно это сделать.

Далее, если вы все еще хотите показать это бесполезное сообщение,у вас есть несколько способов сделать это.

  • с использованием параметра GET
  • с использованием cookie
  • для AJAX.

, например, для использования параметра GET

if ($_SERVER['REQUEST_METHOD']=='POST') {
  mail( $empfaenger, htmlspecialchars( $betreff ), $mailbody, $mailheader );
  header("Location: ".$_SERVER['PHP_SELF']."?thanks");
  exit;
}  
if ($_SERVER['QUERY_STRING']=='thanks') {
  echo 'Thank you for your Email. We will get in touch with you very soon.';
}
// your form goes here
...