【问题标题】:JQuery object to PHP via ajax to send a mail()JQuery 对象通过 ajax 向 PHP 发送邮件()
【发布时间】:2016-12-01 06:04:16
【问题描述】:

所以我试图将一个对象从一个 jQuery 函数发送到一个 PHP 脚本以通过 mail() 发送它们,但是我的电子邮件总是空的,所以我想我可能不太明白我应该怎么做让它正常工作

这里是jQuery函数

            function sendForm() {

            $surname = $('#surname').val();
            $name = $('#name').val();
            $email = $('#email').val();
            $comment = $('#q4').val();

            $to = 'asd@efg.de'
            $subject = 'Contact Form'

            $datastring = {$surname,$name,$email,$comment,$to,$subject}

            $.ajax({
                url: 'send.php',
                type: 'post', 
                data: $datastring,
                success: function() { 
                    alert('email sent!');
                }
            });
            return false;
        }

这里是 send.php

<?php
$to      = $_POST[$to];
$subject = $_POST[$subject];
$message = $_POST[$comment];
$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?> 

我错过了什么?感谢您的帮助!

edit:我检查了 $datastring,它具有我想要的所有值。保存为对象

【问题讨论】:

  • 请检查 $to, $subject, $message 的值你要发送 $to 变量?
  • 开发时,对值进行一些简单的调试很有用。例如,在 php 脚本中添加 var_dump($_POST) - 这将有助于查看您实际发送的内容。 (并且在你的ajax成功函数中,你可以使用console.log来显示返回值,或者使用你浏览器的网络检查工具)

标签: javascript php jquery ajax email


【解决方案1】:

你创建对象的方式使每个值undefined,因为你没有真正的键和值,你需要这样做

function sendForm() {
    $datastring = {
        'surname' : $('#surname').val(),
        'name'    : $('#name').val(),
        'email'   : $('#email').val(),
        'comment' : $('#q4').val(),
        'to'      : 'asd@efg.de',
        'subject' : 'Contact Form'
    }

    $.ajax({
        url     : 'send.php',
        type    : 'post',
        data    : $datastring,
        success : function() {
            alert('email sent!');
        }
    });
    return false;
}

要在 PHP 中获取值,您可以使用字符串作为键

$_POST["subject"];

【讨论】:

    【解决方案2】:

    您必须给出数据对象名称的属性,否则会出错:

    $datastring = {
        surname : $surname,
        name    : $name,
        email   : $email,
        comment : $comment,
        to      : 'asd@efg.de',
        subject : 'Contact Form'
    };
    

    在 PHP 方面,您再次通过此名称获取值:

    $surname = $_POST["surname"];
    $name    = $_POST["name"];
    $email   = $_POST["email"];
    $comment = $_POST["comment"];
    $to      = $_POST["to"];
    $subject = $_POST["subject"];
    

    【讨论】:

      【解决方案3】:

      尝试改变

      $datastring = {$surname,$name,$email,$comment,$to,$subject}
      

      $datastring = {'username':$surname,'name':$name,'email':$email,'contact':$comment,'to':$to,'subject':$subject}
      

      然后改变

      $to      = $_POST[$to];
      

      $to      = $_POST['to'];
      

      其余的 php 代码也类似。

      【讨论】:

      • 永远不要相信用户的输入!所以过滤你的 $_POST 变量
      • 公平评论,但不清楚应该在此处应用哪些过滤器。这个想法似乎是允许将任意电子邮件发送到任意地址。如果应该硬编码to 地址,请将其硬编码到 php 而不是 javascript。
      猜你喜欢
      • 2011-10-19
      • 2015-08-17
      • 2018-11-09
      • 2015-06-14
      • 2010-11-22
      • 2021-12-31
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多