Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fehler bei Textausgabe in dynmaischen Bild

Empfohlene Antworten

Veröffentlicht

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]


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]

$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.

- 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.


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.

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 ^^

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.

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 )

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 ...)

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.