初级PHP邮件函数问题+;服务器错误

初级PHP邮件函数问题+;服务器错误,php,html,Php,Html,所以我是PHP的超级初学者,但我目前正在建立我的第一个网站,我想在网站上有一个用户可以填写的联系表单,然后将他们的信息发送到电子邮件 因此,我使用“mail()”函数为此编写了PHP,但出于某种原因,每当用户点击submit时,它只会进入一个带有代码的页面,而不是我在echo语句中链接到的页面 以下是我的PHP: <?php $name = $_POST['name']; $email = $_POST['email']; $phone = $_POST['phone']; $messa

所以我是PHP的超级初学者,但我目前正在建立我的第一个网站,我想在网站上有一个用户可以填写的联系表单,然后将他们的信息发送到电子邮件

因此,我使用“mail()”函数为此编写了PHP,但出于某种原因,每当用户点击submit时,它只会进入一个带有代码的页面,而不是我在echo语句中链接到的页面

以下是我的PHP:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$formcontent="From: $name \n Phone: $phone \n Message: $message";
$recipient = "rowan.krishnan@tufts.edu";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
$url = 'contact.html';
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'  
?>

这是我的html:

<div id="emailform">
   <form action="mail.php" method="POST">
       Name: <input type="text" name="name">
       Email: <input type="text" name="email">
       Phone: <input type="text" name="phone">
       Message: <textarea name="message" rows="6" cols="25"></textarea><br />
       <input type="submit" value="Send"><input type="reset" value="Clear">
   </form>
</div>

姓名:
电邮:
电话:
消息:
我的最后一个问题与我使用的web服务器/主机(hostgator)有关。出于某种原因,每当我上传任何包含PHP的文档时,我都会收到一个500的内部服务器错误,我不确定那里到底发生了什么。如果你们中有人知道我在说什么,如果你们有建议就好了


非常感谢您阅读所有这些内容并提供帮助

您缺少一个
在回音的末尾,这很可能导致出现白色页面

 echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
                                                           ^

您不能在本地运行php,首先需要运行安装了php的web服务器。尝试xamp,因为它非常容易安装和运行,并且允许您在本地运行php

生成变量后,一个简单的php电子邮件脚本如下所示。。(你似乎有正确的答案)

正如Kai Qing提到的,使用
标题('location:contact.html')
以重定向页面。echo只需将您发送的内容打印到屏幕上即可。 更好的方法是在html文档中使用回调函数。因此,您可以使用javascript函数发送表单。例如,一旦收到响应(发送电子邮件),回调函数将执行您喜欢的操作,例如显示不同的页面或打印确认消息

jQuery方法看起来像这样

//send form to order.php for further processing
var formData = $('#promo-form').serialize();
$.post('order.php',formData,formSent);
//formSent is the callback funciton
服务器500错误可能是由于php文件上设置的权限造成的。在ftp客户端中,检查php文件的权限是否设置为0644。有关此错误的更多信息,请访问:

希望这有帮助。

尝试一下:

