2017-02-07 2 views
0

PHPでJSONデータ配列を使用してPHPデータに変換し、MySQLデータベースを更新できる「API」をPHPで構築しようとしています。データを直接スクリプトに投稿すると、cURLを実行するのと同じように正常に動作しますが、Google Chromeの「高度なレストクライアント」アプリケーションを使用しているときに応答が得られないようです。高度なレストクライアントで無効なデータ配列の応答

ステータス:200 OKメッセージが表示されますが、Raw/Parsedレスポンスには「無効なデータ配列」と表示されます。

これは問題のスクリプトです:

<?php 
$api = json_decode($_POST['api'], true); 

$api['ExhibitorData'] = array_values($api['ExhibitorData']); 
$data = $api['ExhibitorData'][0]; 
$exhibitor_id = $data['exhibitor_id']; 

require_once 'config-api.php4'; // database connection 

// get some data based on $exhibitor_id 

$do_update = mysql_query("UPDATE table SET ... WHERE exhibitor_id = $exhibitor_id"); 
if (!$do_update) 
{ 
    http_response_code(404); 
    die(mysql_error()); 
} 
$do_another_update = mysql_query("UPDATE another_table SET ... WHERE exhibitor_id = $exhibitor_id"); 
if (!$do_another_update) 
{ 
    http_response_code(404); 
    die(mysql_error()); 
} 

$log = mysql_query("INSERT INTO log SET exhibitor_id = $exhibitor_id, ip_address = '" . $_SERVER['REMOTE_ADDR'] . "', updated_at = NOW()"); 

header('Content-Type: application/json; charset=utf-8'); 
echo json_encode(array(mysql_insert_id() => 'OK')); 

mysql_close(); 

独自のRESTのAPI(すなわちthis one)の作成に関するオンラインチュートリアルに続いて、私は正しいすべてをやっているように見えるが、私のことができるようにしていないようです応答を得ます。

私は何かすべきことはありますか?

EDIT:これは私がスクリプトに渡していJSON文字列の構造です:

{ 
    "ExhibitorData": { 
     "1": { 
      "exhibitor_id": 1, 
      ... 
     } 
    } 
} 
+0

また、最後のクエリ呼び出しでエラー処理が欠落しています。 INSERT文ではSETを使用せず、[VALUES](https://dev.mysql.com/doc/refman/5.7/en/insert.html)を使用するので、間違っているようです。 質問にはあまり関係ありませんが、どのPHPバージョンを使用していますか?私はちょっと.php4拡張で混乱しています。また、廃止予定のmysql_ *拡張子は使用しないでください。代わりに、改良された[mysqli extension](http://php.net/manual/de/book.mysqli.php)を使用してください。 –

+0

@TanuelMategiああ、v5.x上ですが、サーバは10年ほど前の開発者の.php4拡張とmysql_ *コードに分かれています。それは私が対処しなければならないものです。 – mpdc

+0

「SET」の代わりに「VALUES」を使うべきだと言ったところを無視して、構文をもう一度見て、明らかに 'SET'も有効です:Sまだエラー処理しています;) –

答えて

0

私は問題が何であったか動作するように管理します。

データを通常POSTするときは、$_POST変数にアクセスします。しかし、cURLを使用しているようですが、データをPOSTしても、実際には別の方法でアクセスする必要があります。これに

$api = json_decode($_POST['api'], true); 

:この行を変更

$api = json_decode(file_get_contents('php://input'), true); 

は、スクリプトの実行罰金の残りの部分をすることができます。

関連する問題