2017-07-26 105 views
0

我正在为我的网站构建基本联系表单(三个字段)。我有用HTML和CSS构建的表单;我所要做的就是构建PHP,使表单响应发送到我的电子邮件。我找到了一个教程,并构建了PHP文件(工作正常),但希望表单在后台提交,而不是离开原始页面。我找到了一个使用Ajax的online tutorial,经过一些调整后,我主要是为了工作。我现在遇到的唯一问题是,当我收到带有响应的电子邮件时,邮件字段会以“未定义”的形式返回。我对HTML和CSS有了很好的把握,但PHP和JS对我来说是新手(刚刚开始学习他们的这个项目),所以任何关于如何解决这个问题的帮助,以及可能纠正任何错误的代码将是一个巨大的帮助。我已经包括形式HTML,PHP,和JS以下(PHP和JS都命名为 '接触。[文件]'。提交联系表单时未定义页面刷新

HTML

<div id="contact_form"> 
    <form name="contact" action=""> 
    <div class="field"> 
     <label for="name">Name</label> 
     <input type="text" name="name" id="name" required/> 
    </div> 
    <div class="field"> 
     <label for="email">Email</label> 
     <input type="text" name="email" id="email" required/> 
    </div> 
    <div class="field"> 
     <label for="comments">Comments</label> 
     <textarea name="comments" id="comments" rows="3"></textarea> 
    </div> 
    <ul class="actions"> 
     <li><input type="submit" name="submit" class="button" id="submit_btn" value="Send Message" /></li> 
    </ul> 
    </form> 
</div> 

PHP

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$comments = $_POST['comments']; 
$formcontent="From: $name \n Message: $comments \n"; 
$recipient = "[email protected]"; 
$subject = "Message From Website"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You!" . " -" . "<a href='index.html' target='_blank' style='text-decoration:none;color:#505050;'> Return Home</a>"; 
?> 

JS

$(function() { 
    $('.error').hide(); 
    $(".button").click(function() { 
    // validate and process form here 

    $('.error').hide(); 
    var name = $("input#name").val(); 
     if (name === "") { 
     $("label#name_error").show(); 
     $("input#name").focus(); 
     return false; 
    } 
     var email = $("input#email").val(); 
     if (email === "") { 
     $("label#email_error").show(); 
     $("input#email").focus(); 
     return false; 
    } 
     var message = $("input#message").val(); 
     if (message === "") { 
     $("label#message_error").show(); 
     $("input#message").focus(); 
     return false; 
    } 

$.ajax({ 
    type: "POST", 
    url: "contact.php", 
    data: {name:name,email:email,message:message}, 
    success: function() { 
    $('#contact_form').html("<div id='success'></div>"); 
    $('#success').html("<h2>Your message was successfully submitted!</h2>") 
    .append("<p>We will get back to you within 24-48 hours.</p>") 
    .hide() 
    .fadeIn(1500, function() { 
     $('#success'); 
    }); 
    } 
}); 
return false; 
    }); 
    }); 
+0

'textarea'不是'input'元素。尝试$('textarea#comments')。val()。 – Daerik

+0

你的字段/消息的变量没有被一致地命名,它在某些部分是'comments'而在其他部分是'message'。 – Kaddath

+0

提交测试表单响应时,我注意到错误文档位于我的cPanel托管中。消息如下: “PHP通知:未定义的索引:第4行/contact.php中的注释” – drodrigues18

回答

0

在你的标记中,该字段的id是“comments”,但是你正在寻找你的JS和PHP中的“message”

+0

感谢您的支持。我刚进去修复那个错误。这固定了“未定义”的错误,但现在该字段发送时没有我在表单中输入的文本。 – drodrigues18

0

出现打印您的邮件结果

if(@mail($recipient, $subject, $formcontent, $mailheader)) 
    { 
     echo "Mail Sent Successfully"; 
    }else{ 
     echo "Mail Not Sent"; 
    } 
+0

谢谢。我在中添加了该消息,并且消息字段现在正在发送为空白,而不是包含我放入的信息。 – drodrigues18

0

做一些改变,如果你正在使用jQuery 3.

更改此

$(".button").on("click", function() { 
    // Validation here 
    // Put ajax outside this block 
}); 

编辑HTML表单,这样的代码。

检查设备。工具如果action属性被php正确添加。

<form id="contact" name="contact" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" > 

和AJAX调用此

$("#contact").on("submit", function(e) { 
    e.preventDefault(); // Now the page won't redirect 
    var url = $(this).attr("action"); 
    // Check console if contact is printed after the form is submitted 
    // If contact is printed the url is right 
    console.log(url); 
    $.ajax({ 
    type: "POST", 
    url: url, 
    data: $(this).serialiseArray(), // Found a typo here fixed 
    success: function() { 
     // Your stuffs 
    } 
    }); 
}); 

不要把输入实地核查中Ajax调用。

让我知道如果你发现任何问题,所以我可以修复我的代码。

+0

我在哪里添加contact.php URL? – drodrigues18

+0

在html js中会为你做的工作action =“/ contact.php”(我假设有联系人。PHP是在根中找到的,所以我添加了一个“/”) –

+0

在JS文件中,我添加了“contact.php”URL吗?我将它添加到HTML中,现在它会在我提交时打开PHP文件,而不是像过去那样在后台运行。它仍然发送空白,而不是输入消息。 – drodrigues18