我已经使用本教程在我的网站上创建了一个联系表单。不幸的是,字段的数量对我来说是不够的,所以我在表单中添加了一个公司和主题字段。
然而。。我无法让邮件输出使用其他字段。
快速综述:
.html:
Each input field in the HTML is based on the following piece of lines:
<label>Subject</label>
<input type="text" id="subject" placeholder="What's up?"></div>
j查询:
The full jQuery code is:
$(document).ready(function() {
// Contact Form
$("#contactform").submit(function(e){
e.preventDefault();
var name = $("#name").val();
var company = $("#company").val();
var email = $("#email").val();
var subject = $("#subject").val();
var text = $("#text").val();
var dataString = 'name=' + name + + '&company' + company + '&email=' + email + '&subject' + subject + '&text=' + text;
function isValidEmail(emailAddress) {
var pattern = new RegExp(/^((([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+('.([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+)*)|(('x22)(((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?((['x01-'x08'x0b'x0c'x0e-'x1f'x7f]|'x21|['x23-'x5b]|['x5d-'x7e]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(''(['x01-'x09'x0b'x0c'x0d-'x7f]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]))))*((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?('x22)))@((([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.)+(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.?$/i);
return pattern.test(emailAddress);
};
if (isValidEmail(email) && (text.length > 25) && (name.length > 1)){
$.ajax({
type: "POST",
url: "js/functions.php",
data: dataString,
success: function(){
$('.success').fadeIn(1000);
}
});
} else{
$('.error').fadeIn(1000);
}
return false;
});
});
整个函数.php脚本是:
<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['text']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}
//send email
mail( "myEmail@gmail.com", "New message: ".$_POST['name'], $_POST['text'], "From:" . $_POST['email'] );
}
?>
好的,这就是我们所处的位置:表单确实已提交,我确实收到了一封邮件,但是附加字段($('#subject')和$('#company'))不会出现在电子邮件中。
因此,我想在此线程中实现两件事:1)"主题"和"公司"字段出现在电子邮件中2)我收到的邮件有以下布局:
Subject line: 'You received a new message: ' + 'subject'
Message body: 'You received a new mail via your contact form<br/>
Name: 'name'
Company: 'company'
Reply to: 'email'
Subject: 'subject'
Message: 'text'
我试图调整线条 - 因为我认为这可以解决所有问题:
//send email
mail( "myEmail@gmail.com", "New message: ".$_POST['name'], $_POST['text'], "From:" . $_POST['email'] );
但运气并不在我身上。那么基于上面的代码片段,我需要调整哪些行,需要添加什么?
非常感谢大家!
编辑 JS 文件以反映这一点:.JS:
$(document).ready(function() {
// Contact Form
$("#contactform").submit(function(e){
e.preventDefault();
var name = $("#name").val();
var company = $("#company").val();
var email = $("#email").val();
var subject = $("#subject").val();
var text = $("#text").val();
var dataString = 'name=' + name + + '&company=' + company + '&email=' + email + '&subject=' + subject + '&text=' + text;
function isValidEmail(emailAddress) {
var pattern = new RegExp(/^((([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+('.([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+)*)|(('x22)(((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?((['x01-'x08'x0b'x0c'x0e-'x1f'x7f]|'x21|['x23-'x5b]|['x5d-'x7e]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(''(['x01-'x09'x0b'x0c'x0d-'x7f]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]))))*((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?('x22)))@((([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.)+(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.?$/i);
return pattern.test(emailAddress);
};
if (isValidEmail(email) && (text.length > 25) && (name.length > 1)){
$.ajax({
type: "POST",
url: "js/functions.php",
data: dataString,
success: function(){
$('.success').fadeIn(1000);
}
});
} else{
$('.error').fadeIn(1000);
}
return false;
});
});
编辑 PHP 文件以反映这一点:
.PHP:
<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['text']) && isset($_POST['company']) && isset($_POST['subject']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}
$to = "myEmail@gmail.com";
$subject = 'You received a new message: ' . $_POST['subject'];
$message = "You received a new mail via your contact form'n";
$message .= "Name: " . $_POST['name'] . "'n";
$message .= "Company: " . $_POST['company'] . "'n";
$message .= "Reply to: " . $_POST['email'] . "'n";
$message .= "Subject: " . $_POST['subject'] . "'n";
$message .= "Message: " . $_POST['text'] . "'n";
//send email
mail( $to, $subject, $message, "From:" . $_POST['email'] );
}
?>
多个错误,首先在你的 JavaScript 字符串中。
'&subject'
应该是
'&subject='
注意您缺少"="
此外,您永远不会在 PHP 脚本中捕获这两个新的 $_POST
'd 值。
$_POST['subject'];
$_POST['company'];
php的邮件函数的第二个参数是主语,所以...
mail( "myEmail@gmail.com", $_POST['subject'], 'You have a new message from: '.$_POST['name'].' with '.$_POST['company'].'. '. $_POST['text'], "From:" . $_POST['email'] );
最好使用 serialize() 来获取数据
var dataString = $("#contactform").serialize();
并删除以下行:
var name = $("#name").val();
var company = $("#company").val();
var subject = $("#subject").val();
var text = $("#text").val();
var dataString = 'name=' + name + + '&company' + company + '&email=' + email + '&subject' + subject + '&text=' + text;
其次,您使用以下方法发送电子邮件:
mail( "myEmail@gmail.com", "New message: ".$_POST['name'], $_POST['text'], "From:" . $_POST['email'] );
电子邮件中没有_POSTS美元的主题或公司。我假设您收到的电子邮件显示"发件人:...."您可以在此处添加所需的其余字段:
mail( "myEmail@gmail.com", "New message: ".$_POST['name'], $_POST['text'], "From:" . $_POST['email']. " with subject: ".$_POST['subject'].' and company '.$_POST['company'] );
如果你看一下PHP中的邮件功能 http://www.php.net/manual/es/function.mail.php 你可以看到界面中的哪些字段是什么。