Nach MySQL auslasen Zeilen abwechselnd 2farbig anzeigen
Rainer
- php
0 Klaus Mock0 FICHTL0 Andreas0 Uhf
Guten Morgen,
ich lese mit PHP aus einer DB
<table>
<?
$x=mysql_query("SELECT * FROM table");
while $z=(mysql_fetch_array($x)):
$dat=$z["dat"];
echo"<tr><td>$dat</td></tr>";
endwhile;
?>
</table>
Soweit so gut. Nun möchte ich die Ergebniszeilen abwechselnd mit Weiss und Grau als Zellenhintergrund ausgeben. Ich find einfach keine Lösung dafür und bitte um Hilfe.
Grüsse aus dem Thüringer Land
Rainer
Hallo,
Soweit so gut. Nun möchte ich die Ergebniszeilen abwechselnd mit Weiss und Grau als Zellenhintergrund ausgeben. Ich find einfach keine Lösung dafür und bitte um Hilfe.
Ich bin zwar nicht aus dem PHP-Lager, aber das ist doch in keiner Sprache wirklich ein Problem.
Vor dem echo machst Du irgendetwas wie
if($format == 'so_rum')
$format = 'anders_rum'
else
$format = 'so_rum';
und baust es dann in Deine Ausgabe ein.
Grüße
Klaus
hi,
<table>
<?
$x=mysql_query("SELECT * FROM table");
$iZeile = 0;
while $z=(mysql_fetch_array($x)):
$dat=$z["dat"];
if ($iZeile) {
echo"<tr><td bgcolor="#ff0000">$dat</td></tr>";
$iZeile = 0;
} else {
echo"<tr><td bgcolor="#00ff00">$dat</td></tr>";
$iZeile = 1;
}
endwhile;
?>
</table>
ungetestete grüße
FICHTL
Hallo!
Soweit so gut. Nun möchte ich die Ergebniszeilen abwechselnd mit Weiss und Grau als Zellenhintergrund ausgeben. Ich find einfach keine Lösung dafür und bitte um Hilfe.
Lass doch einen Zaehler mitlaufen. Alle Zeilen, die einen ungeraden Zaehler haben waeren grau und Zeilen mit geradem Zaehler sind weiss.
Ob der Zaehler gerade oder ungerade ist erhaelt man mit:
if ($i % 4 == 0)
Das sieht etwa so aus (ungetestet):
<?
$i = 0;
while $z=(mysql_fetch_array($x)) {
$dat=$z["dat"];
if ($i % 4 == 0) {
echo"<tr><td bgcolor=white>$dat</td></tr>";
} else {
echo"<tr><td bgcolor=black>$dat</td></tr>";
}
$i++;
}
?>
Hoffe das hilft Dir
Gruesse
-> Andreas
Ob der Zaehler gerade oder ungerade ist erhaelt man mit:
if ($i % 4 == 0)
$i MOD 4 ergibt aber nicht, ob die Zahl gerade oder ungerade ist, sondern macht alle 4 Zeilen eine weiße Zeile. Ist zwar ein ganz netter Effekt, man kann ihn auch für vier abwechselnde Zeilen einsetzen, aber ($i % 2 == 0) wäre dann für das aktuelle Problem doch besser. ;)
Man kann natürlich auch mit einer boolschen Variablen arbeiten. Das ist dann vielleicht etwas eleganter. Ich bastel mal in deinem Code rum. (Und die Zuweisung aus dem Original vom Hash zum Skalar kann man sich auch sparen) ;)
<?
$i = false;
while $z=(mysql_fetch_array($x)) {
if ($i) {
echo"<tr><td bgcolor=white>".$z['dat']."</td></tr>";
} else {
echo"<tr><td bgcolor=black>".$z['dat']."</td></tr>";
}
$i = !$i; // Hier wird zwischen true (erste Zeile) und false (zweite Zeile) umgeschaltet.
}
?>
Vorteil: Der Zähler $i läuft niemals über - wäre vielleicht ein Problem, wenn mehr als 2^32 Zeilen auszugeben sind. ;)
- Sven Rautenberg
Hi,
warum machst du das so kompliziert? Klaus Mock hat da ein simples Konstrukt gebracht, das ich so ungefähr auch immer einsetze.
if ($bgcolor == $bgcolor1) {
$bgcolor = $bgcolor2;
}
else {
$bgcolor = $bgcolor1;
}
Gruß NN
warum machst du das so kompliziert? Klaus Mock hat da ein simples
Konstrukt gebracht, das ich so ungefähr auch immer einsetze.
if ($bgcolor == $bgcolor1) {
$bgcolor = $bgcolor2;
}
else {
$bgcolor = $bgcolor1;
}
Wie wär's denn damit:
$farbe[false]="irgendwas";
$farbe[true]="nochmehr";
$cfarbe=false;
while/for (blabla)
{
echo $farbe[$cfarbe];
$cfarbe=!$cfarbe;
};
Gruß,
soenk.e
Wie wär's denn damit:
$farbe[false]="irgendwas";
$farbe[true]="nochmehr";
$cfarbe=false;
while/for (blabla)
{
echo $farbe[$cfarbe];
$cfarbe=!$cfarbe;
};
besser so:
while/for (blabla)
{
echo $farbe[$cfarbe = !$cfarbe];
};
Gruß
Christian
Hm, noch kürzer geht's so:
<?
$i = 0;
while $z=(mysql_fetch_array($x)) {
if (($i++ % 2) == 0) {
echo"<tr><td bgcolor=white>".$z["dat"]."</td></tr>";
} else {
echo"<tr><td bgcolor=black>".$z["dat"]."</td></tr>";
}
}
?>
$i++ ist ein Post-Inkrement, d.h. nach der Verwendung des Wertes in $i (hier für die Operation $i % 2) wird der Wert inkrementiert. Der alte Wert von $i wird also genommen, und der neue Wert gleich danach in $i abgelegt. Der Vergleich mit 0 nimmt aber noch den alten Wert von ($i % 2) - genauso wollten wir es.
Ich befürchte, mit meinen ZWEI Postings könnte ich jetzt einen Wettlauf um das beste Coding ausgelöst haben. Wohin sowas führen kann: http://internet.ls-la.net/mirrors/99bottles/ (Übrigens eine sehr gute Referenz zu allen möglichen Programmiersprachen. :) )
- Sven Rautenberg
Hallo Sven,
Hm, noch kürzer geht's so:
<?
$i = 0;
while $z=(mysql_fetch_array($x)) {
if (($i++ % 2) == 0) {
echo"<tr><td bgcolor=white>".$z["dat"]."</td></tr>";
} else {
echo"<tr><td bgcolor=black>".$z["dat"]."</td></tr>";
}
}
?>
Noch kürzer bzw. eleganter wäre imho:
<? $i = 0;
while ($z = mysql_fetch_array($x)): ?>
<tr>
<td bgcolor="<? echo $i++ % 2 ? 'white' : 'darkgray'; ?>">
<?= $z["dat"] ?>
</td>
</tr>
<? endwhile ?>
Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart
Re Moin,
ich finde die Lösung mit dem MOD Operator insofern eleganter, daß sich damit auch beliebig viele Abstufungen machen lassen.
switch ($laufvariable % $anzahl_der_abstufungen)
{
case 1:
$bgcolor = "#ffffff"
case 2:
.
.
.
case $anzahl_der_abstufungen:
$bgcolor = "#000000"
break
}
Naja so mach ichs halt immer. Zumal ich keine While Schleife sondern eine for- Schleife benutze und daher immer eine Laufvariable zur
Verfügung habe.
Gruß
Uhf