trainmen Geschrieben 24. März 2008 Geschrieben 24. März 2008 Hi, ich will in einem dynamischen Bild Text ausgeben nur bekomme ich eine Fehler wenn ich dies tu. Die Textausgabe ist ganz unten im PHP Code. imagefttext($img, $size_1, 0, 1, 1, $black, $font_2, $skilling[171]); imagefttext($img, $size_1, 0, 1, 1, $yellow, $font_2, $skilling[171]);. Wenn ich die Textausgabe raus nehme würd das Bild generiert. Fehlermeldung: Die Grafik "http://127.0.0.1/banner/signatur.php?char=Train" kann nicht angezeigt werden, weil sie Fehler enthält. Dies ist der PHP Code wo ich den Fehler nicht finde. $skilling = 172;12;75;182;1;75; ini_set('display_errors','1'); error_reporting(E_ALL); @mysql_connect('192.168.178.24', 'trainmen', '2351020') or die("Could not connect to server"); mysql_select_db('ascent') or die("Could not find database"); if (!empty($_GET['char'])) { $sql = " SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.skills, c.online, gd.guildid, gd.playerid, g.guildName FROM characters c INNER JOIN guild_data gd ON gd.playerid = c.guid INNER JOIN guilds g USING(guildId) WHERE name = '" . htmlspecialchars($_GET['char']) . "'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_assoc($query); $counter = mysql_num_rows($query); if($counter == 0) { $guild = ""; } else { $name = $row['name']; $race = $row['race']; $classe = $row['class']; $gender = $row['gender']; $level = $row['level']; $skillstring = $row['skills']; $online = $row['online']; $guild = "" . $row['guildName']; if($race >= 1 && $race <= 11) { $im_ar = array('', 'Mensch_', 'Orc_', 'Zwerg_', 'Nachtelf_', 'Untoter_', 'Taure_', 'Gnom_', 'Troll_', '', 'Blutelf_', 'Draenei_') or die("Rasse nicht spezifizierbar"); $imag2 = $im_ar[$race]; $im_ar = array('', 'Krieger_', 'Paladin_', 'Jaeger_', 'Schurke_', 'Priester_', '', 'Schamane_', 'Magier_', 'Hexenmeister_', 'Druide_') or die("Klasse nicht spezifizierbar"); $imag3 = $im_ar[$classe]; $im_ar = array('m.png', 'w.png') or die("Geschlecht nicht spezifizierbar"); $imag4 = $im_ar[$gender]; } Header("Content-Type: image/png"); $img = ImageCreateFromPNG ('images/' . $imag2 . $imag3 . $imag4); $yellow = ImageColorAllocate($img, 255, 218, 88); $black = ImageColorAllocate($img, 0, 0, 0); $font_1 = "fonts/Van Helsing.ttf"; $font_2 = "fonts/TektonPro-BoldCond.otf"; $size_1 = 10; $size_2 = 19; $banner_x = 500; $banner_y = 167; $banner_pos1 = 28; //Charname $banner_s1 = imagettfbbox($size_2, 0, $font_1, $name); $char_font = 500 - ($banner_pos1 + $banner_s1[4]); $charn_x = $char_font; $charn_y = 134; imagefttext($img, $size_2, 0, $charn_x, $charn_y, $black, $font_1, $name); imagefttext($img, $size_2, 0, $charn_x - 2, $charn_y -2, $yellow, $font_1, $name); //Leveltext imagefttext($img, $size_1, 0, 266, 164, $black, $font_2, $level); imagefttext($img, $size_1, 0, 265, 163, $yellow, $font_2, $level); //Gilde $banner_s1 = imagettfbbox($size_2, 0, $font_1, $guild); $char_font = 500 - ($banner_pos1 + $banner_s1[4]); $charn_x = $char_font; $guildn_y = 164; imagefttext($img, $size_2, 0, $charn_x, $guildn_y, $black, $font_1, $guild); imagefttext($img, $size_2, 0, $charn_x - 2, $guildn_y -2, $yellow, $font_1, $guild); if( stristr( $skillstring , ";" ) ) { $skillType = 1; // new type $allparts = explode( ";" , $skillstring ); } else { $skillType = 0; // old type $allparts = explode( " " , $skillstring ); } $professions = array( 164 , 165 , 171 , 182 , 186 , 197 , 202 , 333 , 393 , 755 ); $badprofessions = array( 65700, 65701, 65707, 65718, 65722, 65733, 65738, 65869, 65929, 66291 ); $parts = array(); $newskillstring = array(); for( $i = 0; $i < count( $allparts ) ; $i += 3 ) { $parts[$i] = $allparts[$i]; if( !isset( $allparts[$i+1] ) ) $parts[$i+1] = 0; else $parts[$i+1] = $allparts[$i+1]; if( !isset( $allparts[$i+2] ) ) $parts[$i+2] = 0; else $parts[$i+2] = $allparts[$i+2]; if( $skillType == 0 ) { $newskillstring[$i] = str_replace( "\n" , "" , $parts[$i] . " " . $parts[$i+1] . " " . $parts[$i+2] ); } else { $newskillstring[$i] = str_replace( "\n" , "" , $parts[$i] . ";" . $parts[$i+1] . ";" . $parts[$i+2] ); } } $beruf = array(); foreach( $newskillstring as $key => $val ) { if( $newskillstring[$key] != "0 0 0" and $newskillstring[$key] != "0;0;0" ) { if( $skillType == 0 ) { $subparts = explode( " " , $newskillstring[$key] ); $skillid = $subparts[0]; } else { $subparts = explode( ";" , $newskillstring[$key] ); $skillid = $subparts[0]; } //$skillid = $subparts[0] - 0x10000; switch( $skillid ) { case 164: $beruf[] = "professions/Schmiedekunst.png"; break; case 165: $beruf[] = "professions/Lederverarbeitung.png"; break; case 171: $beruf[] = "professions/Alchemie.png"; break; case 182: $beruf[] = "professions/Kraeuterkunde.png"; break; case 186: $beruf[] = "professions/Bergbau.png"; break; case 197: $beruf[] = "professions/Schneiderei.png"; break; case 202: $beruf[] = "professions/Ingenieurkunst.png"; break; case 333: $beruf[] = "professions/Verzauberungskunst.png"; break; case 393: $beruf[] = "professions/Kürschnnerei.png"; break; case 755: $beruf[] = "professions/Juwelenschleifen.png"; break; default: $proficon = ""; } @$beruf_0 = imagecreatefrompng($beruf[0]); @imagecopy($img, $beruf_0, 4, 86, 0, 0, 22, 22); } } foreach( $newskillstring as $key => $val ) { if( $newskillstring[$key] != "0 0 0" and $newskillstring[$key] != "0;0;0" ) { if( $skillType == 0 ) { $subparts = explode( " " , $newskillstring[$key] ); $skillid = $subparts[0]; } else { $subparts = explode( ";" , $newskillstring[$key] ); $skillid = $subparts[0]; } //$skillid = $subparts[0] - 0x10000; switch( $skillid ) { case 164: $beruf[] = "professions/Schmiedekunst.png"; break; case 165: $beruf[] = "professions/Lederverarbeitung.png"; break; case 171: $beruf[] = "professions/Alchemie.png"; break; case 182: $beruf[] = "professions/Kraeuterkunde.png"; break; case 186: $beruf[] = "professions/Bergbau.png"; break; case 197: $beruf[] = "professions/Schneiderei.png"; break; case 202: $beruf[] = "professions/Ingenieurkunst.png"; break; case 333: $beruf[] = "professions/Verzauberungskunst.png"; break; case 393: $beruf[] = "professions/Kürschnnerei.png"; break; case 755: $beruf[] = "professions/Juwelenschleifen.png"; break; default: $proficon = ""; } if(@$beruf[0] == @$beruf[1]) break; else { $beruf_1 = imagecreatefrompng($beruf[1]); imagecopy($img, $beruf_1, 31, 91, 0, 0, 22, 22); } } } [/PHP] Zitieren
trainmen Geschrieben 24. März 2008 Autor Geschrieben 24. März 2008 foreach( $newskillstring as $key => $val ) { if( $newskillstring[$key] != "0 0 0" or $newskillstring[$key] != "0;0;0" ) { if( $skillType == 0 ) { $subparts = explode( ";" , $newskillstring[$key] ); $skill_000 = $subparts[0]; $skill_001 = $subparts[1]; #$skill_00 = implode (" ", $skill_000); #$skill_01 = implode (" ", $skill_001); $skill_0 = array ($skill_000); $skill_1 = array ($skill_001); $skilling = array_combine($skill_0, $skill_1); #$skill = array_key_exists(171, $skilling); #$skill = $skilling[10]; imagefttext($img, $size_1, 0, 1, 1, $black, $font_2, $skilling[171]); imagefttext($img, $size_1, 0, 1, 1, $yellow, $font_2, $skilling[171]); } else { $subparts = explode( ";" , $newskillstring[$key] ); $skill_000 = $subparts[0]; $skill_001 = $subparts[1]; #$skill_00 = implode (" ", $skill_000); #$skill_01 = implode (" ", $skill_001); $skill_0 = array ($skill_000); $skill_1 = array ($skill_001); $skilling = array_combine($skill_0, $skill_1); #$skill = array_key_exists(171, $skilling); #$skill = $skilling[10]; imagefttext($img, $size_1, 0, 1, 1, $black, $font_2, $skilling[171]); imagefttext($img, $size_1, 0, 1, 1, $yellow, $font_2, $skilling[171]); } #$yellow = ImageColorAllocate($img, 255, 218, 88); #$black = ImageColorAllocate($img, 0, 0, 0); #ImageString($img, 5, 1, 1, $skill, $yellow); } } ImagePNG($img); } } [/PHP] Zitieren
trainmen Geschrieben 24. März 2008 Autor Geschrieben 24. März 2008 $skilling = 172;12;75;182;1;75; Da ich mein Beitrag nicht ändern kann muss ich das so machen, also ich habe dort ein Fehler gemacht. Ich meinte $skillstring und nicht $skilling. Zitieren
Aiun Geschrieben 25. März 2008 Geschrieben 25. März 2008 - lass dir die Grafik als Datei abspeichern und schau mal ob da ein Fehler drinsteht. - Leerzeichen am Anfang und am Ende ? (außerhalb der <? ?>) und dann klassisches Debugging, d.h. in welcher Zeile tritt der Fehler auf. Wenn es keine der image... zeilen ist, muss es ja eine php eigene Fehlermeldung(parser, Fatal...) sein, und ansonsten sollte ein auskommentieren reichen. Zitieren
geloescht_JesterDay Geschrieben 25. März 2008 Geschrieben 25. März 2008 foreach( $newskillstring as $key => $val ) { if( $newskillstring[$key] != "0 0 0" or $newskillstring[$key] != "0;0;0" ) { ... [/PHP] Das hat mit dem Bild nichts zu tun, aber: [PHP]foreach( $newskillstring as $key => $val ) Damit steht jeder Wert $newskillstring[$key] doch in $val Was du also machst ist unnötig, wobei auch kein wirklicher Fehler ansich. Und wenn du den Key sonst eh nicht benötigst, reicht ja ein foreach ($newskillstring as $value) { if( $value != "0 0 0" ...[/PHP] und zum hinzufügen eines neuenWertes zum Array reicht ein einfaches [PHP] $newskillstring[] = "bla"; Das sind alles keine "Fehler" die was mit dem Bild zu tun haben, viel mir halt nur auf. Zitieren
trainmen Geschrieben 25. März 2008 Autor Geschrieben 25. März 2008 Wenn ich wie gesagt imagefttext auskommentiere ist kein Fehler. - lass dir die Grafik als Datei abspeichern und schau mal ob da ein Fehler drinsteht. Hab ich gemacht aber wie soll da ein Fehler drin stehen? Falls du meinst stat den Text der dort stehen sollte ein Fehlertext, nein es steht keiner drin - Leerzeichen am Anfang und am Ende ? (außerhalb der <? ?>) Nein da sind keine und dann klassisches Debugging, d.h. in welcher Zeile tritt der Fehler auf. Wenn es keine der image... zeilen ist, muss es ja eine php eigene Fehlermeldung(parser, Fatal...) Ich arbeite noch net lange mit PHP, also versteh ich das net ganz jetzt ^^ Zitieren
geloescht_JesterDay Geschrieben 25. März 2008 Geschrieben 25. März 2008 Ich arbeite noch net lange mit PHP, also versteh ich das net ganz jetzt ^^ z.B. könntest du erstmal error_reporting(E_ALL); setzen. Das zeigt dir alles an Meldungen an, also auch Notice und Warning, was ja nicht unbedingt ein Fehler sein muss. Dann würd ich langsam die einzelnen auskommentierten Zeilen wieder einfügen um zu sehen ob das Problem schon beim ersten ist oder erst später. Dann kannst du dir die Ausgabe als Text ansehen (wegen evtl. Fehlern z.B.) Das kannst du auch ohne Datei machen. Einfach keinen Mime-Header schicken (solltest du eh noch tun, tust du glaub ich in deinen Code nicht) und das Ding so im Browser aufrufen. Zur Not eben als Text/HTML MIME-Type, wenn er ohne trotzdem das Bild zeigt. Dann erkennst du vielleicht erstmal ob das grob nem Bild entspricht. Zitieren
trainmen Geschrieben 26. März 2008 Autor Geschrieben 26. März 2008 OK hab ich jetzt gemacht, nun erhalte ich diese Meldung: Notice: Undefined offset: 171 in E:\xampp\htdocs\banner\signatur.php on line 300 Notice: Undefined offset: 171 in E:\xampp\htdocs\banner\signatur.php on line 301 Notice: Undefined offset: 171 in E:\xampp\htdocs\banner\signatur.php on line 300 Notice: Undefined offset: 171 in E:\xampp\htdocs\banner\signatur.php on line 301 Also das heißt ja das dieser Key nicht enthalten ist ich versteh nur nicht warum -.- EDIT: So hab mir jetzt noch $skilling mit print_r ausgeben lassen und bekam das als Ergebnis: Array ( [171] => 12 ) Array ( [182] => 1 ) Array ( [] => 0 ) Zitieren
Aiun Geschrieben 26. März 2008 Geschrieben 26. März 2008 naja, dann musst du jetzt debuggen. Zurückverfolgen was sich wann ändert, oder hoffst du das jemand eine Kristallkugel hat und genau sagen kann welche Variable du ändern musst ? zu empfehlen währen noch prüfmethoden oder Fehlerabfragen (if !isset(...) throw exception ...) Zitieren
geloescht_JesterDay Geschrieben 26. März 2008 Geschrieben 26. März 2008 Also das heißt ja das dieser Key nicht enthalten ist ich versteh nur nicht warum -.- Das wird damit zusammenhängen, dass du per Key direkt auf das Array zugreifst, obwohl das noch gar nicht gefüllt ist. Du machst eine for-Schleife und in der zählst du den Key hoch. Mit dem Key schreibst du dann ins Array. Array[1] ist aber anfangs noch gar nicht definiert, daher die Notice. Notice ist nur ein Hinweis, nichts wirklich schlimmes. Jede undefinierte Variable ruft das hervor, also auch ein $name = "bla"; wenn du das irgendwo im Code stehen hast und $name davor noch nie benutzt wurde. Wie gesagt, normalerweise fügt ein Zugriff auf ein Array ohne Key ein neues Feld hinzug: Array[] = 1; Denke dann sollten die Fehler weg sein. Ohne error_reporting E_ALL sollte das aber nicht angezeigt werden, standardmäßig sind Notices aus. Zitieren
trainmen Geschrieben 27. März 2008 Autor Geschrieben 27. März 2008 Das wird damit zusammenhängen, dass du per Key direkt auf das Array zugreifst, obwohl das noch gar nicht gefüllt ist. Du machst eine for-Schleife und in der zählst du den Key hoch. Mit dem Key schreibst du dann ins Array. Array[1] ist aber anfangs noch gar nicht definiert, daher die Notice. Notice ist nur ein Hinweis, nichts wirklich schlimmes. Jede undefinierte Variable ruft das hervor, also auch ein $name = "bla"; wenn du das irgendwo im Code stehen hast und $name davor noch nie benutzt wurde. Wie gesagt, normalerweise fügt ein Zugriff auf ein Array ohne Key ein neues Feld hinzug: Array[] = 1; Denke dann sollten die Fehler weg sein. Ohne error_reporting E_ALL sollte das aber nicht angezeigt werden, standardmäßig sind Notices aus. Jo der Fehler ist weg *vor Freude in die Luft spring*. Danke Danke für die Hilfe und ich sitzt da schon seit 5 Tagen drann xD Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.