【问题标题】:Contact form sends mail with empty message field联系表单发送带有空消息字段的邮件
【发布时间】:2017-03-26 04:31:41
【问题描述】:

当我使用我的联系表单发送电子邮件时,textarea 值不会发送,并且电子邮件中的“消息:”字段始终为空。

在 jquery 中手动声明输入变量而不是使用序列化会得到相同的结果。

textarea 在表单标签内,所以我不知道为什么它的值没有被拾取和发布。

我尝试给 textarea 一个 id="message" 并在 jquery 中手动调用它,例如:var text = $("#message").val();var text = $("textarea#message").val();,但它仍然没有发送。

我不知道我做错了什么。请帮忙。

这是我的代码:

    <form id="contactForm" method="POST">
            <div class="row small-margin">
                <div class="col-md-4">
                    <i class="pe-7s-user pe-2x icon-contact"></i>
                    <input name="name" type="text" placeholder="Name(required)" required size="35">
                </div> 
                <div class="col-md-4">
                    <i class="pe-7s-mail pe-2x icon-contact"></i>
                    <input name="email" type="email" placeholder="Email(required)" required size="35">
                </div>
                <div class="col-md-4">
                    <i class="pe-7s-link pe-2x icon-contact"></i>
                    <input name="website" type="text" placeholder="Website" size="35">
                </div>
            </div>
            <div class="row small-margin">
                <div class="col-md-12">
                    <!-- Message Field -->
                    <textarea name="message" placeholder="Your Message(required)" required></textarea>
                    <!-- Submit Button -->
                    <button id="submit" name="submit" type="submit" class="button" value="submit">SEND MESSAGE</button>
                    <!-- Success Message -->
                    <div id="msgSubmit" class="alert alert-success text-center hidden">Message Sent Successfully</div>
                </div>
            </div>
</form>

还有 JS:

$("#contactForm").submit(function(event){
// cancels the form submission
event.preventDefault();
console.log( $( this ).serialize() );
});


    $.ajax({
        type: "POST",
        url: "php/form-process.php",
        data: "name=" + name + "&email=" + email + "&website=" + website + "&message=" + text,
        success : function(text){
            if (text == "success"){
                formSuccess();
            }
        }
    });
}
function formSuccess(){
    $( "#msgSubmit" ).removeClass( "hidden" );
}

还有 PHP:

<?php
    // Set variables
    $name = $_POST['name'];
    $email = $_POST['email'];
    $website = $_POST['website'];
    $message = $_POST['text'];

    $to = 'novakim92@gmail.com'; 
    $subject = 'New Message from Nixo';

    // Prepare email body text
    $Body .= "Name: ";
    $Body .= $name;
    $Body .= "\n";

    $Body .= "Email: ";
    $Body .= $email;
    $Body .= "\n";

    $Body .= "Website: ";
    $Body .= $website;
    $Body .= "\n";

    $Body .= "Message: ";
    $Body .= $message;
    $Body .= "\n";

    // Send email
    $success = mail($to, $subject, $Body, "From:".$email);

    if ($success){
       echo "success";
    }else{
        echo "<p>Something went wrong, please try again!</p>";
    }
?>

【问题讨论】:

  • 嗯..消息表单元素的名称是“message”,您在 AJAX 调用中使用“text”:“”&message=" + text,"。
  • 我用消息替换了文本,现在我在电子邮件中收到“消息:udefined”。

标签: javascript php jquery html email


【解决方案1】:

我在您的代码中发现了问题:

来自 textarea 的值从未成为服务器端,因为您在 PHP 中执行此操作:

$message = $_POST['text'];

您应该这样做以便从 textarea 中获取值:

$message = $_POST['message'];

这将解决您的问题:)。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    你的变量命名不一致。

    在您的 HTML 表单中,您使用 message 作为名称属性。 但是在你是 AJAX 调用和 PHP $_POST-GLOBAL 中,你正在寻找一个名为 text 的变量。

    【讨论】:

    • 好的,我在 php 和 ajax 调用中将文本替换为消息,现在我在电子邮件中收到“消息:未定义”。
    猜你喜欢
    • 2015-01-22
    • 2019-08-04
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多