PHP表单操作正在重定向到错误的页面

时间:2013-07-30 12:56:47

标签: php forms action

我正在为网站创建一个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>

非常感谢帮助!此外,我是一个相对较新的编码器,因此尽可能简单地放置所有内容会有很大帮助。谢谢!

6 个答案:

答案 0 :(得分:2)

您可以在发送电子邮件后通过替换

重定向用户
exit("Email sent successfully.");

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

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

答案 1 :(得分:1)

变化

exit("Email sent successfully.");

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

或:

include_once('thank_you.php');

答案 2 :(得分:1)

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

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

答案 3 :(得分: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");

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

答案 4 :(得分:0)

if (mail($emailAddresses[$_POST['destemail']],$emailSubject,$emailBody,"From:  
  {$_POST['email']}")) {
   require_once('...path/thankyou.php');
   exit('Email sent successfully'););
}    

答案 5 :(得分:0)

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

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

  1. HTML表单
  2. 处理脚本
  3. 谢谢你。
  4. 每个都是一个页面,必须告诉浏览器转到每个页面。知道这一点,如果遇到问题,你可以在精神上走过每一步。您还可以通过查看Firefox Web控制台(CTRL + SHIFT + K),Chrome开发者工具(CTRL + SHIFT + J)和IE开发人员工具(F12)等调试工具来查看此活动。

    第1步 - &gt;第2步

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

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

    第2步 - &gt;第3步

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