使用AJAX和PHP提交表单时,localhost上有500个错误

时间:2017-03-30 22:26:38

标签: javascript php jquery

我对PHP很新,而且我无法从本地主机发送测试电子邮件。

我有一个3字段表格,我希望我可以让用户提交表格&能够在没有页面刷新的情况下看到成功消息。我收到了我在代码中设置的错误消息但由于某种原因,我无法实际收到要发送的电子邮件/显示成功消息。

这是我的代码:

JS

jQuery( document ).ready( function( $ ) {

    var form = $('#ajax-contact');

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

    $(form).submit(function(e) {
        e.preventDefault();

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

        $.ajax({
            type: 'POST',
            url: $(form).attr('action'),
            data: formData
        })
        .done(function(response) {

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


            $(formMessages).text(response);


            $('#name, #email, #number').val('');
        })
        .fail(function(data) {

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


            if (data.responseText !== '') {
                $(formMessages).text(data.responseText);
            } else {
                $(formMessages).text('Oops! An error occured and your message could not be sent.');
            }
        });

    });

});

mailer.php

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = strip_tags(trim($_POST["name"]));
            $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $number = trim($_POST["number"]);

    if ( empty($name) OR empty($number) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        http_response_code(400);
        echo "Sorry, there seems to be a problem submitting your details, please try again or contacts us";
        exit;
    }
    $recipient = "sandy@sandygarrido.co.uk";
    $subject = "$name has given you their details to call them back";
    $email_content = "
    <html>
    <style>
    body {
        background-color: white;
    }

    .email-container{
        background-color:#c1c1c1;
        max-width:400px;
        margin:0 auto;
        padding:30px 10px;
        border-radius:10px;
        border: 2px solid #515151;
    }

    </style>
    <body>
    <div class="email-container">

    Dear Knight &amp; Jones, <br />
     <br />
    A potential client has requested a call back. Their details are as follows: <br />
     <br />
    Name: $name\n <br />
    Email: $email\n\n <br />
    Telephone: \n$numer\n
    </div>

    </body>
    </html>"
    $email_headers = "From: $name <$email>";
    if (mail($recipient, $subject, $email_content, $email_headers)) {
        http_response_code(200);
        echo "Thank You! Your message has been sent.";
    } else {
        http_response_code(500);
        echo "Sorry, there seems to be a problem submitting your details, please try again or contacts us";
    }

} else {
    http_response_code(403);
    echo "There was a problem with your submission, please try again.";
}

?>

HTML

<form class="requestcall-form" id="ajax-contact" method="post" action="mailer.php">
  <input type="text" id="name" name="name" placeholder="Full Name" required>
  <input type="text" id="email" name="email" placeholder="Email Address" required>
  <input type="text" id="number" name="number" placeholder="Contact number" required>
  <input class="submit" type="submit" name="submit" value="Submit">
</form>
<div id="form-messages"></div>

2 个答案:

答案 0 :(得分:1)

输出$email_content的方式有问题。字符串格式不正确 检查<div class="email-container">并将其更改为<div class='email-container'> 另外,在$email_content

之后添加(;)

答案 1 :(得分:0)

另一个答案是正确的,我认为我会为处理大块文本heredoc strings提供更好的解决方案。不用担心未转义的报价会破坏你的一天。使用它,您的代码将如下所示:

...
$recipient = "sandy@sandygarrido.co.uk";
$subject = "$name has given you their details to call them back";
$email_content = <<< HTML
<html>
<style>
body {
    background-color: white;
}

.email-container{
    background-color:#c1c1c1;
    max-width:400px;
    margin:0 auto;
    padding:30px 10px;
    border-radius:10px;
    border: 2px solid #515151;
}

</style>
<body>
<div class="email-container">

Dear Knight &amp; Jones, <br />
 <br />
A potential client has requested a call back. Their details are as follows: <br />
 <br />
Name: $name <br />
Email: $email <br />
Telephone: $numer
</div>

</body>
</html>

HTML;
$email_headers = "From: $name <$email>";
...