0

我正在使用 JSON 从我的网站发送电子邮件。我这样做是因为简单地通过<form>控件发送它似乎绕过了我正在做的一点 DIY“你是人类”验证:

<script type="text/javascript">
    $("#contact-submit").click(function() {
        if ($("#contact-captcha").text != "green") {
            $("#contact-captcha").text = "Incorrect";
            $("#contact-captcha").css("border-color", "#7c0707");
        }
        else
        {
            sendMail();
        }
    });

    function sendMail() {
        $.ajax({
            type: "POST",
            url: 'includes/contact.php',
            data: { to: 'me@this.com', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() }
        });
    }
</script>

现在的问题是我无法弄清楚如何在contact.php.

我已经看过在 php 代码中定义 JSON 的教程,然后使用 json_decode() 来读取它,这不好,因为我不能在那里定义 JSON。

任何人都可以在此处提供有关如何阅读 JSON 的任何指导吗?我想过使用查询字符串,但不知道如何在这里做到这一点。

任何帮助将不胜感激。

提前致谢!

4

3 回答 3

2

使用时

data: { to: 'me@this.com', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() }

您将在 、 等中获取$_POST['to']数据$_POST['from']

更好的方法(仍然不是 JSON 方法)是使用这样的方法:

var serialized = $("form").serialize();
serialized.to = "you@example.com";
$.ajax { ... data: serialized ... }

并且具有fromsubjectmessagename输入字段的属性。

From: <input type="text" name="from"/>

如果您确实想发送 JSON(我看不出有任何理由这样做),您可以这样做:

json = JSON.stringify({ to: 'me@this.com', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() });

并使用 发送它data: { json: json },最后做

json_decode($_POST['json']);

获取关联数组。

于 2012-12-29T14:15:50.190 回答
0

在contacts.php

print_r($_POST)

或者使用 Firebug 并在提交期间检查控制台,您可以轻松找到您的数据是否正确发送(或者它是否是 JSON.. 等等)

(我不确定您是如何进行“人工验证”检查的,但是,检查字段值$("#contact-captcha").text != "green"不是正确的方法(易于篡改和绕过它因为它在表单本身中)。您需要使用“随机”文本在服务器端创建一个哈希并将其会话(或发送到表单),用户必须输入文本并将其作为 POST 发送到服务器。最后验证通过散列用户输入文本并与您创建的文本进行比较。如果您做得正确,请忽略这一点。^^")

于 2012-12-29T14:21:35.260 回答
0

如果不是必须使用 JSON,那么您可以这样做。

使用您用于将数据发送到contacts.php 并遵循PHP 代码的jquery 代码。

在 Contact.php 中

if(isset($_POST['to']) && $_POST['to'] != ''){

    $filterTO = $_POST['to'];

    //filter value and get filtered value back in $filterTO here and use it further
}

您也可以以相同的方式使用其他变量。

注意:强烈建议在使用前过滤变量。我只展示了对你来说有问题的部分。这不是整个标准过程。

于 2012-12-29T14:26:35.417 回答