Как использовать почтовую функцию PHP, не покидая страницы, с которой она вызывается - PullRequest
1 голос
/ 20 февраля 2011

Я использую html форму регистрации для веб-сайта, который я создаю.Форма принимает имя, фамилию, адрес электронной почты, дату рождения (месяц, день, год) и пол.Он вызывает php-файл для обработки результатов и отправляет их мне по электронной почте следующим образом:

<form  method="post" action="sendMail.php" >

php-файл выглядит так:

<?php
$firstName = $_REQUEST['FirstName'] ;
$lastName = $_REQUEST['LastName'] ;
$email = $_REQUEST['EmailAddress'] ;
$birthdate = $_REQUEST['month'] ;
$sex = $_REQUEST['sex'] ;

$message .=  "First Name: \t";
$message  = $firstName;
$message .= "\n";
$message .=  "Last Name: \t";
$message .= $lastName;
$message .= "\n";
$message .=  "Email: \t";
$message .= $email;
$message .= "\n";
$message .=  "Birthdate: \t";
$message .= $birthdate;
$message .= "\n";
$message .=  "Sex: \t";
$message .= $sex;

mail( "ty@ollielifestyle.com", "Sign-Up Form Results", $message, "From: $email" );
/*?>  header( "Location: http://www.example.com/thankyou.html" );
<?php */
?>

Скрипт отлично работает для обработки и отправки электронной почтырезультаты, но я не знаю, как заставить функцию 'php mail ()' вернуться на ту же самую страницу вызова.Я знаю, что обычно людям нравится показывать страницу с благодарностями, но я не хочу, чтобы посетители просто переходили на страницу с благодарностями.Есть ли способ изменить функцию php mail (), чтобы она перенаправляла на ту же самую страницу, которая вызывала ее, или вызывала ее, не покидая страницу в первую очередь?Спасибо за любые подсказки заранее!

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

Версия 1:

$message .=  "First Name: \t";
$message  = $firstName;
$message .= "\n";
$message .=  "Last Name: \t";
$message .= $lastName;
$message .= "\n";
$message .=  "Email: \t";
$message .= $email;
$message .= "\n";
$message .=  "Birthdate: \t";
$message .= $birthdate;
$message .= "\n";
$message .=  "Sex: \t";
$message .= $sex;

mail( "ymaxwell86@gmail.com", "Sign-Up Form Results", $message, "From: $email" );  
echo "Thank you for using our mail form";
}
?>       

