2015-09-05 48 views
1

我有一个联系表单将被发送到电子邮件,但是当我尝试发送时,出现500内部服务器错误。Ajax和PHP表单 - 500(内部服务器错误)

我已经检查了可能的错误,如错误的变量名称在HTML文件和这些东西。

我的托管是Digital Ocean。

这里是我的js代码:

var form = $('#form-contact'); 
    var formMessages = $('#form-messages'); 

    $(form).submit(function(event) { 

    event.preventDefault(); 

    var formData = $(form).serialize(); 

    $.ajax({ 
     type : 'POST', 
     url : $(form).attr('action'), 
     data : formData, 
     beforeSend: function(){ 
     $(".load").show(); 
     }, 
    }) 

    .done(function(response) { 
     $(".load").hide(); 

     $(formMessages).removeClass('error'); 
     $(formMessages).addClass('success'); 

     $(formMessages).text(response); 

     $('#form-contact input').val(''); 
     $('#form-contact textarea').val(''); 
    }) 

    .fail(function(data) { 
     $(".load").hide(); 

     $(formMessages).removeClass('success'); 
     $(formMessages).addClass('error'); 

     // Sending 
     if (data.response !== '') { 
     $(formMessages).text(data.responseText); 
     } else { 
     $(formMessages).text('error.'); 
     } 

    }); 

    }); 

在这里,我的PHP代码:http_response_code(500);

你得到它的原因:

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // Get the form fields and remove whitespace. 
    $name = strip_tags(trim($_POST["user_name"])); 
    $name = str_replace(array("\r","\n"),array(" "," "),$name); 
    $email = filter_var(trim($_POST["user_email"]), FILTER_SANITIZE_EMAIL); 
    $message = trim($_POST["user_message"]); 

    // Check that data was sent to the mailer. 
    if (empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     // Set a 400 (bad request) response code and exit. 
     http_response_code(400); 
     echo "error."; 
     exit; 
    } 

    // Set the recipient email address. 
    $recipient = "[email protected]"; 

    // Set the email subject. 
    $subject = "New contact from " . $name; 

    // Build the email content. 
    $email_content = "Name: ". $name; 
    $email_content .= "\nE-mail: ". $email; 
    $email_content .= "\n\nMessage:\n " . $message; 

    // Build the email headers. 
    $email_headers = "From: $name <$email>"; 

    // Send the email. 
    if (mail($recipient, $subject, $email_content, $email_headers)) { 
     // Set a 200 (okay) response code. 
     http_response_code(200); 
     echo "Thanks, your message was sent."; 
    } else { 
     // Set a 500 (internal server error) response code. 
     http_response_code(500); 
     echo "OOps! Sorry, error."; 
    } 

    } else { 
     // Not a POST request, set a 403 (forbidden) response code. 
     http_response_code(403); 
     echo "Problem with your request!"; 
    } 

回答

1

500是从你自己的代码来是因为mail()返回false,这意味着它没有正确配置。您需要安装并设置postfix或fakesendmail。

+0

为什么我需要它!为了什么? – Adam