# PHP Farbumrandung bei Bildern



## Mosed (16. August 2008)

Ich habe ein PHP Skript, dass um Itembildern einen Rahmen in der Farbe anzeigen soll, das der Seltenheit entspricht.
Wenn ich das PHP skript direkt aufrufe ist das kein Problem.

Ich möchte das Skript aber in meinem Portal in eine interne PHP seite packen, da bei einem iframe die tooltips teilweise nicht mehr lesbar sind (da der iframe nicht so groß sein kann...)

Das Problem: Packe ich das Skript in eine interne Seite wird die farbliche Umrandung nicht angezeigt.

Das Skript:


```
<html>
<head>
<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
<style type="text/css">
/* <![CDATA[ */
#gew { color: #838383 }
#normal { color: white }
#selten { color: #1fff06 }
#rare { color: #0070dd }
#epic { color: #9f3fff }
#legend { color: #ff8406 }
#artefact { color: #db0000 }
a {color: inherit}
/* ]]> */
</style>
</head>
<center>
<h1>Unsere Gildenbank</h1>
<?php
function farbe($wert) {
switch($wert){
        case "0":
        $q2=gew;
        break;
        case "1":
        $q2=normal;
        break;
        case "2":
        $q2=selten;
        break;
        case "3":
        $q2=rare;
        break;
        case "4":
        $q2=epic;
        break;
        case "5":
        $q2=legend;
        break;
        case "6":
        $q2=artefact;
        break;
        }
    return $q2;
    }
mysql_connect("localhost","name","pass");
mysql_select_db("char");
$a=mysql_query("SELECT * FROM guild_bank_tab WHERE guildid='1'");
$anzahl=mysql_num_rows($a);
$i=0;
$content= "<form action=\"bankfach.php\" method=\"POST\">";
$content.= "<select name=\"bankfach\">";
while ($row=mysql_fetch_assoc($a)){
$content.= "<option value=\"$row[TabName]\">$row[TabName]</option>";
}
$content.="</select><input type=\"submit\" value=\"OK\"></form>";
$eingabe=$_POST["bankfach"];
$content.= "<h3>Bankfach: $eingabe</h3>";
$content.= "<table><tr><td>";
$i=mysql_query("SELECT * FROM guild_bank_tab WHERE TabName='$eingabe'");
$it=mysql_fetch_array($i);
$id=$it[TabId];
$w=0;
$s=0;
$items=mysql_query("SELECT * FROM guild_bank_item WHERE TabId='$id' AND guildid='1'");
while ($row2=mysql_fetch_assoc($items)) {
mysql_select_db("mangos");
$f=mysql_query("SELECT * FROM item_template WHERE entry='$row2[item_entry]'");
$farbe=mysql_fetch_array($f);
$item=mysql_query("SELECT * FROM locales_item WHERE entry='$row2[item_entry]'");
$ite=mysql_fetch_array($item);
$far=farbe($farbe[Quality]);
mysql_select_db("luy");
$img=mysql_query("SELECT * FROM tblwowitems WHERE itemnumber='$row2[item_entry]'");
$image=mysql_fetch_array($img);
$content.= "<div id=\"$far\"><a href=\"http://speedydragon.gamestar.de/item?id="."$row2[item_entry]"."#t=4\" target=\"_blank\"><img src=\".$image[itemicon]\" height=\"32\" weight=\"32\"></a></div>";
$w=$w+1;
if ($w==7){
$content.= "</td>";
$w=0;
$s=$s+1;
if ($s==14){
$content.= "</tr><tr><td colspan=\"5\"> <br> </td></tr><tr>";
$s=0;
}
$content.= "<td>";
}
}
mysql_select_db("mangos");
?>
</tr></table>
</center>
</body>
</html>
```
Ich habe schonmal versucht in dem function farbe() Bereich direkt einen Farbcode anzugeben, aber dann funktioniert das skript gar nicht.

Wie kann man denn da direkt Farbcodes angeben?
Oder liegt das Problem an anderer Stelle?

Da das Portal selber ja schon den Header sendet, habe ich den HTML Code auch da mal reingepackt, aber das bringt auch nichts.


----------



## jetztaber (16. August 2008)

