JSON到PHP,然后foreach?
我从jQueryscript向我的PHP页面发送一个有效的JSON字符串:JSON到PHP,然后foreach?,php,jquery,mysql,json,pdo,Php,Jquery,Mysql,Json,Pdo,我从jQueryscript向我的PHP页面发送一个有效的JSON字符串: var data = '{ "data":[ { "id":"12", "checked":"true" },{ "id":"4", "checked":"false" },{ "id":"33", "checked":"false" } ] }'; $.post ("page.php", { data_input:data }, function (data)
var data = '{
"data":[
{
"id":"12",
"checked":"true"
},{
"id":"4",
"checked":"false"
},{
"id":"33",
"checked":"false"
}
]
}';
$.post ("page.php", { data_input:data }, function (data) {
// code
});
在PHP页面中获得数据后,我使用json_decode
方法对其进行解析,然后尝试在为PDO
查询创建的foreach
语句中使用它:
<?php
$data_input = json_decode ($_REQUEST['data_input'], true);
$sql = "UPDATE my_table SET user_enabled = :checked WHERE node_prop_id = :id";
$stmt = $dns->prepare ($sql);
foreach ($data_input as $data) {
$ok = $stmt->execute ($data);
$num = $stmt->rowCount ();
}
if ($ok) return 1;
else return 0;
?>
这将返回错误:
PHP警告:为第XX行/home/../page.PHP中的foreach()提供的参数无效
我能在foreach
语句中找到使用JSON数据的方法吗?- 通过检查,确保json_解码已通过
- 确保检查
是否为数组。json_decode()操作的结果是:$data\u input
您将
$\u请求['data']
视为一个JSON字符串,但情况并非总是如此(如果愿意,我可以发送一个带有无效值的请求),它也不会总是一个表示数组或字典的JSON字符串。你需要事先检查,如果没有,你需要做出相应的反应
现在,为您的实际错误。你写道:
$.post (page.php, { data_input:data }, function (data) {
// code
});
这将是一个错误,因为没有引用page.php
。但即使假设它是在您的实际代码中,服务器端数据也会存储在$\u POST['data\u input']
,而不是$\u POST['data']
我发现了问题:
<?php
// I've changed $data to $json for more clarity
$json = json_decode (stripslashes ($_REQUEST['json_string']), true); // added stripslashes method for more debug, but i think it still works without
$json = $json["data"]; // this was the problem
$sql = "UPDATE my_table SET user_enabled = :checked WHERE node_prop_id = :id";
$stmt = $dns->prepare ($sql);
foreach ($json as $value) {
$ok = $stmt->execute ($value);
$num = $stmt->rowCount ();
}
if ($ok) return 1;
else return 0;
?>
是否已检查$\u请求['data']字符串不包含转义字符?如果是这样(他们经常是这样),我打赌json_decode无法解码它,并返回null。您可以使用stripslashes($string)来删除它们抱歉,它们只是复制/粘贴错误(我已经简化了代码),我已经修复了它们昨天一个用户给出了正确的答案,但删除了它的传输,我有json库,但没有方法json\u last\u error返回一个缺少的函数error您可以对$\u REQUEST[“data\u input”]进行测试输出吗使用打印并发布结果?