解码php无法正常工作

时间:2015-03-06 20:20:00

标签: php mysql json

我想将一个json对象发布到php。

var user = {username:"test", password:"test", name:"test",  
email:"test@hotmail.com"};
var str_json = JSON.stringify(user);
$.ajax({
        url: '/register_API.php',
        type: 'post',
        contentType: "application/json; charset=utf-8",
        success: function (data) {
           console.log('success');
        },
        data: user
    });
}

在php中我想将其插入到mysql中:

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

$username = $json['username'];
$password = $json["password"];
$email = $json['email'];

$insertSql = "INSERT INTO users (username, password, email)
VALUES ('$username', '$password', '$email');";

$ data字符串包含:username = test& password = test& name = test& email = test%40hotmail.com,但我无法通过解码来获取变量...

提前致谢!

4 个答案:

答案 0 :(得分:2)

data: user更改为data: str_json然后

更改$data = file_get_contents('php://input');

$data = $_POST['data']

答案 1 :(得分:1)

您没有发送JSON字符串,您正在发送一个Javascript对象,jQuery正在转换为传出POST请求中的一组参数。您的数据将以$ _POST的形式提供给PHP - 无需先解码。

这样看:

$username = $_POST['username'];
$password = $_POST["password"];
$email = $_POST['email'];

答案 2 :(得分:0)

我认为您希望将原始JSON作为文本发送,并将其放在帖子正文中,而不是作为编码表单处理。

在这种情况下,我认为您的PHP代码是正确的。按原样发送字符串化的JSON,但将数据类型设置为dataType:" text"。

我认为你可以用

阅读它

$ data = file_get_contents(' php://输入');

答案 3 :(得分:0)

我认为你可以使用

//works like explode, but splits your data where finds "=" and "&" too.
$output = preg_split( "/ (=|&) /", $data);

这将返回您的数据数组。其中:

$output[0]="Username";
$output[1]="test";

如果您有固定数据,这可能很有用。