Simon: Bei jeder 2. Ausgabe anderer Hintergrund

Hi,
da ich mir Daten aus einer DB in einer Tabelle anzeige, wollt ich jede 2. Spalte in einer anderen Farbe haben um die Daten besser lesen zu können.
Hab mir dann das ganze überlegt und so gemacht. Es funktioniert ansich super nur wollt ich wissen ob es etwas besseres gibt oder ob man das so lassen kann.

Hier mal meine Schleife:

$i=0;  
while ($row_out = mysql_fetch_array($out))  
{  
  #Hier hol ich einige Daten aus der DB  
  $i++;  
	$zahl1 = $i/2;  
	$zahl2 =round($zahl1);  
	if($zahl1 == $zahl2)  
	{  
	 echo "<tr class=\"rot\">\r";    #class für den Hintergrund  
  }  
  else  
  {  
    echo "<tr class=\"grün\">\r";   #class für den Hintergrund  
  }  
  
  echo "<td>\r";  
  echo "<td>$daten</td>";  
  echo "</tr>\r";  
}

MfG
Simon

  1. Hi!

    Generell, macht man das so.

    Zwei Dinge habe ich aber noch:

    Modulo ist die bessere Wahl. if ($i%2 == 0)

    Deine Klassen sind suboptimal benannt, falls nicht eh eine reicht. Besser sind allgmeingueltige Namen, die beschreiben, was hier formatiert wird und nicht wie. Wenn Deine Zeilen mal nicht gruen/rot sein sollen, sondern weiss/blau wirst Du dich freuen, dass du sie 'odd', 'even', 'gerade', 'ungerade' oder aehnlich genannt hast...

    --
    "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
          - T. Pratchett
    1. Hi!

      Generell, macht man das so.

      ok

      Zwei Dinge habe ich aber noch:

      Modulo ist die bessere Wahl. if ($i%2 == 0)

      Deine Klassen sind suboptimal benannt, falls nicht eh eine reicht. Besser sind allgmeingueltige Namen, die beschreiben, was hier formatiert wird und nicht wie. Wenn Deine Zeilen mal nicht gruen/rot sein sollen, sondern weiss/blau wirst Du dich freuen, dass du sie 'odd', 'even', 'gerade', 'ungerade' oder aehnlich genannt hast...

      Ja ich weiß, die Klassen waren jetzt eig nur ein Beispiel.

      MfG
      Simon

      1. Ja ich weiß, die Klassen waren jetzt eig nur ein Beispiel.

        Gewöhne dir an auch für Beispiele oder Tests ordentliche Namen zu wählen - ich hab' schon viele Live-Webseiten gesehen wo irgendwas mit "test" oder "versuch" oder ".bak" im Quelltext steht - man traut es sich aber nicht zu löschen :p

  2. Hi,

    if($zahl1 == $zahl2)
    {
    echo "<tr class="rot">\r";    #class für den Hintergrund
      }
      else
      {
        echo "<tr class="grün">\r";   #class für den Hintergrund
      }

    Hier gibst du zwei mal fast das gleiche aus, nur der Klassenname ist jeweils anders.
    Das mag bei diesem Minimalbeispiel nicht besonders arg erscheinen - aber in einem anderen Szenario mag es mal mehr sein, als nur eine Tabellenzeile, die ausgegeben werden soll. Ausserdem, auch bei diesem Szenario, sind jeweils Anpassungen an *zwei* Stellen erforderlich, wenn bspw. allgemein die Zeilen um ein weiteres Attribut ergänzt werden sollen - also Gefahr, bei der Änderung die zweite Stelle zu übersehen.
    Deshalb würde ich in so einem Fall den jeweils zu verwendenden Klassennamen einer Variablen zuweisen, und dann nur *eine* Ausgabe machen, während der diese Variable an der richtigen Stelle eingefügt wird.

    Ob man jetzt zwei Klassen dafür nutzt, oder wie Steel vorschlug nur eine, ist eher nebensächlich - was ich aber an dem ganzen Konstrukt noch unschön finde: Die If-Abfrage macht einen grossen Teil des Codes aus - dabei geht der *eigentliche* Zweck dieser Code-Stelle, nämlich die Ausgabe von Werten in Tabellenzeilen, beinahe unter.

    Das kann man "schöner" gestalten, in dem man für den Ping-Pong-Wechsel eines Variableninhaltes den ternären bzw. Trinitäts-Operator nutzt:

    $klasse = ($klasse == "gerade") ? "ungerade" : "gerade";
    Wenn $klasse aktuell den Inhalt "gerade" hat, dann wird ihr der Wert "ungerade" zugewiesen - und sonst (wieder) "gerade".
    Natürlich nicht vergessen, die Variable vor der Schleife zu initialisieren - mit dem Wert "gerade", damit dann anschliessend die erste Zeile, die ausgegeben wird, "ungerade" verpasst bekommt.

    $klasse = 'gerade';  
    while ( /* Datenbeschaffung */ ) {  
        $klasse = ($klasse == 'gerade') ? 'ungerade' : 'gerade';  
        echo '<tr class="'.$klasse.'">...</tr>';  
    }
    

    Das ist doch schön kurz, oder?
    Dass hier die Ausgabe von Tabellenzeilen das wesentliche ist, was in dieser Schleife geschehen soll, sieht man so gut wie auf den ersten Blick.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      Das ist doch schön kurz, oder?
      Dass hier die Ausgabe von Tabellenzeilen das wesentliche ist, was in dieser Schleife geschehen soll, sieht man so gut wie auf den ersten Blick.

      Ja perfekt, danke. Hab diesen Trinitäts-Operator gar nicht gekannt. Beschäftige mich ja schließlich nur seit Kurzem mit PHP.

      MfG
      Simon