PHP/MYSQL Tabellen Zeilen farblich markieren

DonDemf

Erfahrenes Mitglied
Hallo Leute,
ich schreibe gerade ein Script, welches eine Ligatabelle gerniert und dann nach punkten und tordifferenz geordnet ausgibt. Hier mal der Code:
PHP:
<?php
$abfrage_liga = "SELECT * FROM mannschaften ORDER BY punkte, differenz WHERE liga = '1. Bundesliga'";
$ergebnis_liga = mysql_query($abfrage_liga);
while($row = mysql_fetch_object($ergebnis_liga))
   {
   echo ''.row->name.'' / '.$row->spiele.' / '.$row->siege.' / '.$row->unentschieden.' / '.$row->niederlage.' / '.$row->tore.' / '.$row->gegentore.' / '.$row->differenz.' / '.$row->punkte.'';

   }
?>

Jetzt listet mir meine Datei alles so auf wie ich es will:
1. Bayern/x/x/x/x/x
2. Dortmund/x/x/x/x
usw. usw.

Nun möchte ich aber, dass die zeilen 1-3 im hintergrund grün sind und die zeilen 4-6 dunkelgrün. die folgenden zeilen sollen so bleiben wie sie sind und die zeilen 17-18 dunkelrot und die zeile 16 hellrot.

Wie realisiere ich das? kann mir da wer helfen?
Vielenk dank schonmal!
 
1. Wo wird da eine Tabelle (HTML) gebaut?
2. Warum bekommst du keine Syntax-Fehler bei dem geposteten Code?
3. Kannst du bitte mehr Code posten, so dass man gezielt helfen kann?
 
1. Wo wird da eine Tabelle (HTML) gebaut?
2. Warum bekommst du keine Syntax-Fehler bei dem geposteten Code?
3. Kannst du bitte mehr Code posten, so dass man gezielt helfen kann?



1. Die Tabelle habe ich rausgenommen, ich wollte nr darstellen, wie der aufbau ist.
2. Der coe scheint richtig zu sein, ist aber auch nicht der original code. Den gibbet naemlich noch nicht, weil ich erst fragen wollte, wie es mit der farblichen unterlegung aussieht
3. kann ich gerne später machen, wenn ich ansatzweise weiß, wie es gehen soll mit der farbe ^^
 
Hallo,

dann gib der ersten bis dritten Tabellenzeile (TR-Element) irgendein Klassenattribut (z.B. class="rank1") und den Zeilen 4-6 dann z.B. class="rank2" usw. Die Hintergrundfarbe kannst du dann per CSS zuweisen.
 
Gut dann theoretisch: Entweder so, wie hela schon vorgeschlagen hat, also eine Schleife, die alle Tabellen zeilen darstellt, in jedem durchlauf prüfst du, ob 1-3, 4-6, dann machst du es über CSS-Klasse oder direkt über bgcolor-Attribut:

PHP:
$currentRow=1;
while($row = mysql_fetch_object($ergebnis_liga))
   {
   echo '<tr class="' . ($row <= 3 ? 'green' : ($row <= 6 ? 'darkgreen' : '')) . '">'; // Lege die CSS-Klasse fest
   echo ''.row->name.'' / '.$row->spiele.' / '.$row->siege.' / '.$row->unentschieden.' / '.$row->niederlage.' / '.$row->tore.' / '.$row->gegentore.' / '.$row->differenz.' / '.$row->punkte.';

   }

Spezifischer kann man da nicht werden.
 
vielen Dank schonmal für eure Hilfe, ich werde mich morgen vrmittag noch mal mit einem genauen Code bei euch melden, dann wird es sicherlich einfacher ;-)
 
Achja, ich hatte den Code absichtlich kaputt notiert, damit du selbst Gelegenheit hast, es zu implementieren. Hier eine etwas bessere Fassung, vielleicht hilfts dir weiter:

PHP:
$currentRow=1; // Wir fangen bei 1 an
while($row = mysql_fetch_object($ergebnis_liga))
   {
   // Abhängig des derzeitigen Durchlaufs die CSS-Klasse festlegen
   echo '<tr class="' . ($currentRow <= 3 ? 'green' : ($currentRow<= 6 ? 'darkgreen' : '')) . '">'; // Lege die CSS-Klasse fest
   echo ''.row->name.'' / '.$row->spiele.' / '.$row->siege.' / '.$row->unentschieden.' / '.$row->niederlage.' / '.$row->tore.' / '.$row->gegentore.' / '.$row->differenz.' / '.$row->punkte.';
   // Durchlauf hochzählen
   $currentRow++;
   }
 
Ich würde ein Array erstellen der die Farbwerte beinhaltet. Dann für jede Zeile den Farbwert auslesen.

Hier ien vereinfachtes Beispiel. Natürlich ist es besser wie oben von hela schon erwähnt ein style zu defineren anstelle die Farbe direkt einzutragen.
PHP:
//Testdaten
$teams = range(1,18);

//Formatierungen für die Zeilen definieren
$colors = array_fill(1, 3,'green') 
        + array_fill(4, 3, 'darkgreen')
        + array_fill(7, 9, '')
        + array_fill(16, 1, 'red')
        + array_fill(17, 2, 'darkred');

//Die Position definieren        
$pos=0;
//Anstelle des foreach dein while auf das DB-Resultat        
echo '<table>';
foreach($teams as $teamNr){
    //Die position eins hochzählen und die Farbe auslesen: {$colors[++$pos]
    echo "<tr><td bgcolor=\"{$colors[++$pos]}\">Team {$teamNr}</td></tr>";
}
echo '</table>';
 
Habe ich jetzt für yaslaws methode entschieden, kriege es ejdoch nicht so ganz hin..


PHP:
<?php

$colors = array_fill(1, 3,'green') 
        + array_fill(4, 3, 'darkgreen')
        + array_fill(7, 9, '')
        + array_fill(16, 1, 'red')
        + array_fill(17, 2, 'darkred');

//Die Position definieren        
$pos=0;
while($row_bl = mysql_fetch_object($ergebnis_bl))
   {
   echo '<tr>
    <td bgcolor="{'.$colors[++$pos].'}" width="32" align="center">&nbsp;</td>
    <td bgcolor="{'.$colors[++$pos].'}" width="40" align="center">&nbsp;</td>
    <td bgcolor="{'.$colors[++$pos].'}" width="115" align="center"><strong>'.$row_bl->name.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="95" align="center"><strong>'.$row_bl->besitzer.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="37" align="center"><strong>'.$row_bl->spiele.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="37" align="center"><strong>'.$row_bl->siege.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="37" align="center"><strong>'.$row_bl->unentschieden.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="37" align="center"><strong>'.$row_bl->niederlagen.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="74" align="center"><strong>'.$row_bl->tore.':'.$row_bl->gegentore.'</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="37" align="center"><strong>TD</strong></td>
    <td bgcolor="{'.$colors[++$pos].'}" width="49" align="center"><strong>'.$row_bl->punkte.'</strong></td>
  </tr>';
   }
   echo '</table></td>
  </tr>
</table>';
?>

Die mysql verbindung etc. ist alles da, es kommt foglende fehlermeldung:

Notice: Undefined offset: 19 in C:\xampp\htdocs\fifa\tabelle_bl.php on line 69

Und das für jede zeile in der tabelle ungefähr 3 mal xD


was mache ich falsch?
 
Zurück