Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON到PHP,然后foreach?_Php_Jquery_Mysql_Json_Pdo - Fatal编程技术网

JSON到PHP,然后foreach?

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)

我从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) {
 // 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_解码已通过
  • 确保检查
    $data\u input
    是否为数组。json_decode()操作的结果是:
返回值

返回用json编码的适当PHP类型的值。值true、false和null(不区分大小写)分别作为true、false和null返回。如果无法解码json或编码数据深度超过递归限制,则返回NULL

虽然在你的情况下,它应该是。我打赌是解码错误

编辑:Victor Nicolet发现了实际错误。使用json_last_error并进行更多检查仍然很好


您将
$\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”]进行测试输出吗使用打印并发布结果?