2016-11-29 38 views
2

私はPHPを使い始めています。私は、JSON形式の着信Webフックを受け取るWebサーバーを持っています。PHP経由のMySQLへのJSON Webフック

ウェブフックは、オブジェクトに基づいて3つの異なる構造で来ることができます。それぞれの異なるフォーマットは、「タイプ」に基づいて異なるテーブルに挿入されます。

ウェブフックの3つのフォーマットは次のとおりです。

1.

{"message": 
    {"team_id": 3, 
    "place_points": 4000, 
    "last_modified": 1480297989459, 
    "latitude": 27.140134, 
    "guard_object_id": 130, 
    "enabled": true, 
    "place_id": "YjliYjRkYzJiZmI0NDIyZj"placezRlZmM0OGFhOWIxMTguMTY=",  
    "longitude": -80.192017}, 
    "type": "place"} 

2.

{"message": 
    {"bonus_expiration": null, 
    "store_id": "YjhlMWQ3MDcwN2EzNGMwY2I1NGE5YzVmNDA3ZWRlMGIuMTY=", 
    "enabled": true, "longitude": -80.197377, 
    "last_modified": 1474148043976, 
    "active_fort_modifier": null, 
    "latitude": 27.146217}, 
    "type": "store"} 

3.

{"message": 
    {"disappear_time": 1480353234, 
    "meeting_id": "88dedc26aad", 
    "move_2": null, 
    "time_until_hidden_ms": 1411382559, 
    "last_modified_time": 1480352334560, 
    "encounter_id": "MzIxNTQ1NzIzMzMzMDExOTI5Mg==", 
    "move_1": null, 
    "individual_defense": null, 
    "object_id": 13, 
    "individual_stamina": null, 
    "time_detail": -1, 
    "longitude": -80.19295513708012, 
    "latitude": 27.141183040207377, 
    "individual_attack": null}, 
    "type": "object"} 

これは、府私は一緒に入れているPHPでウェブフックをPHPスクリプトのアドレスに送信したときに動作しません。どんな助けも高く評価されます。

<?php 


# MySQL database connection info 
$host = 'localhost:3306'; 
$dbname = 'xxxxxxx'; 
$user = 'xxxxxxx'; 
$password = '-------'; 
$db = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $user, $password); 

# Define Type Variables 

$place = 'place'; 
$store = 'store'; 
$object = 'object'; 

# Decide if the WebHook is a place, store, or object 

//$input = file_get_contents('mysql_webhook_payload.json'); # Local file for debugging 
$input = file_get_contents('php://input'); # POST data from webhook 
$payload = json_decode($input, true); 

#IF LOOP for type 

if ($payload['message']['type'] == $place) { 

    $team_id = $payload['message']['team_id']; 
    $place_points = $payload['message']['place_points']; 
    $last_modified = $payload['message']['last_modified']; 
    $latitude = $payload['message']['latitude']; 
    $guard_object_id = $payload['message']['guard_object_id'];  
    $enabled = $payload['message']['enabled']; 
    $place_id = $payload['message']['place_id'];  
    $longitude = $payload['message']['longitude']; 
    $sql = "INSERT INTO places (`place_id`, `team_id`, `guard_object_id`, `place_points`, `enabled`, `latitude`, `longitude`, `last_modified`) 
      VALUE ($place_id, $team_id, $guard_object_id, $place_points, $enabled, $latitude, $longitude, $last_modified)"; 
} 
else if ($payload['message']['type'] == $store) { 
    $bonus_expiration = $payload['message']['bonus_expiration']; 
    $store_id = $payload['message']['store_id']; 
    $enabled = $payload['message']['enabled']; 
    $longitude = $payload['message']['longitude']; 
    $last_modified = $payload['message']['last_modified']; 
    $active_fort_modifier = $payload['message']['bonus_expiration']; 
    $latitude = $payload['message']['latitude']; 

    ////missing sql entry 


} 
else if ($payload['message']['type'] == $object) { 
    $disappear_time = $payload['message']['disappear_time']; 
    $meeting_id = $payload['message']['meeting_id']; 
    $encounter_id = $payload['message']['encounter_id']; 
    $longitude = $payload['message']['longitude']; 
    $last_modified_time = $payload['message']['last_modified_time']; 
    $move_1 = $payload['message']['move_1']; 
    $latitude = $payload['message']['latitude']; 
    $individual_defense = $payload['message']['individual_defense']; 
    $object_id = $payload['message']['object_id']; 
    $individual_stamina = $payload['message']['individual_stamina']; 
    $individual_attack = $payload['message']['individual_attack']; 
    $time_detail = $payload['message']['time_detail']; 
    $move_2 = $payload['message']['move_2']; 

    $sql = "INSERT INTO `object`(`encounter_id`, `meeting_id`, `object_id`, `latitude`, `longitude`, `disappear_time`, `individual_attack`, `individual_defense`, `individual_stamina`, `move_1`, `move_2`, `last_modified`, `time_detail`) VALUES ($encounter_id, $meeting_id, $object_id, $latitude, $longitude, $disappear_time, $individual_attack, $individual_defense, $individual_stamina, $move_1, $move_2, $last_modified, $time_detail)"; 

} 

?> 

私はそれがplace_id文字列に引用符"が含まれているとして、最初のスニペットが無効である、ここで、おそらく方法オフ

+0

なぜ私はpythonで直接データを挿入していないのか分かりません。 Pythonスクリプトが別のコンピュータで実行されている場合、このディスカッションには関係ありません。あなたはそれに言及することで、質問を非常に不明瞭で混乱させました。最後に、実際にSQLを実行せずにデータベースにデータが入ることをどのように期待できますか? – e4c5

+0

私が述べたはずの私の目標は、複数の人々がPythonアプリケーションをローカルで実行してデータを提供することです。 Pythonコードは私のものではなく、Pythonも知りません。コードにはJSON Webフックを可変アドレスに送信する機能が組み込まれています。これが投稿の収集方法です。私の "if"の内側はSQLのエントリです。 – JK2005

+0

あなたの質問を編集してください。あなたが掲示した実行可能コードではない「ランコードスニペットのもの」を削除してください。 – e4c5

答えて

1

ています。

$payload['message']['type']ではなく$payoload['type']です。 typeの前の},に注意してください。

上記を解決すると、挿入がエスケープまたは引用されないため、SQLエラーが発生する可能性があります。 PDO's bindParamを使用してください。

残りのコードはうまくいくはずです。

+0

無効な文字列が見つかりました。コードを検索/置換します。あなたの助けをありがとう、これは私の質問を解決した – JK2005

+0

どのように答えを受け入れることについて? – pbogut

+0

申し訳ありませんが、まずスタックのオーバーフローを尋ねます!ありがとうございました! – JK2005

関連する問題