2016-12-04 7 views
0

Ich habe eine Anwendung, die mit einer inoffiziellen Overwatch-API verbinden und Informationen dieses Spielers abrufen und in meiner Datenbank speichern wird. Ich gehe durch, wie ich die Informationen bekomme, nur um sicherzustellen, dass es kein Problem woanders ist.PHP - undefined Index in Params-Array

beginne ich mit wie so innerhalb einer Anordnung jeden der Helden mit:

$heroArray = array(
    "zenyatta" => "0", 
    "mei" => "0", 
    "tracer" => "0", 
    "soldier76" => "0", 
    "anaamari" => "0", 
    "roadhog" => "0", 
    "reinhardt" => "0", 
    "torbjorn" => "0", 
    "mccree" => "0", 
    "junkrat" => "0", 
    "dva" => "0", 
    "winston" => "0", 
    "hanzo" => "0", 
    "widowmaker" => "0", 
    "reaper" => "0",  //this hero is causing problems later 
    "pharah" => "0",  //this hero is causing problems later 
    "symmetra" => "0", //this hero is causing problems later 
    "genji" => "0", 
    "lucio" => "0", 
    "bastion" => "0", 
    "mercy" => "0", 
    "zarya" => "0", 
    "sombra" => "0" 
); 

Die Werte auf Null, wenn die Werte eingestellt werden gefüllt wird, um die Anzahl von Stunden sein, die Spieler mit diesem Helden gespielt . Dann werden die Helden durchgeschleift, um die Informationen aus der JSON-Datei zu erhalten, die die API zurückgegeben hat.

Das Array und andere Werte werden dann an die alterPlayer-Funktion übergeben. Der SQL-Code lautet wie folgt:

$sqlQuery= "UPDATE player SET timeplayed = :timeplayed, prestige = :prestige , level = :level, avatar = :avatar, wins = :wins, Zenyatta = :zenyatta, Mei = :mei, Tracer = :tracer, Soldier76 = :soldier76, Anaamari = :anaamari, Roadhog = :roadhog, Reinhardt = :reinhardt, Torbjorn = :torbjorn, Mccree = :mccree, Junkrat = :junkrat, Dva = :dva, Winston = :winston, Hanzo = :hanzo, Widowmaker = :widowmaker, Reaper = :reaper, Pharah = :pharah, Symmetra = :symmetra, Genji = :genji, Lucio = :lucio, Bastion = :bastion, Mercy = :mercy, Zarya = :zarya, Sombra = :sombra, TopHero :heroTopName, SecondHero = :heroSecondName, ThirdHero = :heroThirdName, TopHeroElim = :heroTopElim, TopHeroDeath = :heroTopDeath, SecondHeroElim = :heroSecondElim, SecondHeroDeath = :heroSecondDeath, ThirdHeroElim = :heroThirdElim, ThirdHeroDeath = :heroThirdDeath WHERE Battletag = :battletag"; 

Und dann werden die Werte in der params Array zugewiesen (ich habe einige der Werte entfernt, um Platz zu sparen hier):

$params = array(

     "junkrat" => $heroArray['junkrat'], 
     "dva" => $heroArray['dva'], 
     "winston" => $heroArray['winston'], 
     "hanzo" => $heroArray['hanzo'], 
     "widowmaker" => $heroArray['widowmaker'], 
     "reaper" => $heroArray['reaper'],   //problem 
     "pharah" => $heroArray['pharah'],   //problem 
     "symmetra" => $heroArray['symmetra'],  //problem 
     "genji" => $heroArray['genji'], 
     "lucio" => $heroArray['lucio'], 
     "bastion" => $heroArray['bastion'], 
     "mercy" => $heroArray['mercy'] 

    ); 

Als ich das laufen in Kommandozeile Ich erhalte folgenden Fehler:

C:\Windows\system32>C:/xampp\php\php.exe C:\xampp\htdocs\overwatch\alterPlayer.php 
NULL 

Notice: Undefined index: reaper in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 123 

Notice: Undefined index: pharah in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 124 

Notice: Undefined index: symmetra in C:\xampp\htdocs\overwatch\PlayerTableGateway.php on line 125 
Could not update player 

Also die Helden, die Probleme verursachen, sind Reaper, Pharah und Symmetra. Wenn jemand den Fehler entdecken kann, würde es sehr geschätzt werden !!

+0

Ihre Datenbank ist durcheinander. Was ist, wenn sie dem Spiel einen neuen Helden hinzufügen? Sie müssen eine zusätzliche Spalte erstellen. Etwas tun. – Phiter

+0

Dies ist ein akademisches Projekt, wenn die Überspielung weitere Helden hinzufügen möchte, werde ich sie nicht zu meiner Anwendung hinzufügen. – Marzipan

+1

Ich sehe. Aber auch in kleineren Projekten ist es gut, die besten Ansätze zu verwenden, nur damit man sich daran gewöhnt. – Phiter

Antwort

1

In Ihrem foreach, möchten Sie wahrscheinlich, dies zu tun:

foreach($heroArray as $key => $value){ 
    $heroArray[$key] = floatval($json[$region]['heroes']['stats']['quickplay'][$key]['general_stats']['time_played']); 
} 

Dieses korrekt das Array ändern.

+0

Vielen Dank für Ihre Hilfe! Ich bekomme immer noch die nicht identifizierten Indexfehler für diese drei Helden. – Marzipan

+1

Das Problem kommt dann von Ihrer '$ json'-Variable. Var lade es ab, bevor du deine foreach startest und überprüfe, ob die Champions innerhalb des ** Quickplay-Arrays existieren. – Phiter

+0

Der Punkt bleibt, dass Sie Ihre foreach-Schleife ändern sollten. Die Schleife liest nur den Wert in '$ value', Sie können es nicht so überschreiben. – user2693053