2013-11-12 4 views
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-запросах. – esqew

+0

Возможно, вам нужен ajax? – Prashank

+0

@esqew Я проверю AJAX спасибо за отзыв! – tattvabodha

ответ

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 и настроил бы каждый оператор, как вы делали выше – tattvabodha

+0

'$ _GET [" confirm "]' спрашивает, находится ли в вашем URL-адрес подтверждение. Он неверен, если ваш URL-адрес страницы не скомпонован параметром: 'mysite.php? Confirm = true '. Посетите свою страницу без подтверждения, чтобы скрыть подтверждение. Он будет отображаться только в том случае, если у вас есть int int url, поэтому ваша форма отправляется, и в нее входит только ссылка для отправки формы. Все остальное просто указывает на страницу в обычном режиме. – John

+0

этот метод хорош для передачи наивных параметров, но его всегда подвержен угрозе, поэтому избегайте этого, вместо этого код html + php на той же странице! –

0

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

+0

Я не понимаю escape-переменную. Я потерял бы функциональность, если бы удалил \ n и \ r no? – tattvabodha

+0

Каждый почтовый заголовок разделяется двумя специальными символами \ r \ n (CRLF). Заголовок _From_ и _Reply-To_, определенные в вашем коде, используют непосредственно адрес электронной почты пользователя, полученный из контактной формы. Правило № 1 - никогда не доверять пользовательскому вводу. Пользователь может добавлять эти два специальных символа и легко добавлять заголовки писем. Например, он может ввести: [email protected] \ n \ rBcc: [email protected], [email protected] Он также отправит письмо на адрес [email protected] и [email protected], и мы этого не хотим. Некоторые люди могут использовать это для спама адресов. Поэтому вам нужно определить символ \ n и \ r и удалить их. – Linblow

+0

[Что означает «побег»] (http://stackoverflow.com/questions/10646142/what-does-it-mean-to-escape-a-string). Я не должен был использовать это слово. – Linblow

1

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

Защита и уязвимость используемых вами кодов PHP должны быть решены после того, как вы завершили кодировку страницы и протестировали ее как в рабочем состоянии, так и в нужном формате, поскольку для этого необходимо более углубленное изучение соглашений и обычаев PHP. источник: A Set of Step by Step Tutorials Using HTML5, CSS3 and PHP (8)

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