<?php
//
///////////////////////////////////////////////////////////////////////
//  This would be your mail.php file
///////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////
//  Lets Just Check Basic PHP Installation Is Working
///////////////////////////////////////////////////////////////////////
//
if (!function_exists('mail')) {
    die('mail() is not available');
}
//
//
//
///////////////////////////////////////////////////////////////////////
//  Validate Required Passed Fields 
///////////////////////////////////////////////////////////////////////
//
if ( isset($_POST['name']) && $_POST['name'] !='' && isset($_POST['email']) && $_POST['email'] !='' && isset($_POST['phone']) && $_POST['phone'] !='' && isset($_POST['message']) && $_POST['message'] !='' ) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
}
else
{
    die('Sadly you did not complete all of the fields on our contact form');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Validate The Email... This Is Just An Example
///////////////////////////////////////////////////////////////////////
//
if (preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){2,4}$/i', trim($email))) {
    die('Email Address Invalid. Please Check Your Email.');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Build Your Email Message
///////////////////////////////////////////////////////////////////////
//
$EmailMessage .= "Name: " . $name . " \n\n";
$EmailMessage .= "Email: " . $email . " \n\n";
$EmailMessage .= "Phone: " . $phone . " \n\n";
$EmailMessage .= "Message: " . $message . " \n\n";
//
//
///////////////////////////////////////////////////////////////////////
//  Build Email Header
///////////////////////////////////////////////////////////////////////
//
$EmailHeader .= "From: " . $name . " <" . $email . "> \n";
$EmailHeader .= "Reply-To: " . $name . " <" . $email . "> \n";
$EmailHeader .= "Return-Path: " . $name . " <" . $email . "> \n"; // running a windows server??
//
//
///////////////////////////////////////////////////////////////////////
//  Send The Email & Confirm It Processed
///////////////////////////////////////////////////////////////////////
//
if (mail('Rowan Krishnan <rowan.krishnan@tufts.edu>', 'Contact Form', $EmailMessage, $EmailHeader)) {
    //
    // it appears to have worked, so redirect somewhere else
    //
    header("Location: contact.php");
    die('Contact Form Redirect');
} else {
    echo('Contact Form Failed');
}
?>


所以问题在于如何让任何PHP脚本正常工作,而与发送邮件无关?这有两个部分。首先,我不明白为什么我的“echo”语句不起作用,当我尝试在本地运行它时,它只会进入一个白色的PHP代码页。其次,每当我尝试访问包含任何PHP或指向PHP文件的链接的页面时,我的服务器都会给我一个错误。第一个问题可能是由第二个问题引起的:如果脚本没有运行,您将不会得到任何回显。但我只在我的在线服务器上收到一个错误。难道我不能在本地运行它而不出现类似的问题吗?有两件事-首先,服务器上启用了php,对不对>-您应该将邮件脚本放在一个条件中,该条件仅在填充字段时执行。你可以直接打电话给它,给你发空邮件。不需要元刷新。您可以使用标题('location:contact.html');相反而且主人盖特也是个笑话。以同样的价格,你可以从像media temple或dreamhost这样的地方得到真正的服务。嗯,这并不能解决问题。可能我无法在本地运行PHP脚本,因为我的计算机上没有安装邮件服务器?有时您必须设置邮件参数。我不知道如何在SO或Google上搜索,但我不认为这会导致你的白色页面。在实际的网站上,它显示了hostgator默认的500内部服务器错误页面的源代码。在我的计算机上,在我点击submit后,我可以在白色页面上看到PHP代码,源代码就是我使用的普通PHP。@RowanK。看起来您没有正确访问本地主机。你应该有一个像localhost/path/to/your/scripts/mail.php或127.0.0.1这样的链接来代替localhost我猜它在本地不起作用,因为我需要为我自己的计算机下载某种服务器,比如WampServer。更严重的问题是为什么它不能与hostgator联机工作。
//send form to order.php for further processing
var formData = $('#promo-form').serialize();
$.post('order.php',formData,formSent);
//formSent is the callback funciton
<?php
//
///////////////////////////////////////////////////////////////////////
//  This would be your mail.php file
///////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////
//  Lets Just Check Basic PHP Installation Is Working
///////////////////////////////////////////////////////////////////////
//
if (!function_exists('mail')) {
    die('mail() is not available');
}
//
//
//
///////////////////////////////////////////////////////////////////////
//  Validate Required Passed Fields 
///////////////////////////////////////////////////////////////////////
//
if ( isset($_POST['name']) && $_POST['name'] !='' && isset($_POST['email']) && $_POST['email'] !='' && isset($_POST['phone']) && $_POST['phone'] !='' && isset($_POST['message']) && $_POST['message'] !='' ) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];
}
else
{
    die('Sadly you did not complete all of the fields on our contact form');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Validate The Email... This Is Just An Example
///////////////////////////////////////////////////////////////////////
//
if (preg_match('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`{|}~]+@([-0-9A-Z]+\.)+([0-9A-Z]){2,4}$/i', trim($email))) {
    die('Email Address Invalid. Please Check Your Email.');
}
//
//
///////////////////////////////////////////////////////////////////////
//  Build Your Email Message
///////////////////////////////////////////////////////////////////////
//
$EmailMessage .= "Name: " . $name . " \n\n";
$EmailMessage .= "Email: " . $email . " \n\n";
$EmailMessage .= "Phone: " . $phone . " \n\n";
$EmailMessage .= "Message: " . $message . " \n\n";
//
//
///////////////////////////////////////////////////////////////////////
//  Build Email Header
///////////////////////////////////////////////////////////////////////
//
$EmailHeader .= "From: " . $name . " <" . $email . "> \n";
$EmailHeader .= "Reply-To: " . $name . " <" . $email . "> \n";
$EmailHeader .= "Return-Path: " . $name . " <" . $email . "> \n"; // running a windows server??
//
//
///////////////////////////////////////////////////////////////////////
//  Send The Email & Confirm It Processed
///////////////////////////////////////////////////////////////////////
//
if (mail('Rowan Krishnan <rowan.krishnan@tufts.edu>', 'Contact Form', $EmailMessage, $EmailHeader)) {
    //
    // it appears to have worked, so redirect somewhere else
    //
    header("Location: contact.php");
    die('Contact Form Redirect');
} else {
    echo('Contact Form Failed');
}
?>