FORM HELP - 获取 PHP 脚本以通过 ajax 发送电子邮件数据
Posted
技术标签:
【中文标题】FORM HELP - 获取 PHP 脚本以通过 ajax 发送电子邮件数据【英文标题】:FORM HELP - Getting PHP script to email data sent in via ajax 【发布时间】:2014-07-07 14:28:16 【问题描述】:对此非常新,所以很抱歉我的问题很基本,但它让我难了几个小时。
我有一个联系表格,它使用一点 AJAX 来发布到我的 php 文件。我遇到的问题是,当我尝试让 PHP 将这些数据通过电子邮件发送给自己时,它并没有读取 POST 值。当我在没有 JS/AJAX 发布方法的情况下测试它时,PHP 正在工作,但是为了停止页面刷新,我使用了 AJAX 选项。现在我已经添加了 ajax,电子邮件结果没有显示数据(我可以检查并看到表单数据已填充,只是不清楚为什么它没有填充到电子邮件中) :
Name:
Email:
Message:
关于为什么我的邮件服务器只接收文本而不接收 POST 的任何指导
在表单上打开和关闭 HTML:
<form data-parsley-validate action="./assets/contactform.php" method="POST">
<div class="formRow">
<label for="name" class="obscure">Name</label>
<input type="text" name="nameInput" id="name" placeholder="Name" required data-parsley-error-message="Please enter your name"></input>
</div>
<div class="formRow">
<label for="email" class="obscure">Email</label>
<input name="emailInput" id="email" type="email" placeholder="Email" required data-parsley-error-message="Please enter a valid email address"></input>
</div>
<div class="formRow">
<label for="message" class="obscure">Message</label>
<textarea name="messageInput" id="message">Message</textarea>
</div>
<input type="submit" name="submit"></input>
PHP 脚本:
<?php
$to = 'hello@kymlangford.com';
$subject = 'Post from your website';
$message = "Name: " . $_POST['nameInput'] . "\n Email: " . $_POST['emailInput'] . "\n Message: " . $_POST['messageInput'];
$headers = 'From: hello@kymlangford.com' . "\r\n" .
'Reply-To: ' . $_POST['emailInput'] . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
exit;
?>
Java 格式:
$(函数()
$.ajax( type: 'POST', url: './assets/contactform.php', data: name : $('input[name=nameInput]').val(), email : $('input[name=emailInput]').val(), message : $('textarea[name=messageInput]').val() , dataType: 'json' ) event.preventDefault();
);
);
--更新 08/07/2014--
下面是解决我问题的jquery代码
// get the data from the form
$('form').submit(function(event)
var fdata = $(this).serializeArray();
fdata.push( name: 'submit', value: true );
$.post('./assets/contactform.php', fdata, function (data)
alert('Data Loaded:' + data); );
console.log(fdata);
event.preventDefault();
);
);
【问题讨论】:
您的问题出在您的 js 代码上,尤其是在data
变量中。看看这个Ajax form not working (jQuery - PHP)。
嗯,在 javascript 中,您在 php nameInput
中拥有密钥 name
,依此类推。他们必须是一样的!另外,使用firebug 调试ajax 消息。
@Athafoud - 谢谢!该链接是一个超级帮助。我在搜索时找不到它,因为我显然问错了问题。谢谢!
@machineaddict - 不清楚您对匹配键的含义是什么?我以前从未使用过 PHP……但是一旦我更新了我的 JS,上面的脚本就可以完美运行。供将来参考,语法的哪一部分是错误的?
@user3812602:在ajax中,你发送的名字叫做name
,在php中你使用$_POST['nameInput']
,它应该是$_POST['name']
。知道了?而Java for the form
实际上是javascript
,它们是两种不同的编程语言。
【参考方案1】:
我认为你可以使用jquery,它和ajax一样。
这是 html 代码
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function()
$('#submit').click(function()
$.post("sendemail.php", $("#contactform").serialize(), function(response)
$('#message').html(response);
);
return false;
);
);
</script>
</head>
<body>
<p>
<form action="" method="post" id="contactform" >
<label for="name">Name:</label><br />
<input type="text" name="name" id="name" /><br />
<label for="email">Email:</label><br />
<input type="text" name="email" id="email" /><br />
<label for="emailcontent">Email Content:</label><br />
<textarea name="emailcontent" id="emailcontent"></textarea><br />
<input type="button" value="Send Email" id="submit" /><div id="message"> </div>
</form>
</p>
</body>
</html>
这是 PHP 代码,用 'sendemail.php' 文件名保存
$name = $_POST['name'];
$email = $_POST['email'];
$emailcontent = $_POST['emailcontent'];
$to = 'youremail@domain.com';
$subject = 'the subject';
$emailcontent = 'FROM: '.$name.' Email: '.$email.'Content: '.$emailcontent;
$headers = 'From: youremail@domain.com' . "\r\n";
mail($to, $subject, $message, $headers);
echo "Your email was sent!";
【讨论】:
谢谢!问题出在我的 Java 上,现在都已修复。使用 PHP,首先将信息放入变量是更好的做法吗?在我的版本中,我只是将内容直接放在 $emailcontent 中。但是我已经看到它在您的示例中声明,只是想知道这样做有什么好处? 对这里感兴趣的人来说是我需要的标记: // 从表单中获取数据 $('form').submit(function(event) var fdata = $(this).serializeArray( ); fdata.push( name: 'submit', value: true ); $.post('./assets/contactform.php', fdata, function (data) alert('Data Loaded:' + data) ; ); console.log(fdata); event.preventDefault(); ); 我不确定这样做有什么好处。但是,我认为如果我想添加更多函数来处理内容,即通过 PHP 的 htmlspecialchars() 函数验证变量,例如 $emailcontent = htmlspecialchars($_POST['emailcontent'] );以上是关于FORM HELP - 获取 PHP 脚本以通过 ajax 发送电子邮件数据的主要内容,如果未能解决你的问题,请参考以下文章