2016-11-29 3 views
2

Ich bin ein Start mit PHP und ich habe einen Webserver, der einen eingehenden Web-Hook im JSON-Format erhält.JSON Web-Hook zu MySQL über PHP

Der Webhaken kann je nach Objekt in 3 verschiedenen Strukturen vorliegen. Jedes unterschiedliche Format wird basierend auf "type" in eine andere Tabelle eingefügt:

Die 3 Formate für Webhook sind wie folgt.

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"} 

Dies ist PHP Ich habe zusammen, bu Es funktioniert nicht, wenn ich den Webhook an die Adresse des PHP-Skripts sende. Jede Hilfe würde sehr geschätzt werden.

<?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)"; 

} 

?> 

Ich bin Weise wahrscheinlich weg hier

+0

Ich verstehe nicht, warum Sie die Daten nicht direkt mit Python einfügen. Wenn Ihr Python-Skript auf einem anderen Computer ausgeführt wird, ist es für diese Diskussion nicht relevant. Sie haben die Frage durch Erwähnung ziemlich unklar und verwirrend gemacht. Zu guter Letzt, wie kann man erwarten, dass die Datenbank gefüllt wird, ohne SQL-Anweisungen auszuführen? – e4c5

+0

Mein Ziel, das ich hätte angeben sollen, ist, dass mehrere Leute die Python-Anwendung lokal ausführen und Daten beisteuern. Der Python-Code gehört mir nicht, und ich kenne Python nicht. Der Code hat die Fähigkeit eingebaut, einen JSON-Web-Hook an eine variable Adresse zu senden, und so sammle ich Beiträge. in meinem "wenn" ist ein SQL-Eintrag. – JK2005

+0

so bearbeiten Sie Ihre Frage. Bitte entfernen Sie das "Code-Snippet-Zeugs ausführen", das nicht von Ihnen geposteten Code ausführen kann. – e4c5

Antwort

1

Der erste Snippet ist ungültig, da es Zitat " im String place_id enthält.

Es ist nicht $payload['message']['type'] aber $payoload['type']. Hinweis }, vor type Schlüssel.

Wenn Sie oben lösen, erhalten Sie wahrscheinlich einen SQL-Fehler, da Ihre Einfügungen nicht maskiert oder zitiert werden. Sie sollten PDO's bindParam verwenden.

Der Rest des Codes sollte in Ordnung sein, funktioniert für mich.

+0

Die ungültige Zeichenfolge war ich Code suchen/ersetzen. Vielen Dank für Ihre Hilfe, das hat meine Frage gelöst – JK2005

+0

Wie wäre es dann, die Antwort zu akzeptieren? – pbogut

+0

Sorry, zuerst auf Stapelüberlauf gefragt! Danke nochmal! – JK2005