Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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]

Geschrieben

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]

Geschrieben

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

Geschrieben

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

Geschrieben


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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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 )

Geschrieben

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

Geschrieben

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.

Geschrieben
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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...