array_keys()期望参数1是数组

时间:2016-05-10 04:16:33

标签: php angularjs

我使用angular作为前端,后端使用php。

我正在尝试将一些数据作为数组从angular发布到php,并在控制台中获取错误array_keys() expects parameter 1 to be array

angular.js

var form_data_head = {};
form_data_head['doc_no'] = $scope.add.doc_no;
form_data_head['date'] = $scope.add.tanggal;
form_data_head['requisitor'] = $scope.add.requisitor;

$http({
  method: 'POST',
  url: "api/config/function-insert.php",
  data: {
    form_data_head: form_data_head,
    tablename: 'pr_head',
  },
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  }
}).then(function(response){
  console.log(response.data);
}, function(response){
  console.log("failed");
})

PHP

<?php

require_once 'db.php';

$postdata = file_get_contents('php://input');
$request = json_decode($postdata);

$table_name = $request->tablename;
$form_data_head = $request->form_data_head;

$fields = array_keys($form_data_head);

$sql = "INSERT INTO ".$table_name." (`".implode('`,`', $fields)."`) VALUES('".implode("','", $form_data_head)."')";
return $mysqli->query($sql);
?>

将数组从angular传递给php是错误的方法吗?

更新

如果我添加var_dump($request->form_data_head);

,这就是我从控制台获得的内容
object(stdClass)#3 (3) {
  ["doc_no"]=>
  string(4) "test"
  ["date"]=>
  string(24) "2016-05-10T04:26:02.857Z"
  ["requisitor"]=>
  string(0) ""
}

1 个答案:

答案 0 :(得分:1)

json_decode($postdata, false)

将你的json变成StdClass

json_decode($postdata, true)

将你的json变成数组

$request = json_decode($postdata,true);

$table_name = $request['tablename'];
$form_data_head = $request['form_data_head'];

$fields = array_keys($form_data_head);

http://php.net/manual/en/function.json-decode.php