我正在为网站创建一个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>
非常感谢帮助!此外,我是一个相对较新的编码器,因此尽可能简单地放置所有内容会有很大帮助。谢谢!
答案 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
,因此会回复自身以验证所有表单数据,然后发送电子邮件。另一种解决方法是通过Javascript验证所有内容,然后决定是否标记需要注意的表单部分或转到
htmlentities($_SERVER['PHP_SELF']); ?>'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)
我认为最好先了解表单提交中发生了什么,并消除这里发生了一些魔法的想法。
使用表单提交,您正在处理各种工作流程:
每个都是一个页面,必须告诉浏览器转到每个页面。知道这一点,如果遇到问题,你可以在精神上走过每一步。您还可以通过查看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是浏览器操作的特殊键。