PHP - MYSQL ==> Jede zweite Zeile anders farbig

Communicate

Mitglied
Hallo,

ich weiss, dass Thema ist schon 10000000 mal besprochen.
Aber:
Ich bin noch ganz junger Anfänger in Sachen PHP und habe allemöglichen Beispiele ausprobiert und bin in meiner Verzweiflung nun hier gelandet und hoffe, dass Ihr mir trotzdem helft.

Ich lese aus einer MYSQL Datenbank alle Datensätze aus. Nun möchte ich, dass jede zweite Zeile abwechselnd eine andere Farbe erhält (weiss/blau/weiss/blau/etc.)

Hier ist mein Code, mit welchem es aber, aus mir nicht erklärlichen gründen (Wahrscheinlich bin ich eifnach zu doof :-(, nicht klappt):

PHP:
<?php
error_reporting(E_ALL);    
 include("db.php");
$sql = "SELECT * FROM Stammdaten ORDER
BY id DESC";
$ausgabe=mysql_query($sql);
?>

<?php
$i = 1;

while ($Stammdaten = mysql_fetch_object ($ausgabe)){
?>


<form method="get" action="gbookedit">
<table border="1">




 
 
 
 
 
 
 
 
 
 
  <? if(($i=1)){ ?>
<td bgcolor="blue">
<? }else{ ?>
 <td bgcolor="green">
<? } ?>
 
 
 
 
 

                  <td ><b><?php echo($Stammdaten->Firma+$i); ?></b></td>
					<td ><b><?php echo($Stammdaten->VM); ?></b></td>
                    <td ><?php echo($Stammdaten->Art); ?></td>
                    <td ><?php print "<a href=\"gbookedit.php?id=$Stammdaten->ID\">Editieren</a>."; ?></td> 
                    <td ><?php print "<a href=\"gbdelete.php?id=$Stammdaten->ID\">Löschen</a>."; ?></td>       
                          
            
	    		</tr>

    </table>
 <?php
$i=$i+1;
?>  
<?php }
?>
</form>



Viele Grüße
Communicate
 
Zuletzt bearbeitet:
Hallo,

ich füge die Lösung jetzt nicht ein deinen SCHLECHT fomatierten Code.

So mach ich das immer:
PHP:
var $colorCounter = 0;
var $color = null;

if($colorCounter % 2 == 0){
       $farbe = FARBE EINS
}else{
       $farbe = FARBE ZWEI
}

while($row = mysql_fetch_object($result)){
           <span bgcolor='$farbe'>$row->DEINE SPALTE</span>;
           ++$colorCounter;
}

Gibt wahrscheinlich eine viel elegantere Lösung, aber ich mag das so (wobei ich das in eine Extra Funktion verpackt habe, die mir nur die Ausgabe returnt.

Und hier noch ein Link:
http://php-faq.de/q-code-tabellenfarbe.html
mit Array (auch ne nette Variante)
 
So müsste es gehen. Ich hoffe, dass es dich nicht stört, dass ich dein Skript noch etwas aufgewertet und außerdem noch etwas geordnet habe.
PHP:
<?php 
error_reporting(E_ALL);
include 'db.php';

$sql = 'SELECT * FROM Stammdaten ORDER BY `id` DESC';
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)) {
	$data[] = $row;
}

foreach($data as $key => $value) {
?>
<form method="get" action="gbookedit">
  <table border="1">
    <?php if(($key % 2) == 1) { ?>
    <tr bgcolor="blue">
    <?php } else { ?>
    <tr bgcolor="green">
    <?php } ?>
      <td><b><?php echo $value['Firma']+$key+1; ?></b></td>
      <td><b><?php echo $value['VM']; ?></b></td>
      <td><?php echo $value['Art']; ?></td>
      <td><a href="gbookedit.php?id=<?php echo $value['ID']; ?>">Editieren</a></td>
      <td><a href="gbdelete.php?id=<?php echo $value['ID']; ?>">Löschen</a></td>
    </tr>
  </table> 
<?php } ?>
</form>

