# [PHP] per Abfrage die Schriftfarbe verändern?



## uwee (4. November 2004)

Hallo!

vorweg: ich weiss, dass php zum Programmieren und html zum darstellen geeigenet ist, aber was ich haben möchte, kann nicht mit html realisiert werden.

Folgendes: Ich habe eine MySQL-Db in der Altersfreigaben stehen. (FSK) Die Freigaben sind folgendermaßen gestaffelt:
0, 6, 12, 14, 16, 18

Nun möchte ich, wenn ich per SELECT die Daten auf einer PHP-Seite ausgebe, dass je nach FSK die Farbe für die Zahl geändert wird:
0 = SCHWARZ
6 = HELLGRÜN
12 = DUNKELGRÜN
14 = GELB
16 = ORANGE
18 = ROT

Dummerweise hab ich keinen blassen Schimmer ob das geht und wenn ja, wie das geht.
Ich könnte mir vorstellen, dass es mit einer if-Anweisung gemacht werden könnte. Aber wie, das weiss ich nciht.

Das Feld heisst übrigends "fsk", da soll die FONT COLOR in die Zahlenabhändigen Farben geändert werden.

DANKE

UweE


----------



## uwee (4. November 2004)

ich weiss nicht, ob das geht, aber so könnte ich mir das vorstellen...


```
...
if (fsk<6){font color='black'}
else{
if (fsk>=6 and <12){font color='grey'}
else{
if (fsk>=12 and <14){font color='green'}
else{
if (fsk>=14 and <16){font color='yellow'}
else{
if (fsk>=16 and <18){font color='orange'}
else{
if (fsk>=18){font color='red'}
}}}}};
...
```

ich weiss, dass man das so nicht schreiben kann, aber vl. stimmt die Richtung?!


----------



## redlama (4. November 2004)

Das Ergebnis nach dem select anzeigen zu lassen schafftst Du, oder?
Dann könntest Du Dir vorher ein Array anlegen:

```
$farben = array("0" => "black", "6" => "lightgreen", "12" => "green", "14" => "yellow", "16" => "orange", "18" => "red");
```
So und da, wo Du Deine Ausgabe der Daten machst, da machst Du dann
	
	
	



```
echo <font color='".$farben[Varibalenname der Ausgabe]."'>Ausgabe der Zahl</font>
```

redlama

P.S. Ist nicht getestet!


----------



## fh_study (4. November 2004)

also ich würd da nen 19 elementigen array nehmen:

$farbe = array("#111111","","","","","","#xxxxxx",....);

also so dass du quasi im array $farbe[0] schwarz zu stehen hast (bzw #111111) im array $farbe[6] grau usw.

Diesen array erzeugst du einmalig am Anfang deines Dokumentes. 

In einer while oder for Schleife rufst du dann ja sicher die daten ab und übergibst den Inhalt von fsk in $fsk. Dann schreibst du in den html Teil einfach bei <font ... color=\"$farbe[$fsk]\">


----------



## fh_study (4. November 2004)

war ich wohl zu langsam beim schreiben


----------



## Gumbo (4. November 2004)

Du könntest das Ganze auch innerhalb der Abfrage regeln:
	
	
	



```
SELECT
        CASE 18
          WHEN  0 THEN 'black'
          WHEN  6 THEN 'lightgreen'
          WHEN 12 THEN 'darkgreen'
          WHEN 14 THEN 'yellow'
          WHEN 16 THEN 'orange'
          WHEN 18 THEN 'red'
        END AS `fsk_darstellungsfarbe`
```


----------



## uwee (4. November 2004)

redlama hat gesagt.:
			
		

> Das Ergebnis nach dem select anzeigen zu lassen schafftst Du, oder?
> Dann könntest Du Dir vorher ein Array anlegen:
> 
> ```
> ...




funktioniert auch leider nicht so ganz 
es kommt zwar kein Fehler, aber die Farbe bleibt SCHWARZ


@Gumbo:
WO müsste ich das denn dann einfügen? in der Ausgabe oder in der Abfrage? hab die Ausgabe in einer Tagelle, der Part für FSK sieht so aus:

```
<td>",$row->fsk,"</td>
```
oder in der SELECT Abfrage:

```
$sql="SELECT id,name.....,fsk FROM table ".
"WHERE $suchen LIKE '%" . ($wort) ."%' " .
"ORDER BY $sort";
```


----------



## redlama (4. November 2004)

Was passiert denn, wenn Du Dir statt dessen nur den Inhalt des Arrays ausgeben lässt?
Gibt er Dir dann die richtigen Farben an?

redlama


----------



## Gumbo (4. November 2004)

Innerhalb der Abfrage:
	
	
	



```
<?php
	[…]
	$query = "
		SELECT
		        `id`,
		        `name`,
		        `fsk`,
		        CASE `fsk`
		          WHEN  0 THEN 'black'
		          WHEN  6 THEN 'lightgreen'
		          WHEN 12 THEN 'darkgreen'
		          WHEN 14 THEN 'yellow'
		          WHEN 16 THEN 'orange'
		          WHEN 18 THEN 'red'
		        END AS `fsk_darstellungsfarbe`

		  FROM
		        `tabelle`

		  WHERE
		        `".$suchen."` LIKE '%".$wort."%'

		  ORDER BY
		        ".$sort."
	"; 
	$result = mysql_query($query);
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		[…]
		echo '<td><span style="color:'.$row['fsk_darstellungsfarbe'].">'.$row['fsk'].'</span></td>';
		[…]
	}
	[…]
