hannes: Tabelle mit abwechselnder Zeilenfarbe

hallo,
ich kriege die Lösung einfach nicht hin. Beim vorliegenden Code wird nur die 1. und die 2. Zeile eingefärbt, danach farblos. (rowcol ist mit css definiert).
Wenn ich <td> (statt <tr>) mit class='rowcol_$i % 2' definiere, werden die Kolonnen statt die Zeilen eingefärbt (auch nur 1. und 2. Kolonne).

  
$j=0;  
while($row = mysql_fetch_row($result)){  
	echo "<tr class='rowcol_$j % 2'>";  
		for ($i=1; $i < mysql_num_fields($result); $i++){  
			echo "<td><div id='daten'>$row[$i]</div></td>";  
		}  
	echo "</tr>";  
	$j++;  
}  

Weiss jemand Rat?
Gruss

  1. Hi,

    ich kriege die Lösung einfach nicht hin.

    es geht um die Darstellung, Du hast also zunächst ein clientseitiges Problem. Betrachte folglich die Clientseite. Betrachte *NICHT* die Serverseite.

    Beim vorliegenden Code wird nur die 1. und die 2. Zeile eingefärbt, danach farblos. (rowcol ist mit css definiert).

    Schau Dir den Quellcode der Ausgabe an. Informiere Dich desweiteren über die CSS-Pseudoklasse :nth-child().

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. hallo Cheatah,

      Informiere Dich desweiteren über die CSS-Pseudoklasse :nth-child().

      Diese gute Idee von Dir habe ich einem alten Forumsbeitrag zu diesem Thema gelesen. Funktioniert leider nicht mit IE.

      Was Du mit dem anderen Punkt meinst, verstehe ich nicht.

      Gruss

      1. Moin Moin!

        Was Du mit dem anderen Punkt meinst, verstehe ich nicht.

        Der Browser interessiert sich einen Dreck dafür, was Du PHP zu fressen gibst. Sieh Dir an, was bei PHP hinten rauskommt und dem Browser zum Fraß vorgeworfen wird.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. Hallo Alexander,

          Der Browser interessiert sich einen Dreck dafür, was Du PHP zu fressen gibst. Sieh Dir an, was bei PHP hinten rauskommt und dem Browser zum Fraß vorgeworfen wird.

          also etwas weniger animalisch: Die php-Auswertung des Inhaltes der sql-Tabelle funktioniert einwandfrei (in meinem Beispiel: 5 records (auf 5 html-tabellenzeilen) mit 7 attributen (in 7 html-tabellenzellen).

          Was nicht funktioniert, ist dass class='rowcol_$j % 2' die html-tabellenzeilen nicht wie gewünscht, abwechselnd einfärbt.

          Gruss

          1. Hi,

            Was nicht funktioniert, ist dass class='rowcol_$j % 2' die html-tabellenzeilen nicht wie gewünscht, abwechselnd einfärbt.

            Kann es auch nicht, weil es nicht die Ausgabe erzeugt, die du dir erträumt hast.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. hallo ChrisB,

              Kann es auch nicht, weil es nicht die Ausgabe erzeugt, die du dir erträumt hast.

              Wieso funktioniert es dann bei den ersten beiden html-Tabellenzeilen? Kannst Du mich mit einer sachdienlichen Information aus dem Traum wecken?

              Gruss

              1. Hi,

                Kann es auch nicht, weil es nicht die Ausgabe erzeugt, die du dir erträumt hast.

                Wieso funktioniert es dann bei den ersten beiden html-Tabellenzeilen?

                Weil für diese von deinem Script mehr zufällig die gewünschte Klasse ausgegeben wird.

                Kannst Du mich mit einer sachdienlichen Information aus dem Traum wecken?

                Schau jetzt endlich in den verdammten Quelltext!

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        2. Hi!

          ... was Du PHP zu fressen gibst.
          ...und dem Browser zum Fraß vorgeworfen wird.

          Du wirkst hungrig.

          off:PP

          --
          "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
          1. Moin Moin!

            ... was Du PHP zu fressen gibst.
            ...und dem Browser zum Fraß vorgeworfen wird.

            Du wirkst hungrig.

            Das bin ich immer.

            Mir polterte aber eher ein Zitat von "Birne" im Kopf herum: "Entscheidend ist, was hinten rauskommt." Hier auch gerne auch im Zusammenhang mit dem Verdauungssystem zu interpretieren ... ;-)

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
            1. Hi!

              Mir polterte aber eher ein Zitat von "Birne" im Kopf herum: "Entscheidend ist, was hinten rauskommt."

              Das ist eines meiner Lieblings-Zitate - verwende ich sehr gerne.

              Hier auch gerne auch im Zusammenhang mit dem Verdauungssystem zu interpretieren ... ;-)

              Ich mag Gunnars 'Erweiterung' ;-)

              off:PP

              --
              "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
      2. @@hannes:

        nuqneH

        Informiere Dich desweiteren über die CSS-Pseudoklasse :nth-child().

        Diese gute Idee von Dir habe ich einem alten Forumsbeitrag zu diesem Thema gelesen. Funktioniert leider nicht mit IE.

        Dem IE kann mit CSS-Expression nachgeholfen werden: Zebrastreifen.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Tach.

          Dem IE kann mit CSS-Expression nachgeholfen werden: Zebrastreifen.

          Würde ich ja echt gerne mal anschauen, aber ich erhalte als Antwort von Deinem Server immer nur ein "406 Not Acceptable". Die dort angegebene vorhandene Variante ist nicht zu erreichen. Timeout. Und zwar bei jedem Versuch.

          --
          Always remember that you are unique. Just like everybody else.
  2. Grüße,
    css, nth-
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
  3. Hi,

    echo "<tr class='rowcol_$j % 2'>";

    Diese Zeile erzeugt bestimmt nicht die Ausgabe, die du erwartet hast.
    Deshalb schaust du bitte in Zukunft in den Quelltext, den der Browser erhält, bevor du fragst.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. hallo ChrisB,

      Diese Zeile erzeugt bestimmt nicht die Ausgabe, die du erwartet hast.
      Deshalb schaust du bitte in Zukunft in den Quelltext, den der Browser erhält, bevor du fragst.

      Wenn $j=0; gesetzt ist ergibt die Zeile  <? echo "rowcol_".$j %2; ?> richtig: rowcol_1.  Wenn $j=1; gesetzt ist ergibt sich rowcol_0. Da $j bei jedem Durchlauf erhöht wird, sollte also immer 0 und 1 abwechseln (Modulo 2).

      Gruss

      1. Hi,

        Wenn $j=0; gesetzt ist ergibt die Zeile  <? echo "rowcol_".$j %2; ?> richtig: rowcol_1.

        Nein.

        Wenn $j=1; gesetzt ist ergibt sich rowcol_0.

        Nein.

        Da $j bei jedem Durchlauf erhöht wird, sollte also immer 0 und 1 abwechseln (Modulo 2).

        Tun sie aber nicht, weil du es falsch notiert hast.

        Schau endlich in den verdammten Quelltext, wenn du schon mit Überlegen nicht darauf kommst, was dein Script *wirklich* tut!

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  4. Hallo,

    Beim vorliegenden Code wird nur die 1. und die 2. Zeile eingefärbt, danach farblos.

    für abwechselne Zeilenfarben benutze :nth-child(), dem IE kannst du mit IE7 auf die Sprünge helfen.
    Grundsätzlich solltest du dir aber um solche kleinen Schönheitsfehler bei alten Browsern keine großen Gedanken machen. Da Arbeit reinzustecken lohnt sich nicht, denn deine Besucher kommen nicht wegen der abwechselnden Zeilenfarbe, sondern wegen deiner Inhalte. Außerdem sorgst mit solcher Unterstützung bis ins allerkleine Detail nur für ein längeres Leben ausgerechnet jener Browser, die dir diese Zusatzarbeit aufzwingen.

    Wenn ich <td> (statt <tr>) mit class='rowcol_$i % 2' definiere, werden die Kolonnen statt die Zeilen eingefärbt (auch nur 1. und 2. Kolonne).

    $j=0;
    while($row = mysql_fetch_row($result)){
    echo "<tr class='rowcol_$j % 2'>";
    for ($i=1; $i < mysql_num_fields($result); $i++){
    echo "<td><div id='daten'>$row[$i]</div></td>";
    }
    echo "</tr>";
    $j++;
    }

      
    Schau in den Quelltext, den der Browser bekommt, dort wirst du folgendes sehen:  
      
    <tr class='rowcol\_0 % 2'>  
    <tr class='rowcol\_1 % 2'>  
    <tr class='rowcol\_2 % 2'>  
      
    Ich rate dir dringlichst, die diversen PHP-Schlampereien wie in eine Zeichenkette eingebettete Variablen tunlichst zu umgehen. Hättest du von Anfang an sauber geschrieben, also "bla" . $dings . " und fasel" statt "bla$dings und fasel", wärest du sicher gar nicht erst auf die Idee gekommen, statt nur einer Variablen gleich eine ganze Formel in die Zeichenkette zu setzen. Dies geht nämlich nicht.  
    Kurzum: Benutze "<tr class='rowcol\_" . ($j % 2) . "'>"  
    
    
    1. hallo Gingerbred,

      vielen dank für die Lösung: "<tr class='rowcol_" . ($j % 2) . "'>"

      Also Syntax. Oh wauh.

      Zum IE-Problem: ich ärgere mich genug über IE, als dass ich den noch unterstützen möchte. Aber für die Benutzer (und es gibt scheint's welche, die IE benutzen) ist eine html-Tabelle mit abwechselnder Zeilenfarbe einfach besser lesbar.

      Gruss

      1. Hi,

        Zum IE-Problem: ich ärgere mich genug über IE, als dass ich den noch unterstützen möchte. Aber für die Benutzer (und es gibt scheint's welche, die IE benutzen) ist eine html-Tabelle mit abwechselnder Zeilenfarbe einfach besser lesbar.

        ja, der Verlust beim Fehlen des Farbwechsels ist jedoch i.d.R. verhältnismäßig gering. Du steckst viel Aufwand in wenig Nutzen, und Du unterstützt damit die Entscheidung der Nutzerschaft, bei kontraproduktiver Software zu bleiben.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hi!

        for ($i=1; $i < mysql\_num\_fields($result); $i++){  
        	echo "<td><div id='daten'>$row[$i]</div></td>";  
      

      Hier stecken auch noch ein bis zwei Fehler. ID-Werte müssen dokumentweit eindeutig sein, denn sie sind Identifizierer, keine Klassifizierer. Wenn du hier eine Schleife verwendest, ist anzunehmen, dass das nicht der Fall sein wird. Vielleicht brauchst du die ID hier gar nicht, weil du möglicherweise über geeignete CSS-Selektoren die Daten ansprechen kannst. Auch scheint mir, dass das div hier generell überflüssig ist. Nicht überflüssig sondern fehlend scheint mir hingegen die kontextgerechte Behandlung der aus dem DBMS kommenden Daten.

      Ich rate dir dringlichst, die diversen PHP-Schlampereien wie in eine Zeichenkette eingebettete Variablen tunlichst zu umgehen.

      Aus PHP-Sicht ist das ein Syntax-Element. Aus anderer Sicht ist das im Prinzip auch nichts weiter als die Notation eines Platzhalters. Platzhalternotationen findet man in einer Menge Sprachen wieder, weil das eine nützliche Angelegenheit ist.

      Hättest du von Anfang an sauber geschrieben, also "bla" . $dings . " und fasel" statt "bla$dings und fasel", wärest du sicher gar nicht erst auf die Idee gekommen, statt nur einer Variablen gleich eine ganze Formel in die Zeichenkette zu setzen.

      Die Einschränkung bei PHP und dieser Schreibweise ist, dass man nur einen Variablennamen angeben kann. Will man mehr kann man Strings unterbrechen, was aber dem Lesefluss nicht unbedingt gut tut. Stattdessen kann man eine auch in Bibliotheken anderer Sprachen in ähnlicher Form zu findende Platzhalterfunktion verwenden:

      printf('<tr class="rowcol_%s">', $j % 2);

      Lo!

      1. hallo dedlfix,

        Hier stecken auch noch ein bis zwei Fehler...

        Ja, vielen Dank. Ich werde das script noch entsprechend bereinigen.
        Gruss
        hannes

        1. @@hannes:

          nuqneH

          Ja, vielen Dank. Ich werde das script noch entsprechend bereinigen.

          Mit bereinigen meinst du entsorgen?

          Wozu sollte da unnützerweise ein serverseitiges Script laufen, wenn es doch eine clienseitige Lösung gibt?

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi!

            Ja, vielen Dank. Ich werde das script noch entsprechend bereinigen.
            Mit bereinigen meinst du entsorgen?
            Wozu sollte da unnützerweise ein serverseitiges Script laufen, wenn es doch eine clienseitige Lösung gibt?

            Du übersiehst, dass da eine Datenbankabfrage stattfinden soll, die Teile des Inhalts für den Client besorgt und erstellt, wozu ein serverseitiges Script notwendig ist. In dem steckten weitere Fehler, die zu ungültigem Client-Code führen. Lediglich der Wunsch nach abwechselnder Farbe kann clientseitig gelöst werden. Unabhängig von der Lösung für die Farbe sollten die serverseitigen Fehler dort behoben werden. Das geht auf dem Client nicht mehr.

            Lo!