PS: Ich habe es nicht geprüft, aber es müsste theoretisch funktionieren.
 
Vielen Dank für die schnelle Antwort.
Der Code sieht schrecklich aus, schande auf mein Haupt...

Hast Du vielleicht einen guten Tip, wie ich PHP am besten "lernen" kann? :-)

VIele Grüße
Communicate



Hallo,

ich füge die Lösung jetzt nicht ein deinen SCHLECHT fomatierten Code.

So mach ich das immer:
PHP:
var $colorCounter = 0;
var $color = null;

if($colorCounter % 2 == 0){
       $farbe = FARBE EINS
}else{
       $farbe = FARBE ZWEI
}

while($row = mysql_fetch_object($result)){
           <span bgcolor='$farbe'>$row->DEINE SPALTE</span>;
           ++$colorCounter;
}

Gibt wahrscheinlich eine viel elegantere Lösung, aber ich mag das so (wobei ich das in eine Extra Funktion verpackt habe, die mir nur die Ausgabe returnt.

Und hier noch ein Link:
http://php-faq.de/q-code-tabellenfarbe.html
mit Array (auch ne nette Variante)
 
Vielen Vielen Dank! Funktioniert 1a! Vielen Dank für die aufwertung

Auch an Dich die Frage: Gibt es irgendein buch oder Tutorial dass du zu PHP empfehlen kannst?

Grüße
Communicate


So müsste es gehen. Ich hoffe, dass es dich nicht stört, dass ich dein Skript noch etwas aufgewertet und außerdem noch etwas geordnet habe.
PHP:
<?php 
error_reporting(E_ALL);
include 'db.php';

$sql = 'SELECT * FROM Stammdaten ORDER BY `id` DESC';
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)) {
	$data[] = $row;
}

foreach($data as $key => $value) {
?>
<form method="get" action="gbookedit">
  <table border="1">
    <?php if(($key % 2) == 1) { ?>
    <tr bgcolor="blue">
    <?php } else { ?>
    <tr bgcolor="green">
    <?php } ?>
      <td><b><?php echo $value['Firma']+$key+1; ?></b></td>
      <td><b><?php echo $value['VM']; ?></b></td>
      <td><?php echo $value['Art']; ?></td>
      <td><a href="gbookedit.php?id=<?php echo $value['ID']; ?>">Editieren</a></td>
      <td><a href="gbdelete.php?id=<?php echo $value['ID']; ?>">Löschen</a></td>
    </tr>
  </table> 
<?php } ?>
</form>

PS: Ich habe es nicht geprüft, aber es müsste theoretisch funktionieren.
 
Übrigens war das hier dein Fehler:
PHP:
if(($i=1)){ ?>
<td bgcolor="blue">
<? }else{ ?>
 <td bgcolor="green">
<? } ?>
Du weist $i in der if-Anweisung immer 1 zu, deswegen wechselt die Farbe auch nicht.
if-Abfragen macht man immer mit zwei Gleichheitszeichen (==)

Vielleicht solltest du in Zukunft darauf achten ;)
 
Deswegen wird in viele Dokumentationen auch dazu geraten die Prüfung umzukehren, sprich
Code:
if(1==$if) {
// Der Code
}

Sollte in dem fall anstatt des Vergleichsoperators der Zuweisungsoperator benutzt werden, wird nen Fehler entstehen und man kann ihn sofort finden und beheben.
 
Mir fällt da gerade was auf, dass performanter seien könnte:
PHP:
$i = 0;
while ($row = $pdo->fetch($result))
{
  if ($i)
  {
    echo "grün";
  }
  else
  {
    echo "gelb";
  }
  $i ^= 1;
}

Ich denke es ist intern schneller, da $i binär zwischen 1 und 0 hin und her geschaltet wird und die Bedingung ist reduziert von einer Berechnung ($i % 2) mit Prüfung (= 0) auf eine evtl. Typenumwandlung int -> boolean

Was haltet ihr davon?
 
Zurück