Daten-Ausagbe auf mehrere Seiten verteilen

S

schiieech

Ich habe ein Gästebuch-Skript auf meinem Server laufen. Mittlerweile gibt es dort 36 Einträge. Ich wollte das jetzt gern so einrichten, dass die Einträge gesplittet werden, d.h. dass auf einer Seite die neusten 10 Einträge sind, auf der nächsten Seite dann die nächsten 10 Einträge usw.

Wie kann man das machen?

Hab meine Abfrage bis jetzt so:

Code:
$query = "select * from $table order by datum desc"; 
                $result = mysql_query($query);  
                
                if (mysql_num_rows($result)) { 
                  while($row=mysql_fetch_array($result)) { 
                  
                    $name = $row['name']; 
                    $open = $row['open']; 
                    $email = $row['email']; 
                    $hp = $row['hp']; 
                    $inhalt = $row['inhalt']; 
                    $kommentar = $row['kommentar']; 
                    $datum = date("d.m.y",$row['datum']); 
                    
                    echo "Eintrag vom: ".$datum."<br>"; 
                    echo "User: ".$name; 
                    if($open && $email) echo " (".$email.")"; 
                    if($hp) echo " (".$hp.")"; 
                    echo "<br>Meinung: ".$inhalt; 
                    if($kommentar) echo "Unser Kommentar: ".$kommentar."<br>"; 
                    echo "<hr>"; 
                    flush(); 
                  
                  } 
                }

plz hlp!

mfg Schiieech
 
hihi ... wie sich die Probleme doch gleichen :p

also: es gibt bei der SELECT-Abfrage noch ein Schlüsselwort namens "LIMIT". Damit kannst Du erreichen, daß nur eine bestimmte Anzahl an Datensätzen als Ergebnis zurückgegeben wird.

Code:
SELECT * FROM tabelle LIMIT 0,10       gibt 10 Datensätze zurück, beginnend bei Satz 0

SELECT * FROM tabelle LIMIT 5,25       gibt 25 Datensätze zurück, beginnend bei Satz 5

In Deinem Fall würden die Abfragen also heißen:

Code:
SELECT * FROM $table ORDER BY datum DESC LIMIT 0,10

SELECT * FROM $table ORDER BY datum DESC LIMIT 10,10

SELECT * FROM $table ORDER BY datum DESC LIMIT 20,10

SELECT * FROM $table ORDER BY datum DESC LIMIT 30,10

entsprechend werden es mehr, wenn Du mehr Einträge in Dein Gästebuch bekommst.
Am besten machst Du das dann in einer Schleife, abhängig von der Gesamtanzahl der Datensätze. :)

hoffe, das hilft.

Gruß
Dunsti
 
danke, dass hat mir schonmal etwas weiter geholfen :)

aber ich muss dir leider sagen, dass ich noch ein totaler Neuling in Sachen MySQL bin und noch eine Frage an dich habe:

wie kann man sowas dynamisch gestalten, ich will ja nicht dauernd manuell Seiten hinzufügen. Also PHP sollte erkennen, wenn mehr als 10 einträge, dann zwei Seiten anlegen:

Seite 1: Einträge (z.B.)13-4
Seite 2: Einträge 3-1

da muss man ja auch irgendwie auf so eine URL mit den Variablen kommen:

http://www.server.de/gbook/gbook.php?page=2

oder so ähnlich. Aber diese "Seiten" wie z.B. page=2 soll PHP halt selber erstellen.

Und ganz unten auf der Seite möchte ich die verfügbaren Seiten ausgeben, also:

"gehe zu Seite: 1 2 3 4 5 ..."

wie kann man das verwirklichen?

Vielen Dank für Eure Hilfe!
mfg Schiieech
 
hier mal kurz, wie das von der Logik her aussehen könnte:

zunächst musst Du mal ermitteln, wieviele Einträge Du insgesamt hast:

PHP:
$result=mysql_query("SELECT * FROM tabelle");
$anzahl=mysql_num_rows($result);

dann daraus die Anzahl der Seiten:

PHP:
$seiten=ceil($anzahl / $pro_seite);

Diese beiden müssten dann in jedem Unterprogramm stehen, da die Variablen nicht global sind!

so, dann wirds schwieriger ;) da ja die neuseten Einträge zuerst angezeigt werden sollen.

Der Aufbau der Select-Abfrage müsstes Du dann so zusammenbasteln:

PHP:
$limitanfang=$anzahl - ($seite * $pro_seite);
if ($limitanfang<0) {
   $limitanzahl=$pro_seite+$limitanfang;
   $limitanfang=0;
}
else
   $limitanzahl=$pro_seite;
}
$result=mysql_query("SELECT * FROM tabelle LIMIT $limitanfang,$limitanzahl");

für die Navigation würde ich dann eine FOR-Schleife hernehmen:

PHP:
if ($page>1) {
   $i=$page-1;
   echo "<A HREF=\"skript.php?page=$i\">&lt;</A>";
}
for($i=1,$i<=$seiten,$i++) {
   echo "<A HREF=\"skript.php?page=$i\">$i</A>";
}
if ($page<$seiten) {
   $i=$page+1;
   echo "<A HREF=\"skript.php?page=$i\">&gt;</A>";
}

so, ich denke das erklärt die grobe Vorgehensweise. Ich hoffe Du kannst meinen Gedanken folgen.

Viel Spaß beim tüfteln :smoke:

Gruß
Dunsti
 
okay, deine Gedankengänge kann ich auf jeden Fall verfolgen. Werd mich dann morgen mal an der technischen Umsetzung ausprobieren...

Vielen Dank jedenfalls für deine Hilfe! :)

mfg Schiieech
 

Neue Beiträge

Zurück