在我的website上,我使用了联系表单,这给我带来了很多麻烦。我已经花了一些时间实际使用exim4在64位Debian上运行mail()
PHP函数,但我终于做到了,并发送了邮件。
现在我遇到了另一个问题,我无法弄清楚如何解决。首先是代码。
<?php
$your_email = 'blahblah@gmail.com';
session_start();
$errors = '';
$name = '';
$visitor_email = '';
$user_message = '';
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$user_message = $_POST['message'];
///------------Do Validations-------------
if (empty($name) || empty($visitor_email)) {
$errors .= "\n Name and Email are required fields. ";
}
if (IsInjected($visitor_email)) {
$errors .= "\n Bad email value!";
}
if (empty($_SESSION['6_letters_code']) || strcmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0) {
//Note: the captcha code is compared case insensitively.
//if you want case sensitive match, update the check above to
// strcmp()
$errors .= "\n The captcha code does not match!";
}
if (empty($errors)) {
//send the email
$to = $your_email;
$subject = "New form submission";
$from = $your_email;
$body = "A user $name submitted the contact form:\n" . "Name: $name\n" . "Email: $visitor_email \n" . "Message: \n " . "$user_message\n";
$headers = "From: $from \r\n";
$headers .= "Reply-To: $visitor_email \r\n";
if (mail($to, $subject, $body, $headers)) {
header('Location: http://www.lolstreamgallery.net/thank-you.html');
} else {
$errors .= "\n E-Mail coulnd be sent!";
}
}
}
问题是标头重定向不起作用。 mail()
确实有效,因此应执行标头。当我在本地测试文件时,确实会发生重定向。
如果您想测试联系表单,可以执行here。
Here是整个文件代码:
EDIT2:
我现在正在使用Ian Brindley的功能,它使重定向工作,但不是头功能。似乎在标题之前有一些输出。
答案 0 :(得分:1)
乍一看,我在header()调用之前看不到任何输出。
如果没有更好的选择,这里是我刚才发现的一个功能,我现在几乎用于所有重定向。
function redirect($url){
if (!headers_sent()){
header('Location: '.$url);
exit;
}
else {
echo '<script type="text/javascript">';
echo 'window.location.href="'.$url.'";';
echo '</script>';
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
echo '</noscript>'; exit;
}
}
我知道非服务器端重定向并不理想。