更新:最终的工作代码位于问题的最底层我离开了剩下的代码,所以你可以看到这个过程希望它能帮助将来的某个人。
我正在尝试使用jQuery和外部php文件向我自己发送电子邮件(这是有效的),但是,电子邮件并没有获取任何数据。我有以下代码。
HTML
<section>
<form enctype="multipart/form-data">
<fieldset class="margin-b">
<legend>Contact Me</legend>
<label for="form_name">Name:<input name="form_name" id="form_name" type="text" value="" required autofocus ></label>
<label for="form_email">Email:<input type="email" name="form_email" id="form_email" value=""></label>
<label for="form_msg">Message:<textarea name="form_msg" id="form_msg" rows="5"></textarea></label>
</fieldset>
<input type="submit" name="submit" id="submit" value="Submit">
</form>
</section>
JS
var data = {
name: $("#form_name").val(),
email: $("#form_email").val(),
message: $("#form_message").val()
};
$.ajax({
type: "POST",
url: "email-php.php",
data: data,
success: function(){
$('.success').fadeIn(1000);
}
});
PHP
<?php
if($_POST){
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
//send email
mail("email@domain.com", "From: " .$email, $message);
}
?>
编辑:我从Stack Overflow上的各种答案中取得了上述内容,但无法弄清楚我错过了什么或做错了什么。我在这里提出了大部分问题jQuery AJAX form using mail() PHP script sends email, but POST data from HTML form is undefined
更新:在@inarilo的建议下面我已将所有内容更改为以下内容,现在我根本没有收到任何电子邮件。这绝对是更好的选择,所以我想让它发挥作用。
HTML
<section>
<form enctype="multipart/form-data" id="frmemail">
<fieldset class="margin-b">
<legend>Contact Me</legend>
<label for="form_name">Name:<input name="form_name" type="text" value="" required autofocus ></label>
<label for="form_email">Email:<input type="email" name="form_email" value=""></label>
<label for="form_msg">Message:<textarea name="form_msg" rows="5"></textarea></label>
</fieldset>
<input type="submit" name="submit" id="submit" value="Submit">
</form>
</section>
JS
$.ajax({
type: "POST",
url: "email-php.php",
data: $("#frmemail").serialize(),
success: function(){
$('.success').fadeIn(1000);
}
});
PHP
<?php
if(isset($_POST['name'],$_POST['email'],$_POST['message'])){
$name = $_POST['form_name'];
$email = $_POST['form_email'];
$message = $_POST['form_msg'];
//send email
mail("landon@thecallfamily.com", "From: " .$email, $message);
}
?>
最终工作守则
HTML
<section>
<form enctype="multipart/form-data" id="frmemail">
<fieldset class="margin-b">
<legend>Contact Me</legend>
<label for="form_name">Name:<input name="form_name" type="text" value="" required autofocus ></label>
<label for="form_email">Email:<input name="form_email" type="email" value=""></label>
<label for="form_msg">Message:<textarea name="form_msg" rows="5"></textarea></label>
</fieldset>
<input type="submit" name="submit" id="submit" value="Submit">
</form>
</section>
JS
$(document).ready(function() {
$('#frmemail').submit(function(event) {
$.ajax({
type: 'POST',
url: 'email-php.php',
data: $('#frmemail').serialize(),
success: function() {
$('.success').fadeIn(1000)
}
})
})
})
PHP
<?php
$name = $_POST['form_name'];
$email = $_POST['form_email'];
$message = $_POST['form_msg'];
$to = "landon@thecallfamily.com";
$subject = "RIA Emails";
$body = "Name: ".$name."\nEmail: ".$email."\nMessage: ".$message;
$headers = "From: " . $email;
//send email
mail($to, $subject, $body, $headers);
?>
答案 0 :(得分:1)
你试图通过使用错误的id获取textarea值,它应该是:
message: $("#form_msg").val()
不是
message: $("#form_email").val()
并在php文件中,替换以下内容:
$message = $_POST['text'];
与
$message = $_POST['message'];
它是:)
答案 1 :(得分:1)
您有多个错误,首先您使用元素ID来获取数据:
name: $("#form_name").val(),
email: $("#form_email").val(),
message: $("#msg_text").val()
但输入元素本身没有定义id属性。
其次,您传递姓名,电子邮件和消息,但在您的PHP中,您使用的是姓名,电子邮件和短信:
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['text'];
然而,即使所有这些都不正确地复杂化,您也可以只需serialize表格:
在HTML中,向表单添加id:
<form enctype="multipart/form-data" id="frmemail">
在JS中,选择表单并序列化它:
$(document).ready(function(){
$("#frmemail").submit(function(event){
event.preventDefault();
$.ajax({
type: "POST",
url: "email-php.php",
data: $("#frmemail").serialize(),
success: function(){
$('.success').fadeIn(1000);
}
});
});
});
在PHP中只使用元素名称,你不需要id:
$name = $_POST['form_name'];
$email = $_POST['form_email'];
$message = $_POST['form_msg'];
答案 2 :(得分:0)
试试这个,(假设你已经在输入表单上输入了id名称) JQUERY:
$(document).ready(function(){
$('#submit').on('click',function(){
var name = $('#name').val(),
var name = $('#email').val(),
var name = $('#message').val();
$.ajax({
type: "POST",
url: "email-php.php",
data: {name:name,email:email,message:message},
success: function(data){
alert(data);
}
});
});
});
PHP:
if(isset($_POST['name'],$_POST['email'],$_POST['message'])){
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
echo $name; // then echo $email and then $message
}