【问题标题】:Add form input fields to E-mail with PHP and Jquery使用 PHP 和 Jquery 将表单输入字段添加到电子邮件
【发布时间】:2013-11-07 05:10:16
【问题描述】:

我使用This 教程在我的网站上创建了一个联系表单。不幸的是,字段数量对我来说不够用,所以我在表单中添加了公司和主题字段。

但是.. 我无法让邮件输出与其他字段一起使用。

快速总结:

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>

jQuery:

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;
});

});

整个functions.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'] );

但运气并不在我身上。那么基于以上几段代码,我需要调整哪些行,需要添加哪些内容?

非常感谢各位!

【问题讨论】:

    标签: javascript php jquery forms email


    【解决方案1】:

    编辑 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'] );
    
    }
    ?>
    

    【讨论】:

    • PHP 代码存在/应该存在问题。让我解释一下原因: 1) 使用我自己的 JS/PHP,我收到邮件。 2) 用你的 JS 和我的 PHP,我会收到邮件。 3) 使用我的 JS 和你的 PHP,我没有收到邮件。 4) 用你的 JS 和你的 PHP,我没有收到邮件。换句话说:当我使用你的 PHP 时,我没有收到任何邮件。是的:我确实编辑了 '$to' 行。
    • @SanderSchaeffer 是的,我不小心遗漏了一个分号“;” :(
    • 另外,根据您的环境,您可能需要查看消息输出中的\n,以正确格式化您的电子邮件stackoverflow.com/questions/8782119/…
    • 仍然有错误,但是现在在 JS 和 PHP 中 - 我已经将 JS 改回了你的几个版本(见:jsfiddle.net/kn374) - 使用那段 JS ,它确实发送它(接收是不同的东西) - 如前所述:表单已发送,但使用您的 PHP,我仍然没有收到任何邮件,即使我将 mymail@gmail.com 更改为我自己的邮件地址。但是,使用您的 JS 和我原来的 PHP,我确实收到了邮件,但没有额外的字段和格式。有什么建议? :s
    • @SanderSchaeffer 我不确定错误可能是什么?!你能看看你的 apache 日志文件中是否有 PHP 错误吗?
    【解决方案2】:

    多个错误,首先在您的 javascript 字符串中。

    '&subject'
    

    应该是

    '&subject='
    

    请注意,您缺少“=”

    此外,您永远不会在 PHP 脚本中捕获这两个新的 $_POST'd 值。

    $_POST['subject'];
    $_POST['company'];
    

    php的mail函数的第二个参数是主题soo...

    mail( "myEmail@gmail.com", $_POST['subject'], 'You have a new message from: '.$_POST['name'].' with '.$_POST['company'].'. '. $_POST['text'], "From:" . $_POST['email'] );
    

    【讨论】:

      【解决方案3】:

      最好使用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你可以看到界面中的字段是什么。

      【讨论】:

      • 是的,他必须使用serialize()来创建dataString。添加到答案以反映它。
      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多