0

我目前正在为一个网站创建一个 PHP 邮件表单。该文件称为“contactus.php”。单击表单末尾的“提交”按钮后,我需要将页面重定向到“thankyou.php”。

目前它只带我到一个名为“contactus.php/contactus.php”的页面,除了消息“电子邮件发送成功”之外完全空白。

我在代码工作中看到“电子邮件发送成功”的位置,但我很困惑如何更改它,以及如何更改一般的表单操作,以便电子邮件仍会发送,但页面将被定向到我创建的页面“thankyou.php”。我试过用“'thankyou.php'”简单地替换表单操作,但是当它将页面定向到“thankyou.php”时,电子邮件不再发送。

这是页面顶部的PHP:

<?php

require_once("./include/fgcontactform.php");
$formproc = new FGContactForm();


// config
$emailAddresses = array(
  ''=>'',
   'Service Department'=>'fakeemail1.com',
   'Sales Department'=>'fakeemail2.com',
   'Parts Department'=>'fakeemail3.com',
   'Customer Service Department'=>'fakeemail4.com',
   'Bids Department'=>'fakeemail5.com'
// etc etc
);
$emailSubject = 'Submitted from Online Form';

// If we are dealing with a form submission, send an email
   if (isset($_POST['name'])) {

// Check the email selected is valid
   if (!isset($emailAddresses[$_POST['destemail']])) {
   exit("Sorry, you have selected an invalid email option.");
}
// Create the body of the email message
      $emailBody = "Dear {$_POST['destemail']}, \n\n {$_POST['message']} \n\n 
      From: {$_POST['name']} \n Company: {$_POST['company']}  \n 
      Phone Number:   {$_POST['phone']} \n E-mail: {$_POST['email']}  
      \n Preferred method of contact: {$_POST['method']} \n\n Submitted  
      from Online 'Contact Us' Form";
//    Send the email and report the result

      if (mail($emailAddresses[$_POST['destemail']],$emailSubject,$emailBody,"From:  
      {$_POST['email']}")) {exit("Email sent successfully.");
      } else {exit("Email sending failed");
   }
 }

 // Output the html form

 ?>

这是 PHP 的形式:

<?php
if(!empty($errors)){
echo "<p class='err'>".nl2br($errors)."</p>";
}
?>
<div id='contact_form_errorloc' class='err'></div>




<!-- Form Code Start -->
<form id='contactus' action='<?php echo $formproc->GetSelfScript(); echo    
htmlentities($_SERVER['PHP_SELF']);  ?>'  method='post' accept-charset='UTF-8'>

<fieldset >

<input type='hidden' name='submitted' id='submitted' value='1'/>
<input type='hidden' name='<?php echo $formproc->GetFormIDInputName(); ?>' value='<?php   
echo $formproc->GetFormIDInputValue(); ?>'/>


<div><span class='error'><?php echo $formproc->GetErrorMessage(); ?></span></div>

<div class='container'>
   <label for='name' >Your Full Name*: </label><br/>
   <input type='text' name='name' id='name' value='<?php echo $formproc-
   >SafeDisplay('name') ?>' maxlength="50" /><br/>
   <span id='contactus_name_errorloc' class='error'></span>
</div>

<div class='container'>
   <label for='email' >Email Address*:</label><br/>
   <input type='text' name='email' id='email' value='<?php echo $formproc-
   >SafeDisplay('email') ?>' maxlength="50" /><br/>
   <span id='contactus_email_errorloc' class='error'></span>
</div>

<div class='container'>
   <label for='phone' >Phone*:</label><br/>
   <input type='text' name='phone' id='phone' value='<?php echo $formproc-  
   >SafeDisplay('phone') ?>' maxlength="50" /><br/>
   <span id='contactus_phone_errorloc' class='error'></span>
</div>

<div class='container'>
   <label for='company' >Company Name*:</label><br/>
   <input type='text' name='company' id='company' value='<?php echo $formproc-  
   >SafeDisplay('company') ?>' maxlength="50" /><br/>
   <span id='contactus_company_errorloc' class='error'></span>
</div>

<div class='container'>
   <label for='message' >Message*:</label><br/>
   <textarea rows="10" cols="50" name='message' id='message'><?php echo $formproc-  
   >SafeDisplay('message') ?></textarea>
   <span id='contactus_message_errorloc' class='error'></span>
</div> 

<div class='container'>
   <label for='method' >
   How would you prefer we contact you?*</label></br>
   <select name="method" id="method"><?php echo $formproc->SafeDisplay('method') ?>
   <option value=""></option>
   <option value="Phone" name="phone">Phone</option>
   <option value="E-mail" name="email">E-Mail</option>
   </select></br>
   <span id='contactus_method_errorloc' class='error'></span>
</div>

<div class='container'>
   <label for='destemail' > Which department are you trying to reach?*</label></br>
   <select name="destemail" id="destemail">
   <?php foreach ($emailAddresses as $name => $email) { ?>
   <option value="<?php echo htmlspecialchars($name); ?>"><?php echo  
   htmlspecialchars($name) ; ?></option>
   <?php } ?></select></br>
   <span id='contactus_destemail_errorloc' class='error'></span>
</div>

<input type="submit" />
</fieldset>
</form>

非常感谢您的帮助!另外,我是一个相对较新的编码员,所以尽可能简单地说明一切会很有帮助。谢谢!

4

6 回答 6

2

您可以通过替换发送电子邮件后重定向用户

exit("Email sent successfully.");

header('Location: /thankyou.php');
exit();

它将通过您当前的脚本处理表单,然后将用户重定向到指定页面(您也可以指定绝对 url,例如http://example.org/thankyou.php)。

于 2013-07-30T13:01:54.310 回答
1

改变

exit("Email sent successfully.");

header('Location: http://www.site.com/thank_you.php');
exit();

或者:

include_once('thank_you.php');
于 2013-07-30T12:59:05.140 回答
1

contactus.php存储/邮寄后联系我们的详细信息重定向到thankyou.php

使用header("location:thankyou.php"); exit();

于 2013-07-30T13:01:02.693 回答
0

您必须更改这部分代码:

  if (mail($emailAddresses[$_POST['destemail']],$emailSubject,$emailBody,"From:  
  {$_POST['email']}")) {exit("Email sent successfully.");
  } else {exit("Email sending failed");

  if (mail($emailAddresses[$_POST['destemail']],$emailSubject,$emailBody,"From:  
  {$_POST['email']}")) {header("Location: thankyou.php");
  } else {exit("Email sending failed");

因为您的表单使用,它会发回自己以验证所有表单数据,然后发送电子邮件。解决此问题的另一种方法是通过 Javascript 验证所有内容,然后决定是标记需要注意的表单部分还是继续执行脚本。action='<?php echo $formproc->GetSelfScript(); echo
htmlentities($_SERVER['PHP_SELF']); ?>'
thankyou.php

于 2013-07-30T13:02:37.627 回答
0
if (mail($emailAddresses[$_POST['destemail']],$emailSubject,$emailBody,"From:  
  {$_POST['email']}")) {
   require_once('...path/thankyou.php');
   exit('Email sent successfully'););
}    
于 2013-07-30T13:05:52.967 回答
0

我认为最好了解表单提交中发生了什么,并消除这里发生了一些魔术的想法。

通过表单提交,您正在处理各种工作流程:

  1. HTML 表单
  2. 处理脚本
  3. 谢谢页面。

每个都是一个页面,必须告诉浏览器转到每个页面。知道了这一点,如果有任何问题,你可以在精神上走过每一步。您还可以通过查看 Firefox Web 控制台 (CTRL + SHIFT + K)、Chrome 开发人员工具 (CTRL + SHIFT + J) 和 IE 开发人员工具 (F12) 等调试工具来查看此活动。

第 1 步 -> 第 2 步

第 2 步(处理脚本)中页面的加载是通过您拥有的表单的 action 属性完成的,看起来您可能已经知道了。但是,表单最初提交的 URL 看起来有点滑稽。它应该指向服务器上的一个文件,我希望是“contactus.php”。使用“contactus.php/contactus.php”,Apache Web 服务器必须翻译 URL,将第二个“contactus.php”移动到查询字符串中。

在您的示例中,您将此操作更改为“thankyou.php”,这将有效地完全跳过步骤 2 中的处理脚本的加载,就像经验一样。

第 2 步 -> 第 3 步

正如其他人所建议的那样,使用 PHP 的标头方法 ( header("LOCATION: thankyou.php")) 代替exit("Email sent successfully.");是一个很好的解决方案。这是通过设置 HTTP 标头告诉浏览器转到“thankyou.php”。这是一种key: value格式,其中 LOCATION 是浏览器操作的特殊键。

于 2013-07-30T13:36:50.753 回答