2016-05-05 7 views
1

Ich versuche Daten von einem Steam Benutzer mit CS: GO Stats in eine MySQL Datenbank mit PHP einzufügen. Ich brauche die name und value Werte aus dem stats Array in das MYSQL eingefügt, die ich in einer Android-Anwendung anzeigen werde, aber ich bin mir nicht sicher, wie genau es geht.Speichern von Steam Game Daten von Steam API in MySQL Datenbank

Code:

<?php 
    $con = new mysqli('mysql6.000webhost.com','a2689951_Cheesy','ansmh1997', 'a2689951_mSicx'); 
    if (mysqli_connect_error()) { 
     echo mysqli_connect_error(); 
     exit; 
    }    

    $stats = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=<key>&steamid=76561198050187807"); 
    $json = json_decode($stats, true); 
    $stats = array(); 
    foreach ($content['playerstats']['stats'] as $stat) { 
     $stats[$stat["name"]] = $stat["value"]; 
    } 

    $insert = "INSERT INTO user (total_kills, total_deaths) VALUES (?, ?)"; 
    $stmt = $con->prepare($insert); 
    $stmt->bind_param("ss", $total_kills, $total_deaths); 
?> 

API Beispiel Ausgabe:

{ 
    "playerstats": { 
     "steamID": "76561198050187807", 
     "gameName": "ValveTestApp260", 
     "stats": [ 
      { 
       "name": "total_kills", 
       "value": 35179 
      }, 
      { 
       "name": "total_deaths", 
       "value": 30241 
      }, 
      { 
       "name": "total_time_played", 
       "value": 2444377 
      }, 
      // ... 
     ] 
    } 
} 
+0

Bitte geben Sie auch Ihre aktuelle Frage an! –

+0

Das sieht besser aus? –

+0

Sie sollten explizit den Teil angeben, mit dem Sie Probleme haben. Ansonsten ist es eine sehr breite Frage. Ich versuchte es trotzdem zu beantworten. –

Antwort

0

Ich denke, Ihre Insert-Anweisung innerhalb der foreach sein muss, versuchen Sie dies.

$con = mysqli_connect("mysql6.000webhost.com", "a2689951_steam", "password", "a2689951_playerdata"); 

$stats = file_get_contents("http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=(MyKey)&steamid=(PlayerID)"); 
$json = json_decode($stats, true); 
$stats = array(); 
foreach ($content['playerstats']['stats'] as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
    $total_kills = $stats["total_kills"]; 
    $total_deaths = $stats["total_deaths"]; 

    $insert = "INSERT INTO user (total_kills, total_deaths) VALUES ('$statement', 'siss', $total_kills, $total_deaths)"; 
    if ($con->query($insert) === TRUE) { 
     $response = array(); 
     json_encode($response); 
     return json_encode($response["success"]); 

    } else { 
     return "Error: <br>" . $con->error; 
    } 
} 
0

Ein paar Dinge in die Gewohnheit zu tun, zu bekommen, da Sie einen Anfänger sind:

  • Sie die mysql -Funktionen in PHP nicht verwenden. Verwenden Sie stattdessen mysqli (es unterstützt sogar Objekt-ORIENTET-Notation!)
  • Die Art, wie Sie Ihre INSERT-Anweisung eingerichtet haben, macht Ihre vorstellbaren zu SQL Injection attacks. Verwenden Sie stattdessen eine "prepared statement".
  • Um Daten von einem PHP-Skript "zurückzugeben" (dh, es direkt an den Browser zu senden), müssen Sie echo statt return verwenden.
  • Sie haben diese Zeile in Ihrem Code: json_encode($response), wobei $response ein leeres Array ist. Diese Zeile wird nichts bewirken. Die json_encode() -Funktion gibt einen String zurück, der die JSON-Darstellung von dem enthält, was Sie ihm geben. Es ändert es nicht!
  • Ich entfernte den API-Key von der URL, die Sie in Ihrem Beispiel hatten, da die gemeinsame Freigabe des Schlüssels keine gute Idee ist und dazu führen kann, dass Valve Ihren Schlüssel verbietet (zum Beispiel wenn böswillige Leute ihn verwenden, um Anfragen an die API zu senden)).

Jetzt für Ihre eigentliche Problem:

foreach ($json->playerstats->stats as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
    $total_kills = $stats["total_kills"]; 
    $total_deaths = $stats["total_deaths"]; 

ich denke, es könnte einige Verwirrung darüber, was Teil dieses Codes wird durch die Schleife tatsächlich wiederholt. Es ist nicht nur die erste Zeile, es ist der gesamte Körper (von den {}-Klammern eingeschlossen).

Das Problem ist, dass Sie nur den ersten Eintrag von der JSON in das $stats -array erhalten, was total_kills wäre. Aber Sie wollen alle von ihnen, so dass Ihre Schleife allein über diesen Teil ausgeführt werden soll:

foreach ($content['playerstats']['stats'] as $stat) { 
    $stats[$stat["name"]] = $stat["value"]; 
} 
// Continue as you did... 

Dies wird dann bringt die gesamten Daten von Ihrer Anfrage in das Format, das Sie erwarten, so dass der zweite Zugang zu $stats funktioniert richtig .

+0

Leider wurde nichts in die Datenbank hochgeladen. Überprüfen Sie den bearbeiteten Beitrag auf neuen Code. –

+0

In Ihrem neuen Code werden die Variablen '$ total_kills' und' $ total_deaths' niemals zugewiesen. Wenn Sie Fehler erhalten, fügen Sie diese bitte ebenfalls hinzu. –

Verwandte Themen