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]
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]
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.
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.
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.
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 ^^
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.
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 )
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 ...)
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.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden