Aus Datenbank Werte farblich hervorheben

shockwaveXBG

Grünschnabel
Guten Morgen,

ich stehe vor folgendem Problem: Aus einer Datenbank (Mysql) werden die Werte ueber eine Abfrage mittels PHP in HTML ausgegeben. Soweit kein Problem, aber da diese Werte Aktien-/Kurswerte beinhalten würde ich gerne positive Veränderungen grün hervorheben und negative entsprechend rot. Wie kann ich es denn in PHP anstellen, daß ich die Tabellenzelle abfrage, ob der Inhalt, der aus der Datenbank ausgelesen wird, positiv oder negativ ist und entsprechend farblich formatieren? Ich muss dazu sagen, daß ich mit PHP noch nicht so erfahren bin und bisher eigentlich nur die üblichen Abfragen in Mysql beherrsche. Um sicherzustellen, daß das Eingabefeld eindeutig als positiv bzw. negativ ausgewiesen wird, habe ich ein eigenes Feld in der Datenbank angelegt, das aus einer einfachen select anweisung via HTML (das eingabeformular fuer die Werte ist HTML basiert) und dieser dann bei der Abfrage mit dem jeweiligen Wert in eine Zelle geschrieben wird - klingt vielleicht umständlich, aber ich hatte mit der Eingabe von positiven bzw. negativen Werte Probleme beim Ein-/Auslesen. Bei der Abfrage hier handelt es sich um die Array Felder 3 (Vorzeichen) und 4 (Wert).

Vielen Dank im Voraus für jegliche Hilfe/Anregung


meine Abfrage sieht fuer die Tabelle wie folgt aus:

PHP:
  <?php
  
  // hintergrundfarbe fuer die abfragedarstellung der tabelle
  $color1="#D0D7E8";
  $color2="#EBEEF5";
  $row_count=0;
  
  //abfrage...
  while ($rs = mysql_fetch_array($sql_results))
  
  {
  //hintergrundfarbe für die zelle bestimmen...
  $row_color = ($row_count % 2) ? $color1 : $color2; 
  
  	echo "<TR>";
 	echo "<TD bgcolor=". $row_color ." nowrap class=textable>" . $rs[0] ."</a></TD>";//bestand 	
  	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[1] ."</TD>"; //kasse
  	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[2] ."</TD>"; //gesamt
 	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[4] . (str_replace(".",",",$rs[3])).'%'."</TD>"; //veränderung der werte - hier sollte positive veränderung gruen und negative rot hervorgehoben werden...
  	echo "</TR>";
  		
  	$row_count++; 
  
  }
  
  ?>
 
Wenn ich dich richtig verstanden habe:

Code:
if( $rs[4] < 0 ) {
  $row_color = "red";  
} 
else { 
 $row_color = "green";  
}

Der Fall, das es keine Veränderung (0) gibt, wird jedoch nicht berücksichtigt.

Wenn das noch nicht klappt poste doch mal das Tabellenlayout. Damit man sieht wie die einzelnen Spalten heißen.
 
Hallo Marius,

vielen Dank für deine Hilfe. Es verhält sich folgendermassen - ich habe ja den Array [3] und [4] aus denen sich die Tabellenzelle dann zusammensetzt. Die Hintergrundfarbe der Zelle sollte so bleiben wie sie ist, lediglich die Textfarbe des Wertes sollte rot oder grün sein. anbei der Code für die Tabelle:

PHP:
  <?php
  
  
  $db = mysql_connect("localhost", "","");
  mysql_select_db("million",$db); 
  
  $sql="SELECT bestand_dep,kasse_dep,gesamt_dep,veraenderung2_dep,zeichen2 FROM depot ORDER BY id DESC LIMIT 1";
  
  $sql_results = mysql_query($sql,$db);
  ?>
  
  
  <table border="0" width="250" cellpadding="0" cellspacing="1">
  <tr>
  <td bgcolor="#4D556A">
  
  
  <TABLE BORDER="0" cellspacing="1" cellpadding="2" width="100%">
  <tr>
  <td colspan="4" bgcolor="626A80" class="textable spacer"><b>GESAMTBESTÄNDE</b></td></tr>
  <TR>
  <TD bgcolor="#B5C0DA" class=textable><b>Bestand</b></TD>
  <TD bgcolor="#B5C0DA" class=textable><B>Kasse</b></TD>
  <TD bgcolor="#B5C0DA" class=textable><b>Gesamt</b></TD>
  <TD bgcolor="#B5C0DA" class=textable><B>Veränderung</b></TD>
  </TR>
  
  <?php
  $color1="#D0D7E8";
  $color2="#EBEEF5";
  $row_count=0;
  
  while ($rs = mysql_fetch_array($sql_results))
  
  {
  
  $row_color = ($row_count % 2) ? $color1 : $color2; 
  
  	echo "<TR>";
 	echo "<TD bgcolor=". $row_color ." nowrap class=textable>" . $rs[0] ."</a></TD>";//bestand 	
  	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[1] ."</TD>"; //kasse
  	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[2] ."</TD>"; //gesamt
 	echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[4] . (str_replace(".",",",$rs[3])).'%'."</TD>"; //veränderung
  	echo "</TR>";
  		
  	$row_count++; 
  
  }
  
  ?>
 
na dann.
Ich glaube jetzt habe ich dich verstanden:
veraenderung2_dep ist eine Zahl $rs[3]
zeichen2 rs[4] ist nur ein Vorzeichen, je nachdem ob positiv negativ oder nichts ist
Das ist meiner Meinung nach unpraktisch. Da in beiden Spalten mehr oder wenig dasselbe steht. Ich würde das jeweils durch das Script ermitteln lassen. Bei einem Update musst du sons nämlich 2 Spalten updaten.

PHP:
switch($rs[3]) {

  case $rs[3] < 0:
  $status = "red";
  $char = "-":
  break;
  
  case $rs[3] == 0:
  $status = "black";
  $char = "":
  break;
  
  case $rs[3] > 0:
  $status = "green";
  $char = "+":
  break;
}

  while ($rs = mysql_fetch_array($sql_results))
  
  {
  
  $row_color = ($row_count % 2) ? $color1 : $color2; 
  
      echo "<TR>";
    echo "<TD bgcolor=". $row_color ." nowrap class=textable>" . $rs[0] ."</a></TD>";//bestand     
      echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[1] ."</TD>"; //kasse
      echo "<TD bgcolor=". $row_color ." nowrap class=textable>". $rs[2] ."</TD>"; //gesamt
    echo "<TD bgcolor=". $row_color ." nowrap class=textable><span style=\"color:".$status."\">".$char $rs[3] ."</span></TD>"; //veränderung
      echo "</TR>";
          
      $row_count++; 
  
  }
 
Vielen Dank für deine Hilfe - ja es ist etwas unpraktisch wegen dem Vorzeichen, aber ich muss sicherstellen, daß die Eingabe mit einem Vorzeichen versehen wird und mit MYSQL und positiven/negativen Werten hatte das bisher nicht so recht geklappt, daher der Umweg ueber zwei Felder. Es klappt auf jeden Fall und das Prinzip ist mir jetzt auch klar!

Danke!
 
Zurück