简体   繁体   中英

Ajax and PHP form - 500 (Internal Server Error)

I have a contact form that will be sent to an e-mail, but when I try to send I get the 500 Internal Server Error.

I already check probable errors like wrong variable name on HTML file and these stuff.

My hosting is Digital Ocean.

Here is my js code:

  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.' );
      }

    });

  } );

And here, my PHP code:

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 = "mail@here.com";

  // 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!";
  }

That 500 is coming from your own code: http_response_code(500);

The reason your getting it is because mail() is returning false, which means that it's not configured properly. You'll need to install and set up postfix or fakesendmail.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM