Tabelle mit abwechselnder Zeilenfarbe
hannes
- php
0 Cheatah0 bleicher3 ChrisB0 Gingerbred
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
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
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
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
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
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
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
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
Hi!
... was Du PHP zu fressen gibst.
...und dem Browser zum Fraß vorgeworfen wird.
Du wirkst hungrig.
off:PP
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
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
@@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'
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.
Grüße,
css, nth-
MFG
bleicher
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
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
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
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) . "'>"
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
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
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!
hallo dedlfix,
Hier stecken auch noch ein bis zwei Fehler...
Ja, vielen Dank. Ich werde das script noch entsprechend bereinigen.
Gruss
hannes
@@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'
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!