Hast Du Dir den dadurch generierten HTML-Code schon mal im Browser angeschaut? Wahrscheinlich erbt das Teil das Fehlverhalten durch ein übergeordnetes Element.

Eine Lösungsmöglichkeit wäre, dieses Script in einem eigenen Div-Tag zu verbauen und die ererbten Eigenschaften darin weitgehend oder ganz aufzuheben, so dass die erwünschten Eigenschaften wirksam werden.


----------



## Mosed (16. August 2008)

Ja, mit PHP internen Seiten gibt es da ein paar Probleme.

Alles was außerhalb des <?php ...?> steht, steht im quellcode nachher über dem head von der ganzen Webseite (Portal usw).


```
<html>

<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
<style type="text/css">
/* <![CDATA[ */
#gew { color: #838383 }
#normal { color: white }
#selten { color: #1fff06 }
#rare { color: #0070dd }
#epic { color: #9f3fff }
#legend { color: #ff8406 }
#artefact { color: #db0000 }
a {color: inherit}
/* ]]> */
</style>

<center>
</tr></table>
</center>
</body>
</html>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

<!-- begin document head -->

<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <meta name="generator" content="MKPortal" />
  <meta http-equiv="Pragma" content="no-cache" />
  <meta content="no-cache" http-equiv="no-cache" />
  <meta http-equiv="Cache-Control" content="no-cache" />
  <title>Balls of Steel - Gildenbank2</title>
  <meta name="description" content="" />
  <meta name="keywords" content="" />

  <style type="text/css">
/*
+--------------------------------------------------------------------------
|   Cascading Style Sheet for MKportal "Forum" Portal Template
|   ========================================
|   by Meo aka Luponero [Amedeo de longis]
|      Don K. Colburn [visiblesoul.net]
|   Copyright (c) 2004-2007 mkportal.it
|   http://www.mkportal.it
|   Email: luponero@mclink.it
+--------------------------------------------------------------------------
|   > MKPortal
|   > Written By Amedeo de longis
|   > Date started: 9.2.2004
+--------------------------------------------------------------------------
*/

/*=============================
M
K  global styles
P
=============================*/


/* IMPORT body */
body,
body {

...
```
Aber dieses Speedydragon-tooltip funktioniert z.B.

Ich habe den Farbcode auch mal unter das   <style type="text/css">  gesetzt, dass über den CSS Codes steht, aber das bewirkt auch nichts.

Achja: Es wird überhaupt kein Rahmen um die Bilder angezeigt. Vielleicht liegt da das Problem.


Etwas ähnliches wie ein iframe wäre auch eine Lösung, aber es müsste möglich sein, dass die Tooltips (die erscheinen, wenn man über ein Bild hovert) nicht an den Grenzen des iframes verschwinden. Mit einem iframe kann man das ja nicht lösen, soweit ich weiß, aber gibt es eine andere Methode um Seiten "überdeckend" einzubinden?


----------



## jetztaber (16. August 2008)

Na dann: Im Quellcode ist es ausreichend, diese Zeile einzubinden:


```
<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
```
Die Javascript-Datei 'sdtooltips.js' wird im oben angegebenen Verzeichnis mit ihrem gesamten Code abgelegt.

Dann kommt der verstümmelte PHP-Code. Verstümmelt deshalb, weil am Ende Deines Codes die Tags tr und table geschlossen werden, aber nirgendwo geöffnet werden...

Kein Wunder, dass kein Rahmen sichtbar ist. Das wäre der Tabellenrahmen...

Es fehlt hier Code. Wahrscheinlich sollte der so aussehen:


```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>SpeedyDragon Tooltip-Demo</title>
<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="33%"><a href="http://www.speedydragon.de/item?id=30317">Kosmische Macht</a></td>
    <td width="34%"><div align="center"><a href="http://speedydragon.gamestar.de/item?id=30908">Apostel von Argus</a></div></td>
    <td width="33%"><div align="right"><a href="http://www.speedydragon.de/item?id=29323">Andormus Träne</a> </div></td>
  </tr>
</table>
<p>Bewege den Maus-Cursor über einen der obigen Links, um den automatisch eingefügten Tooltip zu sehen!</p>
<p>Die Tooltips sind nicht auf dieser Seite gespeichert. Die Item-Links sind ganz normale Links. Eine einzige Zeile im HTML-Code fügt die Tooltips automatisch hinzu:</p>
<p align="center"><strong><script src="http://www.speedydragon.de/js/sdtooltips.js"></script></strong></p>
<p align="center"> </p>
<p align="left">Die Links kann man auch etwas ausschmücken: <a href="http://www.speedydragon.net/item?id=32660" class="q3">[Kristallgeschmiedetes Schwert]</a>, <a href="http://speedydragon.gamestar.de/item?id=28601" class="q4">[Brustschutz des Verschwörers]</a></p>
<p align="left"><a href="http://www.speedydragon.at/item?id=28418">Noch ein Item!</a></p>
<p align="left"><a href="http://www.speedydragon.ch/item?id=30634">Und noch eines!</a></p>
<p align="left"><a href="http://speedydragon.gamestar.de/spell?id=32428">Es funktioniert auch mit Zaubern!</a></p>
<p align="left">Und auf Bildern: <a href="http://speedydragon.gamestar.de/spell?id=32428"><img src="../images/ext_search.png" border="0"></a></p>
<p align="left"><a href="http://speedydragon.gamestar.de/quest?id=10241">Sogar mit Quests kann man den Spaß nutzen!</a></p>
<p align="left">Statt den direkten Links mit ItemIDs kann auch ein Link mit dem Namen des Items genutzt werden:  <a href="http://www.speedydragon.de/item?name=Kristallgeschmiedetes+Schwert" class="q3">[Kristallgeschmiedetes Schwert]</a>, <a href="http://www.speedydragon.de/item?name=Brustschutz%20des%20Verschw%C3%B6rers" class="q4">[Brustschutz des Verschwörers]</a></p>
<p align="left">Außerdem können die Tooltips <a href="sdtooltipdemo2.htm">im Aussehen angepasst</a> werden!</p>
</body>
</html>
```


----------



## Mosed (16. August 2008)

So wie ich das gesehen habe, werden sie im php code geöffnet. oder geht sowas nicht?

denn im php code gibt es: $content.= "<table><tr><td>";

das komische ist ja, dass der Rahmen sichtbar ist, wenn ich das Skript als eigene Datei ausführe.

Eigene Datei und richtig:



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
        



im Portal und falsch:



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.
        



Beides mal der selbe Code.

(die items werden aus einer Datenbank ausgelesen)

nehme ich den code

<style type="text/css">
/* <![CDATA[ */
#gew { color: #838383 }
#normal { color: white }
#selten { color: #1fff06 }
#rare { color: #0070dd }
#epic { color: #9f3fff }
#legend { color: #ff8406 }
#artefact { color: #db0000 }
a {color: inherit}
/* ]]> */
</style> 

aus der php datei raus, wird der rahmen einfarbig dargestellt. der ist also schon notwendig.


----------



## jetztaber (16. August 2008)

Doch, geht schon. Man kann das mischen. Aber in Deinem ersten Post werden sie außerhalb des PHP-Scriptteils geschlossen. Das siehst Du am Ende des Scripts.


----------



## Mosed (16. August 2008)

Ja, aber wenn ich die mit php schließe, ändert sich gar nichts.

mysql_select_db("mangos");
$content.="</tr></table>";
?>

Oder ist das so falsch? Ich kenne mich mit PHP soweit aus, dass ich per $Content Inhalte ausgeben kann. 

Was mich aber wirklich wundert, ist das am Ende der body geschlossen wird und es gibt nirgends einen body anfang. (oder ist der per php befehl?)


Wie gesagt, funktioniert der Rahmen mit dem code, wenn ich die datei einzelnd aufrufe,
aber vielleicht macht das Portal Probleme, da man z.B. auch nicht echo nutzen kann (das was man mit echo ausgeben wollte landet nämlich über dem header des portals...)

Ich habe auch mal im Supportforum des Portals ein Thema erstellt. Vielleicht liegt es an einem Konflikt.

So oder so schonmal Danke


----------



## jetztaber (16. August 2008)

