2015-09-05 94 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