Processing json serialized form data in php

I need to store the variable from the json string with name 'msg' in my database, but I am not able to catch it with $msg = $_POST['msg']; How do I catch it correctly?

Moreover I would like to echo the contents of $msg straightaway on the webpage.

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()
                    )");
     }

As far as I know, default value of contentType property is "application/x-www-form-urlencoded; charset=UTF-8" , which is fine for most cases.

But It seems the data you are sending to the server is not JSON object, setting contentType doesn't convert data to JSON object, it just declares the type of data.

So, if data is just a serialized of name/value pairs, please remove contentType: "application/json", and try again.

and if it's a valid type of JSON, decode the posted JSON object at the server, using: $array = json_decode($json, true);


Getting access to JSON object

You can follow the approach below to get the JSON object on the server:

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

// See what happens
print_r($array);

$POST['msg'] should be $_POST['msg']

Also to output your POST variables so you can inspect them use :

echo print_r($_POST);

Use must stringify the data to JSON: JSON.stringify($("#addCommentForm").serializeArray()) . $("#addCommentForm").serialize() does not make JSON.

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

上一篇: Python3导入错误与pycurl Mac OS X

下一篇: 在php中处理json序列化表单数据