verona: Seitenwechsel programmieren...

Hallo liebes Forum,

das Programmieren von Schleifen bringt mich noch um den Verstand. Ich bekomme es einfach nicht hin.

Folgendes Problem:

Ich lese Daten aus einer Datenbank aus und möchte diese exakt auf ein DIN A4 Format bringen.

Bei einer einzigen Seite klappt das auch sehr gut. Wenn nicht genügend Daten für eine ganze Seite da sind, dann fülle ich den Rest der Seite mit leeren Zeilen.

$anzahlDaten
$maxZeilenJeSeite
$seite
$maxSeiten

Das sind die Variablen, mit denen ich arbeite. Mein Listing ist so lang geworden, dass ich es nicht posten mag. ;-)

Nur eine Seite!
+-----+-------+------+------+
|<th> | <th>  | <th> | <th> |
+-----+-------+------+------+
|Hans | 12345 |23456 |Kassel|
|bla  |       |      |      |
|     |       |      |      |
|     |       |      |      |
|     |       |      |      |
+-----+-------+------+------+
                    Seite 1/1

Mehr als eine Seite!
+-----+-------+------+------+
|<th> | <th>  | <th> | <th> |
+-----+-------+------+------+
|Hans | 12345 |23456 |Kassel|
|Hans | 12345 |23456 |Kassel|
|Hans | 12345 |23456 |Kassel|
|Hans | 12345 |23456 |Kassel|
|Hans | 12345 |23456 |Kassel|
+-----+-------+------+------+
                    Seite 1/2

+-----+-------+------+------+
|<th> | <th>  | <th> | <th> |
+-----+-------+------+------+
|Hans | 12345 |23456 |Kassel|
|bla  |       |      |      |
|     |       |      |      |
|     |       |      |      |
|     |       |      |      |
+-----+-------+------+------+
                    Seite 2/2

Bei der zweiten Sache komme ich mit der "Schleife in Schleife in Schleife in noch 'ner Schleife" - Geschichte nicht mehr klar und habe total den Überblick verloren. Gebt mir bitte einen Schupps in die richtige Richtung. (Aber nicht die Klippen runter, bitte)  :-)

Danke

  1. Hallo,

    ob das da jetzt an der richtigen Stelle steht, weiß ich nicht. Aber ich habe da einfach mal was eigefügt bei meinen Seiten:

    <tr style='page-break-before:always;'>

    Na, und das kann man dann einer zentralen CSS-Datei auch von den media-Informationen abhängig machen und eine passende Klasse zuweisen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Hallo Verona,

    Wenn nicht genügend Daten für eine ganze Seite da sind, dann fülle ich den Rest der Seite mit leeren Zeilen.

    Kannst Du es nicht so programmieren, dass statt dem Füllen ein Seitenvorschub erfolgt? Da gibt es doch bestimmt auch eine Funktion für.

    Was den Schleifensalat angeht, versuche doch den Code innerhalb der Schleifen in Funktionen auszulagern. Das sollte wieder für Durchblick sorgen. Ich habe heute zufällig ähnliches durchgemacht und versucht mit Schleifen ein XML-Array auszuwerten (ne Konfig-Datei). Bisher ohne Erfolg. Und sowas als PHP-Neuling... Hilfe! ?:|

    Gruß,
    Danny

  3. Hab's geschafft.

    Hier kommen die ersten Kopfdaten hin.

    //Ausgelagerte Funktion, welche Daten aus der mySQL Tabelle liest. Mit BETWEEN oder LIKE
    $myarray=function($anfang,$ende);

    //Maximale Anzahl an Zeilen pro Seite. Ist in Abhängigkeit vom der Höhe des spacer.gif
    $maxZeilen=25;

    //Ist die Anzahl an Datensätzen größer als die maximalen Zeilen je Seite, wird die Anzahl
    //benötigter Seiten errechnet, ansonsten wird nur eine Seite gebraucht
    $maxSeiten = (count($myarray) > $maxZeilen) ? ceil(count($myarray) / $maxZeilen) : 1;

    //Schleife, die die aktuelle Seite zählt
    for ($seite=1;$seite<=$maxSeiten;$seite++)
    {

    //Kompliziert?! :-) Versucht mal durchzusteigen
      for ($i= count($myarray) - (($maxSeiten - $seite + 1) * $maxZeilen) + (($maxSeiten * $maxZeilen) - count($myarray));$i < $seite * $maxZeilen;$i++)
      {
        $zeile=$i+1;
        echo "<tr>\n";
        echo "<td><img src="images/spacer.gif" width="5" height="20" alt=""/></td>";
        echo "<td>" . $zeile . "</td>\n";
        echo "</tr>\n";

    //Stellt fest, ob die erste Seite voll ist und ergänzt dann die Seitenzahlen und
        //hängt dann die Kopfdaten an
        if ($i == $seite * $maxZeilen - 1 && $i != $maxSeiten * $maxZeilen -1)
        {
          echo "<tr>\n";
          echo "<td><img src="images/spacer.gif" width="2" height="40" alt=""/></td>\n";
          echo "<td>Seite $seite von $maxSeiten</td>\n";
          echo "</tr>\n";

    // Platz für Kopfdaten

    echo "<tr>\n";
          echo "<th><img src="images/spacer.gif" width="5" height="20" alt=""/></th>\n";
          echo "<th>Zeile</th>\n";
          echo "</tr>\n";
        }

    //Stellt fest, ob die letzte Seite erreicht wurde und gibt dann die Seitenzahl aus
        elseif ($i == $maxSeiten * $maxZeilen -1)
        {
          echo "<tr>\n";
          echo "<td><img src="images/spacer.gif" width="2" height="40" alt=""/></td>\n";
          echo "<td>Seite $seite von $maxSeiten</td>\n";
          echo "</tr>\n";
        }
      }
    }