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 发送电子邮件数据的主要内容,如果未能解决你的问题,请参考以下文章

php获取form表单数据

从 php 脚本获取响应

如何从脚本访问 help() 答案

js 获取表单内容

怎么获取form表单将要提交的数据

PHP基本上传文件脚本