PHP dynamisch Seiten generieren



  • Folgendes Problem bei einem Gästebuch. Ich speichere die Einträge eines Gästebuchs in einer MySQL-Datenbank. Ich möchte, dass auf einer Seite nur 10 Beiträge erscheinen, dann soll eine neue Seite generiert werden, auf der die nächsten Einträge erscheinen und so weiter..... Ich habe aber keinen Plan, wie ich das machen soll. Bin für Hilfe sehr dankbar!
    MfG

    Tobsen



  • füge einfach an deine MySQL-Abfrage ein LIMIT hinten dran!
    SELECT * FORM news LIMIT 0, 10
    SELECT * FORM news LIMIT 10, 10
    Wenn ich das gerade bei phpMyAdmin richtig gesehen habe gibt die erste Zahl die untere Grenze, die zweite die Anzahl der Einträge an!



  • Ok, soweit, so gut, aber ich möchte ja, dass für die folgenden Einträge auch zu lesen sind, halt nur auf einer neuen Seite, die dynamisch erzeugt werden soll. Für jede dynamisch erzeugte Seite, soll ein link zu dieser auf der ersten Seite erzeugt werden. Versteht ihr was ich meine? Erklärs vielleicht en bisschen komisch!?
    MfG

    Tobsen



  • Du brauchst im Prinzip nur eine Seite. Musst halt einen Offset mitführen um die LIMIT-Anweisung füttern zu können. D.h. am Anfang ist der Offset = 0. Auf der nächsten Seite wäre es Offset+Schrittweite+1 usw.



  • Hi,

    du mußt natürlich den "Seitenindex" beim Aufrufen der Seite immer wieder mitgeben.

    ms



  • Hi

    Als erstes fragen wir ab ob eine Seitenzahl gesetzt ist:
    Fehlt die Variable $pagenum oder ist sie leer so wird sie auf 1 gesetzt.

    if(!isset($pagenum) or $pagenum==0 or empty($pagenum)): $pagenum = 1; endif;
    

    Nun legen wir in der Variablen $perpage noch die Anzahl der Elemente fest, die pro Seite angezeigt werden sollen.

    $perpage = 5;
    

    In diesen Beispiel sind es 5 Elemente pro Seite.

    Nachdem die Vorarbeit geleistet ist, fehlt nur noch das obere und untere Limit, das wir wie folgt definieren:

    $limitlower =($pagenum-1)*$perpage+1;
      $limitupper =$pagenum * $perpage;
    

    Jetzt folgt der mySQL Teil:

    Wir brauchen 2 mySQL Resultate. Das eine enthält die gefundene Anzahl und das andere die Daten.

    $sql = "select SPALTE1,SPALTE2 from TABELLE limit ".($limitlower-1).",".$perpage;
    

    limitlower-1 = errechnet den Startwert für die Ausgabe der Daten perpage bestimmt die Anzahl der Daten, in unseren Fall also die obigen 5

    $sql_hits = "select count(*) as hits from TABELLE;
    

    Diese Zeile enthält einfach nur die Anzahl der gefundenen Datensätze, die wir später brauchen.

    $r_sql_hits = mysql_query($sql_hits,$db);
      $r_sql = mysql_query($sql,$db);
    

    Nun wird uns das Ergebnis unserer Abfragen presentiert.
    $db = steht für die Datenbankconnection.

    Wir fragen also mit Hilfe von PHP das Ergebnis der mySQL Anweisung ab:

    if($r_sql)
      {
        $hits = mysql_result($r_sql_hits,0);
    

    $hits enthält nun den Wert unsere gefundenen Datensätze.
    So nun müssen wir die obere und untere Grenzen entsprechend setzen, falls sie über die Grenzen schreiten.

    if($limitupper > $hits): $limitupper = $hits; endif;
    

    Wenn $limitupper größer als unsere Trefferanzahl ist wird $limitupper = der Trefferanzahl gesetzt.

    if($limitlower > $hits): $limitlower = $hits - $perpage; endif;
    

    Analog das gleiche mit $limitlower und falls es mal kleiner wie 0 sein sollte wird die Variable auf den Wert 1 gesetzt.

    if($limitlower <= 0): $limitlower = 1; endif;
    

    Natürlich kann es auch vorkommen das gar nichts gefunden wird, deshalb sollte man auch diese kleine Zeile einbauen. Wenn ein Ergebnis vorliegt beginnt die Ausgabe.
    In der Praxis sollte die Ausgabe natürlich in einer Tabellenform passieren

    if($hits==0)
        {
          //beginne die Fehlerroutine
        }
        else
        {
          while($row = mysql_fetch_array($r_sql))
          {
            $row['SPALTE1']." - ".$row['SPALTE2']."<br>";
    

    Als 1. Prüfen wir ob alles auf eine Seite paßt oder ob Folgeseiten benötigt werden.

    if($hits<$perpage): $page = 1; endif;
    

    Sind die Treffer nun kleiner wie die Anzahl der Seiten, gibt es nur eine Seite.

    if($hits>$perpage): $page = ceil($hits/$perpage); endif;
    

    Ist die Trefferanzahl größer wie unsere Anzahl der Elemente, berechnen wir die Seitenanzahl.
    ceil() rundet dabei das Ergebnis auf die nächstgrößer Ganzzahl auf. 1,2 würde zur 2.

    Die Ausgabe der Seitenanzahl.
    Jetzt wird die Seitenanzahl abgefragt, damit wir wissen auf welcher Seiten wir uns aktuell befinden.
    Ist die Seitennummer also größer 1 sind die Buttons "zur 1. Seite" und "eine Seite zurück" aktiviert, sonst sind sie inaktiv.

    if($pagenum > 1):
              $left_arrow = "<a href='result.php?action=search&pagenum=".($pagenum-1)."' class='searchlink'> « </a>";// Eine Seite zurück
              $firstpage = "<a href='result.php?action=search&pagenum=1' class='searchlink'> «« </a>";//Zur 1. Seite
            else:
              $left_arrow = "<span class='diseablesearchlink'> « </span>";//Deaktiviere den Link
              $firstpage = "<span class='diseablesearchlink'> «« </span>";//Deaktiviere den Link
            endif;
    

    Analog dazu auch das gleiche mit der letzten Seite. Solange $pagenum kleiner wie die Gesamtseitenzahl ist gibt es auch die Buttons "Eine Seite weiter" und "Zur letzten Seite" ansonsten werden die Links wieder inaktiviert.

    if($pagenum < $page):
              $right_arrow = "<a href='result.php?action=search&pagenum=".($pagenum+1)."' class='searchlink'> » </a>";
              $lastpage = "<a href='result.php?action=search&pagenum=".$page."' class='searchlink'> »» </a>";
            else:
              $right_arrow = "<span class='diseablesearchlink'> » </span>";
              $lastpage = "<span class='diseablesearchlink'> »» </span>";
            endif;
    

    Die Variablen haben nun Ihren Inhalt und wir können sie schön ausgeben lassen.

    Am besten macht man das in einer Tabelle.

    <table width='100%' border='0' cellspacing='0' cellpadding='0'>
            <tr>
            <td align='left'><?php echo "Ergebnis: ".$limitlower." bis ".$limitupper." von ".$hits; ?></td>
    

    Gibt nun aus welche Datensätze wir aktuell sehen und wieviele es insgesamt gibt.

    <td align="right">
            <?php
            echo $firstpage." ".$left_arrow;
    

    Die Ausgabe der Variablen von Punkt 4. (1. Seite und 1 Seite zurück)
    Als nächstes brauchen wir eine Schleifen die uns die gesamte Seitenanzahl listet.

    for($a=1;$a<=$page;$a++)
            {
              if($a==$pagenum):
    

    Wenn $a == unserer Aktuellen Seite ist erfolgt keine Anzeige als Link da wir ja schon auf dieser Seite sind. Stimmt die aktuelle Seitenzahl nicht mit $a überein wird sie als Link ausgegeben.

    echo " <span class='thissite'>$a</span>";
              else:
                echo " <a href='result.php?action=search&pagenum=".$a."' class='searchlink'>".$a."</a>";
              endif;
            }
            echo $right_arrow." ".$lastpage;
    

    Die Ausgabe der Variablen von Punkt 4. (letze Seite und 1 Seite vorwärts)

    ?>
            </td>
            </tr>
            </table>
            <?php
            }
          }
          ?>
    


  • Ich denke mal das ist das was du willst für das GB.

    Du mußt halt wo

    $row['SPALTE1']." - ".$row['SPALTE2']."<br>";
    

    steht, da kommt das DEsign rein...
    Beste was du da machst, ist eine Funktion....

    [edit]Ich könnte dir meine Komplette funktion geben....
    Ich dachte mir di lernst das so besser, wenn du den Code komplett haben willst (funktioniert 100%ig) kann ich dir den geben...[/edit]

    [ Dieser Beitrag wurde am 17.12.2002 um 10:20 Uhr von DJ BlackEagle editiert. ]



  • Vielen Dank für deine Lösungsvorschlag!!!! Ich habe heute leider keine Zeit, mich damit zu beschäftigen (muss für Klausuren lernen). Bei Fragen melde ich mich nochmal an dich.
    MfG

    Tobsen


Anmelden zum Antworten