Как сделать так, чтобы сообщение об успешной форме контакта отображалось на той же странице

0

Мой сайт - это один пейджер с навигацией, который ссылается на разные части страницы в том же документе. Поэтому мой контакт находится на сайте stie.com/#contact, а не на сайте site.com/contact.html.

У меня есть контактная форма, закодированная в html, используя метод post, связанный с mail.php. При нажатии кнопки "Отправить" я перенаправляется на сайт site.com/mail.php, где отображается сообщение "Ваше сообщение успешно отправлено". Как получить его так, чтобы он отображался прямо поверх контактной формы, так как у меня нет файла contact.html, чтобы он превратился в contact.php и поместил php-код вправо, где я хочу, чтобы сообщение об успешном запуске отображалось?

<div class="row">
<div class="12u">
<form method="post" action="mail.php">
<div>
<div class="row half">
<div class="6u">
<input type="text" name="name" id="name" placeholder="Name" />
</div>
<div class="6u">
<input type="email" name="email" id="email" placeholder="Email" />
</div>
</div>
<div class="row half">
<div class="12u">
<input type="text" name="subject" id="subject" placeholder="Subject" />
</div>
</div>
<div class="row half">
<div class="12u">
<textarea name="message" id="message" placeholder="Message"></textarea>
</div>
</div>
<div class="row">
<div class="12u">
<a href="#" class="button form-button-submit">Send Message</a>
<a href="#" class="button button-alt form-button-reset">Clear Form</a>
</div>
</div>
</div>
</form>
</div>

Мой Mail.php

<?php

//GET INFO FROM CONTACT FORM
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST ['subject'];
$message = $_POST['message'];
$from .= $_POST ['email'];
$to = '[email protected]';

// compose headers
$headers = "From: $email\r\n";
$headers .= "Reply-To: $email\r\n";

//POST SUBMIT
if ($_POST['sumbit']);
    if ($name != '' && $subject != '' && $message !='' && $email != '') {                
            if (mail ($to, $subject, $from, $message, $headers)) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    } else {
        echo '<p>Please fill in all required fields!!</p>';
    }
?>
  • 1
    Читайте об AJAX-запросах.
  • 0
    может тебе нужен ajax?
Показать ещё 1 комментарий
Теги:
forms
email

3 ответа

1

Сделайте поле действия пустым. Поместите action="" вместо action="mail.php" Затем добавьте свой контент mail.php на свою страницу контактов. Как вы знаете, вам также нужно сохранить эту страницу как PHP; например, mycontactform.php. Таким образом, у вас больше контроля над содержимым и форматом сообщения "отправлено ваше сообщение". Если вы отделите mail.php, вы не сможете обращаться к разделам в mycontactform.php.

Безопасность и уязвимость кодов PHP, которые вы используете, должны быть рассмотрены после того, как вы завершили кодирование страницы и протестировали ее как в рабочем состоянии, так и в нужном формате, поскольку для этого требуется более углубленное изучение соглашений и обычаев PHP. source: набор пошаговых руководств с использованием HTML5, CSS3 и PHP (8)

1

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

<?php

$confDisplay = 'display:none;';

// if the url param exists, display confirmation
if(isset($_GET["confirm"]) && $_GET["confirm"]==true){
  $confDisplay = 'display:inline;';
}

?>

    ...
    <div style="<?php echo $confDisplay; ?>">
    Your form has been submitted!
    </div>
    ...

Просто установите URL-адрес вашей формы на ту же страницу с ?confirm=true в конце.

  • 0
    будет ли это работать с утверждениями IF, которые есть у меня при нажатии кнопки «Отправить»? Я предполагаю, что это произойдет, если я поместу его под оператором IF и настрою каждый оператор, как вы делали выше.
  • 0
    $_GET["confirm"] спрашивает, есть ли в вашем URL подтверждение. Это неверно, если URL вашей страницы не дополнен следующим параметром: «mysite.php? Verify = true». Перейдите на страницу без параметра подтверждения, чтобы скрыть подтверждение. Он будет отображаться только в том случае, если он у вас есть в URL-адресе, поэтому ваша форма отправляется, и только URL-адрес действия отправки формы включает его. Все остальное просто указывает на страницу в обычном режиме.
Показать ещё 6 комментариев
0

Обратите внимание, что ваш скрипт mail.php уязвим для атаки на заголовки. Вам нужно избежать переменной $ _POST ['email']. Вы должны удалить специальные символы \n и \ r. Это можно сделать легко, используя функцию str_replace.

  • 0
    Я не понимаю escape-переменную. Я бы потерял некоторые функции, если бы я удалил \ n и \ r нет?
  • 0
    Каждый почтовый заголовок разделен двумя специальными символами \ r \ n (CRLF). В заголовке From и Reply-To, определенных в вашем коде, используется адрес электронной почты пользователя, полученный из контактной формы. Правило № 1 - никогда не доверять пользовательскому вводу. Пользователь может легко добавить эти два специальных символа и ввести заголовки почты. Например, он мог набрать: [email protected] \ n \ rBcc: [email protected], [email protected]. Он также отправит письмо по адресу [email protected] и [email protected], и мы этого не хотим. Некоторые люди могут использовать это для рассылки спама. Поэтому вам нужно обнаружить символы \ n и \ r и удалить их.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню