2016-05-10 9 views
-1

私はフロントエンドとして角度を使用しており、バックエンドではPHPを使用しています。array_keys()は、パラメータ1が配列になることを期待しています

私はいくつかのデータをangleから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); 
?> 

それがPHPに角度から配列を渡すために間違った方法ですか?

UPDATE

これは私が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) "" 
} 
+0

'$要求 - > form_data_head'配列ではありません。 'var_dump($ request-> form_data_head)'を使って何が入っているかを確認し、それがあなたが望む配列であることを確認してください。 – IROEGBU

+0

は質問の詳細を追加しました。 –

+0

あなたはそれを試すことができます$ form_data_head =(配列)$ request-> form_data_head; –

答えて

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

+0

配列を 'jsonと'(array)Object'の間でどのような違いがありますか? –

+0

$ form_head_dataだけを配列としてstdClassとして$要求したい場合は、型キャスティングが解決策になります。 @Mukesh Ram –

+0

大丈夫、説明のためにありがとう。 –

関連する問題