【问题标题】:PHP contact form handler not working?PHP联系表单处理程序不起作用?
【发布时间】:2012-04-17 21:50:04
【问题描述】:

我需要一个非常简单但有效的 PHP 表单处理程序来处理这个表单:

<form id="contact" method="post" action="contact_handle.php">
<label for="name">Name:</label>
<input type="text" class="text_style" placeholder="John Doe" name="name" /><br />
<label for="email">Email:</label> 
<input type="email" class="text_style" placeholder="email@example.com" name="email" /><br />   
<label for="message">Subject:</label>
<textarea class="areawidth" rows="4" name="message" /></textarea><br />
<button id="contactbutton" type="submit">Submit</button>
</form>  

这是我目前拥有的,但它不会发送电子邮件,也不会像我预期的那样重定向。而且我似乎无法弄清楚发生了什么。

<?php  
$invalid = '';
$my_email = 'my@email.com'; 

// Validate input:
if(empty($_POST['name'])  ||
   empty($_POST['email']) ||
   empty($_POST['message']))
{
    $invalid.= "\n All fields are required";
}
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];   

// Validate email:
if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",
$email))
{
    $invalid .= "\n Invalid email address";
}

// Send email if no errors detected:
if( empty($invalid))
{
$to = $my_email;
$subject = "Contact form submission: $name";
$body = "You have received a new message. ".
" Here are the details:\n Name: $name \n ".
"Email: $email\n Message:\n $message";
$headers = "From: $email\n";
$headers .= "Reply-To: $email";
mail($to,$subject,$body,$headers);  

//redirect to the thank you page:    
header('Location: contact_thanks.php');
}
?>    

提交后,它会将我带到显示空白且无法重定向的contact_handle.php。

【问题讨论】:

  • 您是在本地主机还是实时服务器上进行测试?您是否收到任何错误消息?
  • 您的表单处理程序的第 10 行似乎有一个错字 - 您将错误消息存储在 $error 变量中,而它可能应该是 $invalid,这是其余的代码使用。
  • 糟糕,修正了错字,但结果仍然相同。我在本地主机和实时服务器上都进行了测试,但都不起作用。不显示错误消息。只是一个空白屏幕,没有电子邮件。
  • ini_set('display_errors', 1); error_reporting(E_ALL); 添加到contact_handle.php 的顶部。我认为发生了致命错误,您的设置阻止它显示任何内容。或者,如果您的表单无效,则不会打印任何内容,也不会发生重定向。
  • 这个 $email_address 来自哪里??

标签: php forms email redirect handler


【解决方案1】:

我认为重定向必须是浏览器的第一个输出,所以如果输出其他任何内容,它将不起作用。

为什么不直接包含感谢页面而不是重定向到它,即。

include 'contact_thanks.php';

【讨论】:

  • 这使得表格工作了!谢谢!我应该首先做到这一点。我的网站已经使用 PHP 进行了模板化,因此简单的包含要容易得多。对不起,我不能给你投票,我还没有足够的积分。
【解决方案2】:

如果您提供所有代码,问题是您的表单抛出错误(通过将文本添加到 $invalid,但没有代码可以处理 $invalid不是为空。要解决此问题,请在结尾处关闭 } 后添加:

echo $invalid;

【讨论】:

  • 谢谢,表单现在显示错误(如果有)。简单的错误应该很容易注意到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多