我正在使用PHP mail()
,并且有一个联系表单posts
输入字段submit
。 html表单上的所有输入都附加了name
attr,因此PHP可以检索它们的值。
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" role="form">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<input type="text" name="name" class="form-control" required="required" placeholder="Name">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input type="text" name="email" class="form-control" required="required" placeholder="Email address">
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea>
</div>
<div class="form-group">
<button type="submit" class="btn btn-danger btn-lg">Send Message</button>
</div>
</div>
</div>
</form>
在submit
表单上posted
到sendemail.php
以检索输入值并发送电子邮件:
<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Email sent!'
);
$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 = 'keilcarpenter01@gmail.com';
$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
echo json_encode($status);
die;
如您所见,我试图通过以下方式检索表单值:
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
引用归因于每个表单输入名称的正确名称
但它没有得到实际值,所以当我收到一封电子邮件时,邮件的所有内容都包含:
Name:
Email:
Subject:
Message:
而不是田野的实际内容。
我已经读过,当您的enctype与application/x-www-form-urlencoded
或multipart/form-data
不同但我的enctype
上没有任何form
attr时,PHP无法解析POST。
var_dump($ _ POST)的结果:
array(0) {
}
我无法看到我出错的地方
答案 0 :(得分:0)
你能告诉我你在php文件中做了什么吗?
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Email sent!'
);
您是否通过ajax电话提交表单。
同样重要的是要注意@Darren说,删除那些&#39; @&#39;从您的代码中,您不需要它。如果有的话,这将抑制函数中的错误!
也许你可以试试这个:
$(document).ready(function(){
$('#submit').click(function(e) {
e.preventDefault;
var form = $('form#main-contact-form');
var formAction = form.attr('action');
$.ajax({
url: formAction,
data : form.serialize(),
dataType: "json",
type : 'POST',
})
.done(function(data) {
//here is your returned array
if(data.type == 'success'){
alert(data.message)
}
})
.fail(function() {
console.log("error");
})
})
})
答案 1 :(得分:0)
You can get the raw format like this.
$post = json_decode(file_get_contents('php://input'));
And then access like this
$email = $post->email;
答案 2 :(得分:0)
所以我发现它,事实证明类.contact-form
已经绑定到js
函数,该函数使用ajax将数据传递给php脚本。当时它没有从表单中捕获任何数据,因此为什么$_POST
没有收到任何价值。
我通过传递表单值来修复错误:
var form = $('.contact-form');
form.submit(function (evt) {
$this = $(this);
$.post('sendemail.php',{ name: $('input[name=name]').val() email: $('input[name=email]').val() message: $('input[name=message]').val() }, function(data) {;
$this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
},'json');
evt.preventDefault();
return false;
});