Имя: *Фамилия:*Адрес электронной почты:*День рождения: месяц январь февраль март апрель май июнь июль август сентябрь октябрь ноябрь декабрь день год функция changeDate (i) {var e = document.getElementById ('day');while (e.length> 0) e.remove (e.length-1);var j = -1;if (i == "na") k = 0;иначе, если (i == 2) k = 28;иначе если (i == 4 || i == 6 || i == 9 || i == 11) k = 30;иначе к = 31;while (j ++ 1909) {var s = document.createElement ('option');var e = document.getElementById ('year');s.text = у;s.value = у;try {e.add (s, null);} catch (ex) {e.add (s);}}

Пол: Мужской Женский* обязательные поля

Версия 2:

<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  $firstName = $_REQUEST['FirstName'] ;
  $lastName = $_REQUEST['LastName'] ;
  $email = $_REQUEST['EmailAddress'] ;
  $birthdate = $_REQUEST['month'] ;
  $sex = $_REQUEST['sex'] ;

  $message .=  "First Name: \t";
  $message  = $firstName;
  $message .= "\n";
  $message .=  "Last Name: \t";
  $message .= $lastName;
  $message .= "\n";
  $message .=  "Email: \t";
  $message .= $email;
  $message .= "\n";
  $message .=  "Birthdate: \t";
  $message .= $birthdate;
  $message .= "\n";
  $message .=  "Sex: \t";
  $message .= $sex;

  mail( "ymaxwell86@gmail.com", "Sign-Up Form Results", $message, "From: $email" );  
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form action=''  method='post'>
       <p>First Name:* &nbsp; &nbsp; &nbsp;&nbsp;
         <input name='FirstName' type='text' id='FirstName' size='25' />&nbsp; &nbsp;<br />

         Last Name:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
         <input name='LastName' type='text' id='LastName' size='25'/><br />
         <br />
         Email Address:*&nbsp;
         <input name='EmailAddress' type='text' id='EmailAddress' size='25' onblur='valid_email=validateEmail(email_field,mandatory,messages);' />
         <br />
         <br />
         Birthday: &nbsp;&nbsp;&nbsp;
         <select name='month' onChange='changeDate(this.options[selectedIndex].value);'>
           <option value='na'>Month</option>
           <option value='1'>January</option>
           <option value='2'>February</option>
           <option value='3'>March</option>
           <option value='4'>April</option>
           <option value='5'>May</option>
           <option value='6'>June</option>
           <option value='7'>July</option>
           <option value='8'>August</option>
           <option value='9'>September</option>
           <option value='10'>October</option>
           <option value='11'>November</option>
           <option value='12'>December</option>
         </select>
         <select name='day' id='day'>
           <option value='na'>Day</option>
         </select>
         <select name='year' id='year'>
           <option value='na'>Year</option>
         </select>
         <script language='JavaScript' type='text/javascript'>
function changeDate(i){
var e = document.getElementById('day');
while(e.length>0)
e.remove(e.length-1);
var j=-1;
if(i=='na')
k=0;
else if(i==2)
k=28;
else if(i==4||i==6||i==9||i==11)
k=30;
else
k=31;
while(j++<k){
var s=document.createElement('option');
var e=document.getElementById('day');    
if(j==0){
s.text='Day';
s.value='na';    
try{
e.add(s,null);}
catch(ex){
e.add(s);}}
else{
s.text=j;
s.value=j;
try{
e.add(s,null);}
catch(ex){
e.add(s);}}}}
y = 2010;
while (y-->1909){
var s = document.createElement('option');
var e = document.getElementById('year');
s.text=y;
s.value=y;
try{
e.add(s,null);}
catch(ex){
e.add(s);}}
</script>
         <br />
       </p>
       <p>Gender:  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
         <input type='radio' name='sex' value='male' /> Male
         <input type='radio' name='sex' value='female' /> Female
         <br />
       <div id='mailListNote'>
         *required fields
       </div>
         <br />
  <br />

         &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
         <input type='submit' name='submit' value='Submit' onclick='valid_email =validateEmail(email_field,mandatory,messages); '/>
         &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
         <INPUT TYPE=RESET  onClick='return confirm('Are you sure you want to reset the form?')'>
       </p>
     </form>";
  }
?>

Ответы [ 4 ]

3 голосов
/ 20 февраля 2011

Используйте ajax для отправки почты, не покидая страницы.

2 голосов
/ 20 февраля 2011

У вас есть два основных варианта:

  • Просто измените URL в header("location:…");, чтобы вернуться на исходную страницу.
  • Или используйте Ajax для отправки формы в фоновом режиме. Есть много полезных плагинов на основе JQuery. Google твой друг.

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

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

0 голосов
/ 21 февраля 2011

В зависимости от того, как закодирована страница вашей формы, вы можете поместить точный PHP, указанный в вашем вопросе, в верхнюю часть самой страницы формы и обернуть его в оператор «если», который определяет, будет ли отправлена ​​форма. e.g.:

if (isset($_REQUEST['EmailAddress'])) { /** your code here **/}

Тогда вам нужно будет отправить форму, как указано в предыдущем ответе.

<form action="" method="POST">

Таким образом, вы можете использовать то же выражение if для отображения обратной связи или благодарности. Чтобы продвинуться в этом еще дальше, этот подход позволяет легко сообщать об ошибках в случае, если представленные данные не пройдут процесс проверки.

0 голосов
/ 20 февраля 2011

Вы можете определить пустое действие, и форма будет отправляться на тот же URL-адрес, на котором она размещена, например:

<form action="" method="POST">
...