2017-06-26 1 views
0

私はajaxとPHPを使用して連絡フォームを取得しようとしていますが、毎回500エラー応答を得ています。 PHPは私の強みではありません。私は1つあることがわかっているので、私のコードでエラーを見つけようと数時間を費やしました。私もリンターを試したけど、彼らはそれがすべていいと私に伝えている。PHPメール()を使用して連絡フォームが500エラーで応答します

JS

$(function() { 
    // Get the form. 
    var form = $('#ajax-contact'); 
    // Get the response messages div. 
    var formMessages = $('#form-messages'); 

    // Set up an event listener for the contact form. 
    $(form).submit(function(event) { 
     // Stop the browser from submitting the form. 
     event.preventDefault(); 

     // Serialize the form data. 
     var formData = $(form).serialize(); 

     // Submit the form using AJAX. 
     $.ajax({ 
      type: 'POST', 
      url: $(form).attr('action'), 
      data: formData 
     }) 
     .done(function(response) { 
      // Make sure that the form-messages div has the 'success' class. 
      $(formMessages).removeClass('error'); 
      $(formMessages).addClass('success'); 

      // Set the message text. 
      $(formMessages).text('Message sent. Expect a reply within 24 hours!'); 

      // Clear the form. 
      $('#name').val(''); 
      $('#email').val(''); 
      $('#company').val(''); 
      $('#message').val(''); 
     }) 
     .fail(function(data) { 
      // Make sure that the formMessages div has the 'error' class. 
      $(formMessages).removeClass('success'); 
      $(formMessages).addClass('error'); 

      // Set the message text if there's a respone 
      if (data.responseText !== '') { 
       $(formMessages).text(data.responseText); 
      } else { 
       $(formMessages).text('Oops! An error occured and your message could not be sent.'); 
      } 
     }); 
    }); 
}); 

PHP

<?php 
// Only process POST reqeusts. 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // Get the form fields and remove whitespace. 
    $name = strip_tags(trim($_POST["name"])); 
     $name = str_replace(array("\r","\n"),array(" "," "),$name); 
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL); 
    $company = strip_tags(trim($_POST["company"])); 
     $company = str_replace(array("\r","\n"),array(" "," "),$company); 
    $message = trim($_POST["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 "There was a problem with your submission. Please complete the form and try again."; 
     exit; 
    } 

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

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

    // Build the email content. 
    $email_content = "Name: $name\n"; 
    $email_content .= "Email: $email\n"; 
    $email_content .= "Company: $company\n\n"; 
    $email_content .= "Message:\n$message\n"; 

    // 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 "Thank You! Your message has been sent."; 
    } else { 
     // Set a 500 (internal server error) response code. 
     http_response_code(500); 
     echo "Something went wrong and your message couldn't be sent."; 
    } 

} else { 
    // Not a POST request, set a 403 (forbidden) response code. 
    http_response_code(403); 
    echo "There was a problem with your submission, please try again."; 
} 
?> 
+3

ログには何が表示されますか? 500はサーバーエラーです。 –

+0

@ Fred-ii-ログを表示しようとしましたが、ステータス>モニタに移動しました。PHPMyAdminでは、低速クエリログと一般ログを有効にする権限がありません。ログを見る別の方法はありますか? –

+2

MySQLではなく、HTTPサーバーのエラーログを確認する必要があります。また、 'http_response_code(500)'を持つ 'else'ブロックに' var_dump(error_get_last()); 'を追加してみてください。 – Phil

答えて

0

あなたのコード例では、

if (mail($recipient, $subject, $email_content, $email_headers)) { 

そして、それは言ってelseステートメントにダウンジャンプfalseを返しますmail場合を言うラインを持っていますthis:

// Set a 500 (internal server error) response code. 
http_response_code(500); 
echo "Something went wrong and your message couldn't be sent."; 

あなたのサーバーにはsendmailが設定されていないようです。

あなたがアクセス権を持っている、および/または(あなたがそれを使用する方法を知っていればまたはxdebugの)var_dumpを使用する場合は、サーバーのログを読んで試してみて、そのようなあなたのパラメータをプリントアウト:

if (mail($recipient, $subject, $email_content, $email_headers)) { 
    // ... 
} 
else { 
    var_dump(error_get_last()); 
    var_dump($recipient); 
    var_dump($subject); 
    var_dump($email_content); 
    var_dump($email_headers); 
} 
+0

私はそれをすべて与える、リンクされたトピックは本当に役立つ、ありがとう! –

関連する問題