在php中处理json序列化表单数据

我需要将名为'msg'的json字符串中的变量存储在我的数据库中,但我无法用$ msg = $ _POST ['msg']; 我如何正确捕捉它?

此外,我想在网页上回复$ msg的内容。

HTML

<div id="addCommentContainer">
    <form id="addCommentForm" action="">
        <textarea name="msg" id="msg" cols="82" title="Your comment" rows="2">Your comment...</textarea>
        <br />
        <input type="text" name="author" title="name" value="<?php echo $_SESSION['username']; ?>" id="author" />
        <br />
        <div id="personal">
            <input type="text" name="city" id="city" title="city (optional)" value="" />
            <br />
            <input type="text" name="email" id="email" title="e-mail (optional)" value="" />
            <br />
            <input type="text" name="url" id="url" title="website (optional)" value="" />
            <input type="hidden" id="cam_id" class="hd" name="cam_id" value="<?php echo $cam_id ?>" />
        </div>
        <input type="submit" id="submit" value="Comment" />
    </form>
</div>

JavaScript的

//if submit button is clicked
$('#submit').click(function () {
    //start the ajax
    $.ajax({
        //this is the php file that processes the data 
        url: "/comment/insert.php",
        type: "POST",
        data: $("#addCommentForm").serialize(),
        contentType: "json",
        //success
        success: function (html) {
            //if returned 1/true (process success)
            if (html == 1) {
                //show the success message
                $('.done').fadeIn('slow');
                //if process.php returned 0/false (send mail failed)
            } else alert('Sorry, unexpected error. Please try again later.');
        }
    });
    //cancel the submit button default behaviours
    return false;
});

PHP

 $msg = $_POST['msg'];
//  echo $msg;
 $author = $_POST['author'];
 $email = $_POST['email'];
 $url = $_POST['url'];
 $city = $_POST['city'];




    // include ("/home/sionvalais/domains/skiweather.eu/public_html/v3/functions/strip.php");

    if ($cam_id>1) {

    if ($author=='NAME') {
    $author='Anonymous';
    }

    $host = gethostbyaddr($ip);
    // mysql_query ("set character_set_results='utf8'");
    mysql_query("INSERT INTO sv_review (author,email,msg,cam_id,url,lud)
                    VALUES (
                        N'".$author."',
                        '".$email."',
                        N'".$msg."',
                        '".$cam_id."',
                        '".$url."',
                        NOW()
                    )");
     }

据我所知, contentType属性的默认值是"application/x-www-form-urlencoded; charset=UTF-8" ,这在大多数情况下都很好。

但似乎你发送给服务器的data不是JSON对象,设置contentType不会将数据转换为JSON对象,它只是声明数据的类型。

因此,如果data只是一个名称/值对的序列化,请删除contentType: "application/json",然后重试。

并且如果它是JSON的有效类型,请使用以下命令解码服务器上发布的JSON对象: $array = json_decode($json, true);


获取对JSON对象的访问权限

您可以按照下面的方法获取服务器上的JSON对象:

$json = @file_get_contents('php://input');
$array = json_decode($json, true);

// See what happens
print_r($array);

$ POST ['msg']应该是$ _POST ['msg']

也输出你的POST变量,以便你可以检查它们的使用:

echo print_r($_POST);

使用必须将数据JSON.stringify($("#addCommentForm").serializeArray()) JSON: JSON.stringify($("#addCommentForm").serializeArray())$("#addCommentForm").serialize()不会生成JSON。

链接地址: http://www.djcxy.com/p/72001.html

上一篇: Processing json serialized form data in php

下一篇: Is it bad practice to filter by ID within the repository pattern