【问题标题】:Receiving PHP contact form error (Please complete the form and try again. )接收 PHP 联系表格错误(请填写表格并重试。)
【发布时间】:2021-11-10 00:03:22
【问题描述】:

我正在创建一个包含 5 个字段的联系表单,该表单会将输入详细信息通过电子邮件发送到一组电子邮件,但是当我提交表单时,我收到错误!请填写表格并重试。这里是 php 代码、js 和 htm 形式。 任何帮助将不胜感激。

html 表单:

<form id="contact-form" action="mail.php" method="post">
        <div class="single-input">
        <input type="text" name="name" id="comment-name" placeholder="Enter your name">
        </div>
        <div class="single-input">
        <input type="email" placeholder="Your email">
        </div>
        <div class="single-input">
        <input type="text" name="phone" placeholder="Phone">
        </div>
        <div class="single-input">
        <input type="text" name="subject" placeholder="Subject">
        </div>
        <div class="single-input textarea">
        <textarea cols="3" name="message" rows="3" placeholder="Write your message here"></textarea>
        </div>
        <div class="single-input">
        <button type="submit" class="cr-btn cr-btn--sm cr-btn--transparent cr-btn--icon"><span>send</span></button>
    </div>
</form>

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);
    $subject = trim($_POST["subject"]);
    $phone = trim($_POST["phone"]);
    $message = trim($_POST["message"]);

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

    // Set the recipient email address.
    // FIXME: Update this to your desired email address.
    $recipient = "akcent.chester@gmail.com";

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

    // Build the email content.
    $email_content = "Name: $name\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Subject: $subject\n\n";
    $email_content .= "Phone: $phone\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 "Oops! Something went wrong and we couldn't send your message.";
    }

} 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.";
}

?>

js/ajax-mail.js 文件:

$(function() {

    // Get the form.
    var form = $('#contact-form');

    // Get the messages div.
    var formMessages = $('.form-message');

    // Set up an event listener for the contact form.
    $(form).submit(function(e) {
        // Stop the browser from submitting the form.
        e.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 formMessages div has the 'success' class.
            $(formMessages).removeClass('error');
            $(formMessages).addClass('success');

            // Set the message text.
            $(formMessages).text(response);

            // Clear the form.
            $('#contact-form input,#contact-form textarea').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 (data.responseText !== '') {
                $(formMessages).text(data.responseText);
            } else {
                $(formMessages).text('Oops! An error occured and your message could not be sent.');
            }
        });
    });

});
<?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);
  $phone=trim($_POST["phone"]);
   $subject=trim($_POST["subject"]);
  $message=trim($_POST["message"]);
  // Check that data was sent to the mailer.
  if ( empty($name) OR empty($subject) OR empty($phone) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Set a 400 (bad request) response code and exit.
    http_response_code(400);
    echo "Please complete the form and try again.";
    exit;
  }
  // Set the recipient email address.
  // FIXME: Update this to your desired email address.
  $recipient="example@gmail.com";
  // Set the email subject.
  $subject="New contact from $name";
  // Build the email content.
  $email_content="Name: $name\n";
  $email_content .="Email: $email\n\n";
  $email_content .="Phone: $phone\n\n";
  $email_content .="Subject: $subject\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 "Oops! Something went wrong and we couldn't send your message.";
  }
}

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.";
}

?>
<form id="#contact-form" action="mail.php" method="post">
                                                <div class="single-input">
                                                    <input type="text" name="name" id="comment-name" placeholder="Enter your name">
                                                </div>
                                                <div class="single-input">
                                                    <input type="email" placeholder="Your email">
                                                </div>
                                                <div class="single-input">
                                                    <input type="text" name="phone" placeholder="Phone">
                                                </div>
                                                <div class="single-input">
                                                    <input type="text" name="subject" placeholder="Subject">
                                                </div>
                                                <div class="single-input textarea">
                                                    <textarea cols="3" name="message" rows="3" placeholder="Write your message here"></textarea>
                                                </div>
                                                <div class="single-input">
                                                    <button type="submit" class="cr-btn cr-btn--sm cr-btn--transparent cr-btn--icon"><span>send</span></button>
                                                </div>
                                            </form>

【问题讨论】:

  • 你有没有试过在代码之前添加一些调试打印语句` if ( empty($name) OR empty($subject) OR empty($phone) OR empty($message) OR !filter_var($ email, FILTER_VALIDATE_EMAIL)) {` 看看哪些变量是空的?
  • @Mark Stewart,我在代码之前使用调试打印语句,如果我删除该语句,我可以获得空白表格。未收到输入数据。

标签: javascript php html jquery


【解决方案1】:
<div class="single-input">
<input type="email" placeholder="Your email">
</div>

此输入元素缺少“名称”属性!

【讨论】:

  • 非常感谢您指出,它现在正在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多