# PHP - MYSQL ==> Jede zweite Zeile anders farbig



## Communicate (11. August 2009)

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
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


----------



## ZodiacXP (11. August 2009)

Also die Struktur lässt schon mal zu Wünschen übrig. Da solltest zuerst dran arbeiten 
Bisschen ordentlicher formatieren (http://pear.php.net/manual/de/standards.php oder http://php-coding-standard.de/php_coding_standard.php).

Hier ein Beispiel zu deinem Anliegen:

```
$i = 0;
while ($row = mysql_fetch_row($result))
{
  if ($i % 2 == 0)
  {
    echo "Grün"
  }
  else
  {
    echo "Blau";
  }

  $i++;
}
```

Mit % rechnet man Modulo (Rest). Das heißt z.B. :
1 % 2 = 1
2 % 2 = 0
55 % 8 = 7


----------



## awortmeier (11. August 2009)

Hallo,

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

So mach ich das immer:

```
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)


----------



## Parantatatam (11. August 2009)

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 
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.


----------



## Communicate (11. August 2009)

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





awortmeier hat gesagt.:


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


----------



## Communicate (11. August 2009)

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




einfach nur crack hat gesagt.:


> 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
> ...


----------



## ZodiacXP (11. August 2009)

http://tut.php-q.net/


----------



## Chumper (12. August 2009)

Übrigens war das hier dein Fehler:

```
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


----------



## Akeshihiro (12. August 2009)

Deswegen wird in viele Dokumentationen auch dazu geraten die Prüfung umzukehren, sprich

```
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.


----------



## ZodiacXP (12. August 2009)

Mir fällt da gerade was auf, dass performanter seien könnte:

```
$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?


----------



## Napofis (12. August 2009)

Viel ich nutze das selbe Prinzip in der Form.
Bit weise Operationen sind  eigentlich immer schneller.


```
for ($i=0;$i<300;$i++) {
  if ($i&1) {
    echo '<p style="background-color: green;">row 1</p>';
  } else {
    echo '<p style="background-color: red;">row 2</p>';
  }
}
```


----------

