PHP中的Json数据未保存到数据库

3

我想实现一个功能,通过ajax发送名称年龄。然后PHP将它们收集起来并存储到数据库中。我认为我的操作是正确的,但数据没有保存在数据库中。有人能帮我解决吗?

HTML

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $('button').click(function(){
        $.ajax({
            url: 'addData.php',
            type: 'POST',
            dataType: "json",
            data: {
                name: $('#name').val(),
                age: $('#age').val(),
            }
        })
    });
});
</script>
</head>
<body> 
<input id="name" type="text" />
<input id="age" type="text" />
<button>Click</button>
</body> 
</html> 

PHP

<?php

//Parameters for connection
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test1";

//Reading json
$data_back = json_decode(file_get_contents('php://input'));

// set json string to php variables
$name = $data_back->{"name"};
$age = $data_back->{"age"};

// Create Connection
$conn = new mysqli($servername, $username, $password, $dbname);

//Creating Query
$sql = "INSERT INTO table1 (name, age) VALUES ($name, $age)";

//Running Query
$conn->query($sql);

//Closing Connection
$conn->close();

?>

错误

在此输入图片描述


1
你能分享一下从控制台看到的错误信息吗? - K. Uzair
你需要将查询参数化,仅仅将$name和$age插入到查询中会产生无效的SQL(并且有很大的机会让别人插入他们自己的恶意SQL)。 - Joachim Isaksson
@K.Uzair - 分享了它! - Deadpool
1
在INSERT语句中,需要在字符串周围加上引号:...('$name', '$age')... - Milan
1
现在控制台没有错误了吗?你是否输出了从Ajax请求中发布的值? - K. Uzair
显示剩余6条评论
3个回答

1
即使您使用jquery将数据作为json发送,php仍然将其作为$_POST对象接收。因此,这应该可以工作:
$name = $_POST['name'];
$age = $_POST['age'];

1
这对我来说解决了问题... ;) - Deadpool

1
我认为您的对象$data_back为空,因为函数json_decode解析数据时出现错误。您应该尝试在json_decode后使用var_dump($data_back); exit;或更高级的调试方法。

是的,我在进行这项分析时发现插入了空行+1。 - Deadpool

0

我相信这是在 json_decode 后访问数据的正确方式

$name = $data_back->name;

我也建议您研究一下准备语句来执行数据库查询...好的,我强烈建议您去了解一下。

编辑:也许可以尝试这个:用$_POST替换file_get_contents();


你也可以使用 json_decode($data,true) 来返回一个关联数组,就像这样:$name = $json['name']; - jaggedsoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接