好的我是php的新手,尝试制作一个简单的发送电子邮件表单,对于我的生活,我无法找到我做错了什么!我得到的唯一错误是该属性未定义。但是我使用Postman来测试我的PHP文件并且它工作正常https://www.getpostman.com/collections/9b8a8d084782d1184a10,但是当我从网站dabllc.net运行它时我什么都没得到
这是sendemail.php
<?php
header('Content-type: application/json');
$status_good = array(
'type'=>'success',
'message'=>'Thank you for contact us. As early as possible we will contact you '
);
$status_bad = array(
'type'=>'$#!7',
'message'=>'Thank you but not thanks. '
);
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$email_from = $email;
$email_to = 'my@email.com';//replace with your email
$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
error_log($body . " " . $email_to);
$success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
if(!$success){
echo json_encode($status_bad);
}
else{
echo json_encode($status_good);
}
die;
,这是表格
<section id="contact-us">
<div class="container">
<div class="center">
<h2>Drop Your Message</h2>
<p class="lead">Feel Free to contact us with any questions, and we will respond as fast as we can.</p>
</div>
<div class="row contact-wrap">
<div class="status alert alert-success" style="display: none"></div>
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label>Name *</label>
<input type="text" name="name" class="form-control" required="required">
</div>
<div class="form-group">
<label>Email *</label>
<input type="email" name="email" class="form-control" required="required">
</div>
<div class="form-group">
<label>Phone</label>
<input type="number" class="form-control">
</div>
<div class="form-group">
<label>Company Name</label>
<input type="text" class="form-control">
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label>Subject *</label>
<input type="text" name="subject" class="form-control" required="required">
</div>
<div class="form-group">
<label>Message *</label>
<textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
</div>
</div>
</form>
</div><!--/.row-->
</div><!--/.container-->
</section><!--/#contact-page-->
错误 - &gt; http://pastebin.com/N6BB0nHj
Java脚本
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
请我必须遗漏一些小事,感谢任何帮助。我不想要重写这一切。
答案 0 :(得分:0)
您的错误在于您发送邮件的方式。
由于你是通过ajax和jQuery实现的,所以你在HTML中放下的任何内容都不会在这里发挥作用。
这是你的代码:
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
你有一个监听器在那里等待提交表单。您主动禁用表单本身继续提交以在其位置放置ajax调用。
但是你的ajax调用没有声明它应该是一个post请求,也不提交输入的值。
所以这里是你如何在jQuery中发布ajax调用:
$.ajax({
method: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
也许您想在此处详细了解:http://api.jquery.com/jquery.ajax/
你所要做的就是设置&#34;发布&#34;作为调用方法并收集表单字段值以随其发送
答案 1 :(得分:0)
您的javascript代码不会向sendemail.php发送任何数据。要解决此问题,请使用以下代码:
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: ({
name: $( '#name' ).val(),
email: $( '#email' ).val(),
phone: $( '#phone' ).val(),
company: $( '#company' ).val(),
subject: $( '#subject' ).val(),
message: $( '#message' ).val()
}),
dataType: 'json',
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
将此用于HTML:
<section id="contact-us">
<div class="container">
<div class="center">
<h2>Drop Your Message</h2>
<p class="lead">Feel Free to contact us with any questions, and we will respond as fast as we can.</p>
</div>
<div class="row contact-wrap">
<div class="status alert alert-success" style="display: none"></div>
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label>Name *</label>
<input type="text" id="name" name="name" class="form-control" required="required">
</div>
<div class="form-group">
<label>Email *</label>
<input type="text" id="email" name="email" class="form-control" required="required">
</div>
<div class="form-group">
<label>Phone</label>
<input type="text" id="phone" class="form-control">
</div>
<div class="form-group">
<label>Company Name</label>
<input type="text" id="company" class="form-control">
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label>Subject *</label>
<input type="text" id="subject" name="subject" class="form-control" required="required">
</div>
<div class="form-group">
<label>Message *</label>
<textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
</div>
</div>
</form>
</div><!--/.row-->
</div><!--/.container-->
</section><!--/#contact-page-->
答案 2 :(得分:-1)
你不需要指定mime类型吗?我认为$ header没有包含在你的mail()命令中。
刚刚注意到您的错误日志。通过POST传递变量是一个问题.... def a json / ajax error ...