Hoppala, da habe ich was übersehen. Der PHP-Code ist korrekt, was das Table angeht. Wo kommt denn der schließende tr und table Tag her (vierte Zeile von unten.

Der body-Tag müsste oben als zweite Zeile, nach html geöffnet werden.


----------



## Mosed (17. August 2008)

wie meinst du das? der /table schließt doch einfach die table, die weiter oben im php geöffnet wurde, oder? und ein paar zeilen über dem /tr wird ein tr geöffnet (im php)

Also der original code sieht so aus:

EDIT: Ah, da ist ja der body tag, da habe ich wohl beim radieren nicht ausgepasst.


```
<html>
<head>
<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
<style type="text/css">
/* <![CDATA[ */
#gew { color: #838383 }
#normal { color: white }
#selten { color: #1fff06 }
#rare { color: #0070dd }
#epic { color: #9f3fff }
#legend { color: #ff8406 }
#artefact { color: #db0000 }
a {color: inherit}
/* ]]> */
</style>
</head>
<body bgcolor="black" text="white">
<center>
<h1>Unsere Gildenbank</h1>
<?php
function farbe($wert) {
switch($wert){
        case "0":
        $q2=gew;
        break;
        case "1":
        $q2=normal;
        break;
        case "2":
        $q2=selten;
        break;
        case "3":
        $q2=rare;
        break;
        case "4":
        $q2=epic;
        break;
        case "5":
        $q2=legend;
        break;
        case "6":
        $q2=artefact;
        break;
        }
    return $q2;
    }
mysql_connect("localhost","name","pass");
mysql_select_db("char");
$a=mysql_query("SELECT * FROM guild_bank_tab WHERE guildid='1'");
$anzahl=mysql_num_rows($a);
$i=0;
echo "<form action=\"bankfach.php\" method=\"POST\">";
echo"<select name=\"bankfach\">";
while ($row=mysql_fetch_assoc($a)){
echo "<option value=\"$row[TabName]\">$row[TabName]</option>";
}
echo"</select><input type=\"submit\" value=\"OK\"></form>";
$eingabe=$_POST["bankfach"];
echo "<h3>Bankfach: $eingabe</h3>";
echo "<table><tr><td>";
$i=mysql_query("SELECT * FROM guild_bank_tab WHERE TabName='$eingabe'");
$it=mysql_fetch_array($i);
$id=$it[TabId];
$w=0;
$s=0;
$items=mysql_query("SELECT * FROM guild_bank_item WHERE TabId='$id' AND guildid='1'");
while ($row2=mysql_fetch_assoc($items)) {
mysql_select_db("mangos");
$f=mysql_query("SELECT * FROM item_template WHERE entry='$row2[item_entry]'");
$farbe=mysql_fetch_array($f);
$item=mysql_query("SELECT * FROM locales_item WHERE entry='$row2[item_entry]'");
$ite=mysql_fetch_array($item);
$far=farbe($farbe[Quality]);
mysql_select_db("luy");
$img=mysql_query("SELECT * FROM tblwowitems WHERE itemnumber='$row2[item_entry]'");
$image=mysql_fetch_array($img);
echo "<div id=\"$far\"><a href=\"http://speedydragon.gamestar.de/item?id="."$row2[item_entry]"."#t=4\" target=\"_blank\"><img src=\".$image[itemicon]\" height=\"32\" weight=\"32\"></a></div>";
$w=$w+1;
if ($w==7){
echo "</td>";
$w=0;
$s=$s+1;
if ($s==14){
echo "</tr><tr><td colspan=\"5\"> <br> </td></tr><tr>";
$s=0;
}
echo "<td>";
}
}
mysql_select_db("mangos");
?>
</tr></table>
</center>
</body>
</html>
```
Folgende Probleme sind da bekannt und deshalb habe ich editiert:
- head und body tags haben keine auswirkung (die interne seite wird ja im Portal angezeigt, head ist also vom Portal vorhanden und vermutlich landet die ganze Seite im body)
- echo erzeugt ausgaben über dem Header, also habe es ich auf $content.= abgeändert.


Müsste es nicht möglich sein, die Tooltip Position festzulegen?
aber wenn ich in der Zeile mit div

 style="position:absolute;left:80px;top:20px;"

hinzufüge ergibt es eine Fehlermeldung.


----------



## jetztaber (18. August 2008)

Ich müsste mal den entsprechenden Code komplett haben, um genau nachzusehen, was angesagt ist. Also nicht Deinen von hier oben, sondern die beiden 'ursprünglichen'. Wenn Du magst, schick mir ne PM.


----------



## Mosed (18. August 2008)

Also der Originalcode des Skriptes ist:


```
<html>
<head>
<script src="http://www.speedydragon.de/js/sdtooltips.js"></script>
<style type="text/css">
/* <![CDATA[ */
#gew { color: #838383 }
#normal { color: white }
#selten { color: #1fff06 }
#rare { color: #0070dd }
#epic { color: #9f3fff }
#legend { color: #ff8406 }
#artefact { color: #db0000 }
a {color: inherit}
/* ]]> */
</style>
</head>
<body bgcolor="black" text="white">
<center>
<h1>Unsere Gildenbank</h1>
<?php
function farbe($wert) {
switch($wert){
        case "0":
        $q2=gew;
        break;
        case "1":
        $q2=normal;
        break;
        case "2":
        $q2=selten;
        break;
        case "3":
        $q2=rare;
        break;
        case "4":
        $q2=epic;
        break;
        case "5":
        $q2=legend;
        break;
        case "6":
        $q2=artefact;
        break;
        }
    return $q2;
    }
mysql_connect("localhost","name","pass");
mysql_select_db("char");
$a=mysql_query("SELECT * FROM guild_bank_tab WHERE guildid='1'");
$anzahl=mysql_num_rows($a);
$i=0;
echo "<form action=\"bankfach.php\" method=\"POST\">";
echo"<select name=\"bankfach\">";
while ($row=mysql_fetch_assoc($a)){
echo "<option value=\"$row[TabName]\">$row[TabName]</option>";
}
echo"</select><input type=\"submit\" value=\"OK\"></form>";
$eingabe=$_POST["bankfach"];
echo "<h3>Bankfach: $eingabe</h3>";
echo "<table><tr><td>";
$i=mysql_query("SELECT * FROM guild_bank_tab WHERE TabName='$eingabe'");
$it=mysql_fetch_array($i);
$id=$it[TabId];
$w=0;
$s=0;
$items=mysql_query("SELECT * FROM guild_bank_item WHERE TabId='$id' AND guildid='1'");
while ($row2=mysql_fetch_assoc($items)) {
mysql_select_db("mangos");
$f=mysql_query("SELECT * FROM item_template WHERE entry='$row2[item_entry]'");
$farbe=mysql_fetch_array($f);
$item=mysql_query("SELECT * FROM locales_item WHERE entry='$row2[item_entry]'");
$ite=mysql_fetch_array($item);
$far=farbe($farbe[Quality]);
mysql_select_db("luy");
$img=mysql_query("SELECT * FROM tblwowitems WHERE itemnumber='$row2[item_entry]'");
$image=mysql_fetch_array($img);
echo "<div id=\"$far\"><a href=\"http://speedydragon.gamestar.de/item?id="."$row2[item_entry]"."#t=4\" target=\"_blank\"><img src=\".$image[itemicon]\" height=\"32\" weight=\"32\"></a></div>";
$w=$w+1;
if ($w==7){
echo "</td>";
$w=0;
$s=$s+1;
if ($s==14){
echo "</tr><tr><td colspan=\"5\"> <br> </td></tr><tr>";
$s=0;
}
echo "<td>";
}
}
mysql_select_db("mangos");
?>
</tr></table>
</center>
</body>
</html>
```
Ich habe die starke Vermutung, dass das Portal Schuld ist. Denn sonst funktioniert das Skript ja.

Welchen zweiten Code meinst du noch? Den vom Portal? Das ist ein bißchen mehr... Könnte ich als txt bereitstellen.

Was mir noch aufgefallen ist: Diese Farbzuweisung der einzelnen Felder funktioniert nur im Firefox (und vielleicht Opera?), aber im Internet Explorer 7 ist alles blau hinterlegt. Das ist immer so, auch wenn man den Code als einzelne PHP Seite aufruft.

Momentan habe ich als Lösung:
Das Skript wird in einem iframe angezeigt, der so breit ist, dass das Portal insgesamt breiter wird, man die Tooltips aber recht gut lesen kann. Zudem gibt es die Möglichkeit per Link das Skript in einem neuen Fenster/Tab oder PopUp zu öffnen.


----------