?>
```


----------



## uwee (4. November 2004)

als antwort kommt leider:

Keine Ergebnisse vorhanden (Text ist für den Fall, dass wirklich keine Ergebnisse da sind)


----------



## uwee (4. November 2004)

btw:

ich hab bei mir stehen:


```
WHILE ($row=mysql_fetch_object($result))...
```
kann mir jend den unterschied zu diesem erklären?:

```
WHILE ($row=mysql_fetch_array($result,MYSQL_ASSOC))...
```


----------



## Gumbo (4. November 2004)

mysql_fetch_object() und mysql_fetch_array() liefert jeweils einen Datensatz einer Ergebniskennung zurück, wobei die Rückgabetyp entweder ein Feld bzw. ein Objekt ist.

Übrigens sind die von dir beschriebenen Beispiele falsch, da entweder weder mysql_fetch_object() noch mysql_fetch_array() Variablen sind, worauf die Dollarzeichen  hinweisen würden.

Versuch einfach mal mein Beispiel.


----------



## uwee (5. November 2004)

ähm, ja warn tippfehler, hab ich schon behoben *peinlich ist*

mit deiner variante kommen keine Ergebnisse raus, frag nicht warum, ich habe nur den Text eingesetzt, nehme ich ihn heraus, gibt es Erbenisse!

wobei das ja Quatsch wäre, es geht doch hier NUR um eine Farbe, und nicht um Inhalte!


----------



## Gumbo (5. November 2004)

Gibt es denn eine Fehlermeldung? Hast du die Spalten bzw. Ausdrücke im SELECT-Ausdruck korrekt aneinander gereiht?


----------



## uwee (5. November 2004)

es gibt keine fehlermeldung.
durch echo habe ich herausgefunden, dass auch alles richtig abläuft, aber es kommen keine ergebnisse zustande. lösche ich den veränderten text, sind alle ergebnisse vollzählig wieder da!
es ist, als würde ihn das kein bisschen interessieren, was da steht.


----------



## uwee (8. November 2004)

also fällt keinem eine Lösung ein? Schade... dann muss ich das irgendwie anders hinbekommen.


----------



## Gumbo (8. November 2004)

zeig uns doch bitte einmal dein Abfragekonstrukt, vielleicht hat sich dort irgendwo ein Fehler eingeschlichen.


----------



## uwee (8. November 2004)

also, hier mein gesamter Quelltext, abgesehen vom Login.
ich habe keine Zeilenumbrüche genutzt (extra, falls dadurch ein Fehler entstehen sollte.)
Ich müsst auch nur einmal scrollen, denn der Ausgabeteil ist unten.


```
<?php
$suchen=($_POST['suchen']);
$erg_wort=($_POST['name']);
$sort=($_POST['ordnen']);
$sql="";
$result="";
if ($erg_wort!=""){
echo"<p>Treffer mit dem Schlagwort <b>",
($erg_wort), "</b></p>\n";
$sql="SELECT id,name,original_name,jahr,version,bild,cat,info,actors,fsk,quelle,kommentar FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort";
}
//echo $sql;
$result=mysql_query($sql);
?>
<html><body><title>
<?php
if(!$result or !mysql_num_rows($result))
echo "Keine Ergebnisse</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Ergebnisse vorhanden</p>";
else {
echo mysql_num_rows($result)," Ergebnisse:</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>Es wurden <b>",mysql_num_rows($result),"</b> Titel mit ähnlichem oder gleichem Suchkriterium gefunden:<br>
<hr/><table border=0 cellpadding=3 bgcolor=#CCCCCC><tr><td><b><u>Bild</u></b></td><td><b><u>Name</u></b> / <i>Original Name</i></td><td><b><u>Jahr</u></b></td><td><b><u>Version</u></b></td><td><b><u>FSK</u></b></td><td><b><u>Kathegorie</u></b></td><td><b><u>Info</u></b></td><tr>\n";
while ($row=mysql_fetch_object($result)){
echo "<td><a href=bilder/",$row->bild,".jpg><img src=bilder/",$row->bild,".jpg width=110 heigth=158 border=0></a></td><td><b><font color=red size=4>",$row->name,"</font></b><br><br><i>",$row->original_name,"</i></td><td>",$row->jahr,"</td><td>",$row->version,"</td><td><img src=bilder/",$row->fsk,".jpg border=0></td><td>",$row->cat,"</td><td>",$row->kommentar,"</td></tr>
<tr><td colspan=8>",$row->info,"<br><i>Quelle: <a href=http://www.",$row->quelle,".de target=_blank>",$row->quelle,"</a></i></td></tr>
<tr><td colspan=8><b>Schauspieler:</b> ",$row->actors,"<hr size=5><br></td></tr>\n";
}
echo"</tr></table><br><br><a href=suche.php>zurück<a>";
}
?>
```

Momentan habe ich ein Bild an dieser Stelle eingefügt:

```
<td><img src=bilder/",$row->fsk,".jpg border=0></td>
```
Statt desses soll dort aber je nach dem, welche Zahl im feld steht, die richtige Farbe eingesetzt werden.

So, der Vorschlag von Gumbo wäre an dieser Stelle einzusetzen.

```
$sql="SELECT id,name,original_name,jahr,version,bild,cat,info,actors,fsk,quelle,kommentar, CASE `fsk` 
                  WHEN  0 THEN 'black' 
                  WHEN  6 THEN 'lightgreen' 
                  WHEN 12 THEN 'darkgreen' 
                  WHEN 14 THEN 'yellow' 
                  WHEN 16 THEN 'orange' 
                  WHEN 18 THEN 'red' 
                END AS `fsk_darstellungsfarbe`
FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort";

[-]

while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { 
        […] 
        echo '<td><span style="color:'.$row['fsk_darstellungsfarbe'].">'.$row['fsk'].'</span></td>'; 
        […]
```
es tut sich nur leider nichts...


----------



## uwee (8. November 2004)

kurz noch was nebenbei.
es kann passieren, dass ich als Erbenis über 500 Ds bekomme und dann würde die Seite arg lang werden.
Ich hab hier im Forum schon gesucht, aber ich hab nichts zum Thema *Seitenumbruch* gefunden (NUR im Tut zum Gästebuch über mehrere Seiten). Also, dass alle 20 Ds eine neue Seite kommt und unten und/oder oben eine Auflistung der Seiten mit links auf die Seiten zu sehen ist.
Ist momentan nebensächlich das andere Problem interessiert mich mehr. Wer dazu ne Lösung hat, bitte PM.


----------



## Gumbo (8. November 2004)

```
<?php
	$suchen = $_POST['suchen'];
	$erg_wort = $_POST['name'];
	$sort = $_POST['ordnen'];

	if( $erg_wort != "" ) {
		echo "<p>Treffer mit dem Schlagwort <b>", $erg_wort, "</b></p>\n";
	$query = "
		SELECT
		        `id`,
		        `name`,
		        `original_name`,
		        `jahr`,
		        `version`,
		        `bild`,
		        `cat`,
		        `info`,
		        `actors`,
		        `fsk`,
		        `quelle`,
		        `kommentar`,
		        CASE `fsk`
		          WHEN  0 THEN 'black'
		          WHEN  6 THEN 'lightgreen'
		          WHEN 12 THEN 'darkgreen'
		          WHEN 14 THEN 'yellow'
		          WHEN 16 THEN 'orange'
		          WHEN 18 THEN 'red'
		        END AS `fsk_darstellungsfarbe`

		  FROM
		        `dvd_uebersicht`

		  WHERE
		        ".$suchen." LIKE '%".$wort."%'

		  ORDER BY
		        ".$sort."
	";
	$result = mysql_query($query);
?>
<html><body><title>
<?php
	if(!$result or !mysql_num_rows($result)) {
		echo "Keine Ergebnisse</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Ergebnisse vorhanden</p>";
	} else {
		echo mysql_num_rows($result)," Ergebnisse:</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>Es wurden <b>",mysql_num_rows($result),"</b> Titel mit ähnlichem oder gleichem Suchkriterium gefunden:<br>
<hr/><table border=0 cellpadding=3 bgcolor=#CCCCCC><tr><td><b><u>Bild</u></b></td><td><b><u>Name</u></b> / <i>Original Name</i></td><td><b><u>Jahr</u></b></td><td><b><u>Version</u></b></td><td><b><u>FSK</u></b></td><td><b><u>Kathegorie</u></b></td><td><b><u>Info</u></b></td><tr>\n";
		while( $row = mysql_fetch_object($result) ) {
			echo "<td><a href=bilder/",$row->bild,".jpg><img src=bilder/",$row->bild,".jpg width=110 heigth=158 border=0></a></td><td><b><font color=red size=4>",$row->name,"</font></b><br><br><i>",$row->original_name,"</i></td><td>",$row->jahr,"</td><td>",$row->version,"</td><td><img src=bilder/",$row->fsk,".jpg border=0></td><td>",$row->cat,"</td><td>",$row->kommentar,"</td></tr>
<tr><td colspan=8>",$row->info,"<br><i>Quelle: <a href=http://www.",$row->quelle,".de target=_blank>",$row->quelle,"</a></i></td></tr>
<tr><td colspan=8><b>Schauspieler:</b> ",$row->actors,"<hr size=5><br></td></tr>\n";
		}
		echo "</tr></table><br><br><a href=suche.php>zurück<a>";
	}
?>
```


----------



## redlama (8. November 2004)

redlama hat gesagt.:
			
		

> ```
> echo <font color='".$farben[Varibalenname der Ausgabe]."'>Ausgabe der Zahl</font>
> ```


Ups, ...
Da ist ja ein Fehler drin. Das muss eigentlich so heißen:
	
	
	



```
echo "<font color='".$farben[Varibalenname der Ausgabe]."'>Ausgabe der Zahl</font>";
```

redlama


----------



## uwee (8. November 2004)

die " " sind richtig!
da es viele Ausgabevariablen sind, stehen die Anführungszeichen NICHT direkt davor!
Also das sollte richtig sein!


----------



## uwee (8. November 2004)

```
CASE `fsk` 
                  WHEN  0 THEN 'black' 
                  WHEN  6 THEN 'lightgreen' 
                  WHEN 12 THEN 'darkgreen' 
                  WHEN 14 THEN 'yellow' 
                  WHEN 16 THEN 'orange' 
                  WHEN 18 THEN 'red' 
END AS `fsk_darstellungsfarbe`
```

DA ist der Fehler habs nach Recherche (hoffentlich richtig geschrieben) in Google gefunden:


> NICHT alle Server lassen derartige Abfragen zu. [...]
> Sie sollten auf Ihre Version von XAMPP achten. [...]
> Nach der letzten Feldangabe darf KEIN Komma gesetzt werden (bez. auf Version 3.2.1.4 a)



Jetzt funktioniert eure Lösung wunderbar. Seltsamerweise ist der nur bei mir in XAMPP der Fall auf meinem online-Server tuts das vorher auch schon!

DANKE!


----------

