Cheese: PHP zählt nicht ganz bis 100?!

Ich bin soeben dabei für meine Homepage eine Bildergalerie zu schreiben und will nicht immer fast das selbe von Zeile zu Zeile schreiben, deshalb habe ich mir gedacht, dass ich das ohne große Probleme eigentlich mit PHP hinbekommen müsste. Jetzt habe ich folgendes geschrieben:

  
<h3>Fotos 2008</h3>  
<table border="1";>  
<tr>  
<?php  
$bilderanzahl = 0;  
$a=0;  
for($i=1; $i<=100; $i++)  
{  
	$a++;  
	$bilderanzahl++;  
	if($a>5)  
	{  
	 echo "</tr>";  
	 $a=0;  
	 $bilderanzahl--;  
	}  
	else  
	{  
	 echo "<td>";  
	 echo $bilderanzahl;  
	 echo "</td>";  
	}  
}  
?>  
</tr>  
</table>  

Wundert euch bitte nicht, dass ich die Zahlen ausgeben lasse...das mache ich nur, um zu sehen, ob später auch alle Bilder eingetragen werden ;D
Jetzt mal eine kleine Erklärung zum Quellcode und was ich mir gedacht habe... ^^
Zu allererst habe ich zwei Variablen erstellt...die eine, $bilderanzahl, wird später zur Vervollständigung der Dateipfade verwendet (so spar ich mir das "manuelle" Zählen) und die Variable $a zählt einfach nur, wie oft die Variable $bilderanzahl bereits pro Zeile geschrieben wurde - In Verbindung mit einer if Schleife wird diese dann einen Zeilenumbruch schreiben.
Die for-Schleife zählt einfach nur die Bilder und der Rest dürfte klar sein ;)

Jetzt zu meinem eigentlichen Problem:
Im o.g. Code schreibt mir PHP schön die Zahlen in die Tabelle und macht auch immer einen Zeilenumbruch nach 5 Zahlen, doch die letzte eingetragene Zahl ist nicht 100 sonder 84 ?!

Wie kann das sein? Wäre echt toll, wenn ihr mir weiterhelfen könntet :)

Gruß,
Cheese

  1. Hi!

    Die for-Schleife zählt einfach nur die Bilder und der Rest dürfte klar sein ;)

    Nee, unklar ist, warum du einmal mit $i zählst und dann nochmal extra mit $bilderanzahl.

    Im o.g. Code schreibt mir PHP schön die Zahlen in die Tabelle und macht auch immer einen Zeilenumbruch nach 5 Zahlen, doch die letzte eingetragene Zahl ist nicht 100 sonder 84 ?!

    Ja, so hast du das programmiert.

    Wie kann das sein? Wäre echt toll, wenn ihr mir weiterhelfen könntet :)

    Lass dir neben $bilderanzahl auch $i ausgeben, dann kommst du vielelicht auf die Idee, was da anders läuft als gedacht.

    Lo!

    1. Hi!

      Nee, unklar ist, warum du einmal mit $i zählst und dann nochmal extra mit $bilderanzahl.

      Hm...stimmt eigentlich, dann ersetze ich $i einfach durch $bilderanzahl, doch es funktioniert immer noch nicht :/

      Lass dir neben $bilderanzahl auch $i ausgeben, dann kommst du vielelicht auf die Idee, was da anders läuft als gedacht.

      Lo!

      Nicht wirklich -.-

      1. Juhu ich habs geschafft! Danke  für eure Hilfe :D

        so siehts jetzt aus...wäre vllt. noch n bisschen verbesserungswürdig, aber funzt auf jeden Fall ^^

        Gruß,
        Cheese

  2. Hi,

    Wundert euch bitte nicht, dass ich die Zahlen ausgeben lasse...

    Grund zum Wundern gibt eher, dass du nur ein mal ein TR-Element öffnest, aber zigfach es zu schließen versuchst.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Wundert euch bitte nicht, dass ich die Zahlen ausgeben lasse...

      Grund zum Wundern gibt eher, dass du nur ein mal ein TR-Element öffnest, aber zigfach es zu schließen versuchst.

      MfG ChrisB

      Ah ok, scheint einer meiner Fehler zu sein -.-
      Habe das jetzt so ausgebessert...doch es geht immer noch nicht :(

        
          if($a>5)  
          {  
              echo "</tr>";  
              echo "<tr>";  
              $a=0;  
          }  
      
      
  3. Tach auch.

    <h3>Fotos 2008</h3>
    <table border="1";>
    <tr>
    <?php
    $bilderanzahl = 0;
    $a=0;
    for($i=1; $i<=100; $i++)
    {
    $a++;
    $bilderanzahl++;
    if($a>5)
    {
    echo "</tr>";
    $a=0;
    $bilderanzahl--;
    }
    else
    {
    echo "<td>";
    echo $bilderanzahl;
    echo "</td>";
    }
    }
    ?>
    </tr>
    </table>

      
    Mir scheint, dass du den "else"-Zweig auf jedenfall ausführen willst. Eingängiger wäre etwa sowas  
      
    ~~~php
    $first = 1;  
    for ($i = 0; $i < 100; ++$i) {  
       if ($i % 5 == 0) { // Zeile beenden und neue beginnen  
          if ($first) {  
             echo '</tr>';  
             $first = 0;  
          }  
          echo '<tr>';  
       }  
       echo "<td>$i</td>";  
    }  
    echo '</tr>';
    

    (Kann sein, dass am Ende ein Zeilenumbruch ist, den du nicht haben willst. Der Trick, den ich dir zeigen will: mit der modulo-Abfrage ($i % 5 == 0) kannst du auf den zweiten Zähler verzichten, da $i % 5 automatisch bei jedem fünften Element 0 wird.

    Im o.g. Code schreibt mir PHP schön die Zahlen in die Tabelle und macht auch immer einen Zeilenumbruch nach 5 Zahlen, doch die letzte eingetragene Zahl ist nicht 100 sonder 84 ?!

    Zähl einfach mal ab. Kleiner Tipp: 100/(5+1) ist abgerundet 16 und 100-16 = 84.
    Quizfrage: warum 5+1? Und warum zeigt er nur in den nicht-6.-Fällen etwas an? (Andersrum: was passiert denn ausschließlich in jedem 6. Fall?)

    Bis die Tage,
    Matti