在php中发送和读取JSON

时间:2012-12-29 14:08:41

标签: php json

我正在使用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上的JSON数据。

我见过在PHP代码中定义JSON的教程,然后使用json_decode()来读取它,这是不好的,因为我无法在那里定义JSON。

任何人都可以提供有关如何阅读JSON的指导吗?我想过使用查询字符串,但无法弄清楚如何在这里做到这一点。

非常感谢任何帮助。

提前致谢!

3 个答案:

答案 0 :(得分: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 ... }

并让fromsubjectmessage成为输入字段的name属性。

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']);

获取关联数组。

答案 1 :(得分:0)

在contacts.php中

print_r($_POST)

或在提交过程中使用Firebug并检入控制台,您可以轻松找到您是否正确发送数据(或者是否使用JSON等等)

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

答案 2 :(得分: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
}

你也可以用同样的方式使用其他变量。

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