Hallo,
und zwar habe ich folgendes Problem:
Habe mir ein kleines Gästebuch mit PHP und SQL zusammen gebastelt.
Soweit funktioniert auch alles.
Problem ist nur das sich ab einer bestimmten Anzahl von Beiträgen das Gästebuchh in mehrere Seiten aufteilen soll. Also wenn ich 10 Beiträge habe, sollen 5 auf der ersten Seite sein und die anderen 5 dann auf Seite 2 usw.
Habe es soweit auch hinbekommen, das er mir unten anzeigt wieviele Seiten nun vorhanden sind. Aber er teilt mir die Beiträge nicht auf die Seiten auf. Er zeigt mir auf jeder Seite immer die gleichen Beiträge an.
Habe 16 Testbeiträge im Gästebuch geschrieben um es auszuprobieren!!!
Hier mal der Source code der guestbook.php:
PHP
<? ### Gästebuch Anfang ### ?>
<title>Gästebuch</title>
<div align="center">[b]<? echo "<a href=\"eintrag.php\"><font color=\"$linkfarbe\">Eintrag verfassen</a></font>"; ?>[/b]</div>
<?php
$dbh=mysql_connect("localhost","****","********");
mysql_select_db("gb",$dbh);
// hier musst du dann eine verbindung zur datenbank herstellen, und die entsprechenden variablen einfügen (pw, username, datenbankname etc)
$sgl ="SELECT
id,
name,
email,
www,
eintrag
FROM
gb
ORDER BY
id DESC;";
$result = mysql_query($sgl) OR die(mysql_error());
echo "<div align=\"center\">[b]
Es sind ".mysql_num_rows($result)."\nEinträge im Gästebuch[/b]</p></div>\n";?>
<? while($row = mysql_fetch_assoc($result)) { ?>
<?
echo "<div align=\"center\">";
echo "<table border=\"1\" width=\"60%\">";
echo "<tr>";
echo "<td align=\"left\" bgcolor=\"$infofarbe\">[b]Nr:[/b]\n";
echo $row['id'];
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"left\" bgcolor=\"$infofarbe\">[b]Name:[/b]\n";
echo $row['name'];
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"left\" bgcolor=\"$infofarbe\">[b]E-Mail:[/b]\n";
echo "<a href=\"mailto:".$row['email']."\">schreiben</a>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"left\" bgcolor=\"$infofarbe\">[b]Homepage:[/b]\n";
echo " <a href=\"".$row['www']."\">Hier klicken</a>";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"center\" bgcolor=\"$txtareafarbe\">";
echo $row['eintrag'];
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</div>";
echo "
";
}
?>
<div align="center">[b]<? echo "<a href=\"eintrag.php\"><font color=\"$linkfarbe\">Eintrag verfassen</a></font>"; ?>[/b]</div>
<?
echo "<body bgcolor=\"$hgfarbe\">";
echo "<div align=\"center\">[b]
Es sind ".mysql_num_rows($result)."\nEinträge im Gästebuch[/b]</p></div>\n";
?>
<body onselectstart="return false" oncontextmenu="return false" ondragstart="return false">
<? ### Seitenangaben ?>
<div align="center">
<?php
$db = mysql_connect('localhost','*****','*****');
mysql_select_db('gb', $db);
$sql = "select name, email, eintrag from gb";/* Da die Daten aus einer Datenbank kommen sollen, wird hier eine Verbindung zur Datenbank erstellt. In der Variablen $sql wird der Querycode gespeichert, allerdings jetzt noch ohne dem limit-Statement. */
if (!isset($_REQUEST['Total']))
{
$result = mysql_query($sql);
$Total = mysql_num_rows($result);
unset($result);
}
else
{
$Total = $_REQUEST['Total'];
}/* Das Script muss berechnen können wieviele Links zum Blättern angezeigt werden sollen. Für diese Berechnungen braucht das Script die genaue Zahl der Datenbankeinträgen die der Query zurückgeben würde, z.B. 300 Waren aus einem Laden. Mit der Funktion mysql_num_rows() wird errechnet wieviele das sind. Das ist auch der Grund warum das limit-Statement noch nicht hinzugefügt wurde. */
if (!isset($_REQUEST['Seite']))
{
$Seite = 1;
}
else
{
$Seite = $_REQUEST['Seite'];
}
if ($Seite > $Total) $Seite = $Total;
/* Die Variable $Seite kann vom Besucher kommen. Wenn noch kein Wert da ist, befindet sich der Besucher noch auf der ersten Seite. Deshalb wird, wenn $_REQUEST['Seite'] nicht gesetzt wurde, die Variable $Seite automatisch auf 1 gesetzt.*/
$ProSeite = 15;
$LinksZahl = 7;
$SeitenZahl = ceil($Total/$ProSeite);
if ($LinksZahl % 2 == 0) $LinksZahl++;
$NumerischeLinks = ($LinksZahl - 1) / 2;
$url = $_SERVER['PHP_SELF'];/* In diesem Abschnitt werden einige, sehr wichtige, Variablen initialisiert. Sie müssen aber nur die ersten zwei davon nach Belieben ändern. Die Variablen haben folgende Zwecke:
- $ProSeite: Anzahl der Datenbankeinträge (z.B. News oder Warenpreise) pro Seite angezeigt werden müssen (können Sie nach Belieben ändern)
- $LinksZahl: Anzahl der numerischen Links die es geben soll (z.B. 5). Diese Zahl soll ungerade sein (wenn das nicht so ist, dann erhöht das Script diese Zahl automatisch um eins). Die Links "Anfang", "zurück", "weiter" und "Ende" werden hier nicht mitgerechnet.
- $SeitenZahl: errechnet automatisch wieviele Seiten es gibt. Dies geschieht indem das Resultat von der Teilung "Anzahl der Datenbankeinträge" geteilt durch "Anzahl der Treffer die pro Seite gezeigt werden" nach oben abzurunden.
- $NumerischeLinks: errechnet die Zahl der Links die links und rechts von der aktuellen Seite stehen (z.B. wenn der Besucher auf Seite 5 sich befindet, stehen links die Links für die Seiten 2, 3 und 4 und rechts davon die Links für die Seiten 6, 7 und 8). Die Zahl wird wie folgt berechnet: "die Zahl der Navigationslinks die gezeigt werden sollen minus 1 und danach geteilt durch 2".
- $url: die Links verweisen immer zur selben URL */
$sql .= " limit ". ($Seite * $ProSeite - $ProSeite) .", ".$ProSeite;
$result = mysql_query($sql);
mysql_close($db);/* Hier wird das limit-Statement am Query hinzugefügt und somit werden dann die zu zeigende Datensätze aus der Datenbank geholt, wonach die Verbindung zur Datenbank geschlossen werden kann. Das limit-Statement braucht zwei Parameter: der Startindex (wobei von null angefangen wird zu zählen) und die Anzahl der Datensätze die geholt werden müssen. Der erste Parameter ergibt sich aus folgender Berechnung: $Seite mal $ProSeite minus $ProSeite (Beispiel um zweiter Satz von 15 Datensätze zu sehen: 2 * 15 - 15 = 15. */
$AuslassungszeichenVorn = '';
$AuslassungszeichenHinten = '';
$AnfangLink = '';
$EndeLink = '';
$ZurueckLink = '';
$WeiterLink = '';
$SichtbareLinks = '';/* Hier werden die Variablen für die einzelne Links deklariert. Sie werden erst nachher einen Wert bekommen um dann am Ende auf dem Bildschirm gezeigt zu werden. Wenn ein Link nicht vorkommen soll (z.B. der "Ende-Link" wenn der Besucher auf der letzten Seite ist), dann wird diese Variable leer gelassen und wird der Link nicht gezeigt. */
if ($SeitenZahl > 1)
{
$Nr = $Seite - $NumerischeLinks;
$Anzeige = 0;
while ($Nr <= $SeitenZahl)
{
if ($Nr < 1) {$Nr++; continue;}
elseif ($Nr > $Seite + $NumerischeLinks) {break;}
if ($Nr == $Seite) {$SichtbareLinks .= " $Nr";}
else {$SichtbareLinks .= ' [url=''.$url.'?Seite='.$Nr.'&Total='.$Total.'']'.$Nr.'[/url]';}
$Nr++;
$Anzeige++;
}
}/* Dieser Code sorgt dafür, dass die numerischen Links hinzugefügt werden. Das ist nur notwendig wenn es mehr als eine Seite gibt. Der Code fängt an mit der Initialisierung von zwei Variablen. $Nr ist gleich $Seite minus $NumerischeLinks. Diese Variable wird dazu verwendet die Schleife, die die einzelne Links generiert, nur so oft durchlaufen zu lassen wie nötig. Die Variable $Anzeige wird verwendet um später noch nachgehen zu können wieviele Links auf dem Bildschirm gezeigt werden.
Die Schleife wird so oft wiederholt bis $Nr größer ist als $SeitenZahl (in der Praxis wird die Schleife schon früher beendet). Wenn $Nr kleiner ist als 1, dann wird $Nr um eins erhöht und fängt die Schleife mit dem nächsten Durchlauf an. Wenn $Nr größer ist als $Seite plus $NumerischeLinks (z.B. 9 ist größer als 5 + 3), dann müssen keine weiteren Links mehr generiert werden und wird die Schleife abgebrochen.
Jetzt muss man die Links generieren. Dabei ist es unsinnig den Besucher einen Link zu zeigen der zur Seite führt auf dem er sich befindet. Wenn ein Besucher sich z.B.auf Seite 4 befindet, währe es sinnlos ihm einen zu dieser Seite anzubieten. Deshalb wird das Script einen Unterscheid machen: wenn $Nr gleich $Seite ist, dann wird kein Link ausgegeben, sondern einfach die Seitennummer. Ansonsten wird ein Link generiert der die Variablen $Nr und $Total an der aktuellen Adresse ($url) hängt. */
if ($Seite > 1)
{
$AnfangLink = ' [url=''.$url.'?Seite=1&Total='.$Total.'']Anfang[/url]';
if ($Seite - 1 > 1)
{
$ZurueckLink = ' [url=''.$url.'?Seite='.($Seite-1).'&Total='.$Total.'']Zurück[/url]';
}
}/* In diesem Abschnitt werden die Links "Anfang" und "zurück" hinzugefügt. Dies soll nur so sein wenn $Seite größer ist als 1. Der Anfang-Link wird dann automatisch hinzugefügt. Der zurück-Link wird nur hinzugefügt wenn $Seite minus eins auch größer ist als 1 (dies ist der Fall wenn der Besucher sich auf Seite 2 befindet, wobei ein zurück-Link in Kombination mit einem Anfang-Link überflüssig ist).
Beachten Sie, dass im obigen Code vor jedem Link noch steht. Dies erzeugt eine Leerstelle mit n-Breite (der Breite des Buchstaben 'n'). Somit "kleben" die Links nachher nicht aneinander. Der Unterschied mit liegt darin, dass die einzelnen Links nicht auf einer Linie gezwungen werden wenn unzureichend Platz da ist. Natürlich können Sie das nach Belieben ändern. */
if ($Seite < $SeitenZahl)
{
$EndeLink = ' [url=''.$url.'?Seite='.$SeitenZahl.'&Total='.$Total.'']Ende[/url]';
if ($Seite + 1 < $SeitenZahl)
{
$WeiterLink = ' [url=''.$url.'?Seite='.($Seite+1).'&Total='.$Total.'']Weiter[/url]';
}
} /* Genau wie Anfang- und zurück-Links gibt es auch die weiter- und Ende-Links. Diese werden nach dem gleichen Prinzip hinzugefügt: wenn $Seite kleiner ist als $SeitenZahl, dann befindet der Besucher sich nicht auf der letzten Seite. Der Ende-Link wird dann automatisch hinzugefügt. Der weiter-Link wird nur hinzugefügt wenn $Seite plus eins kleiner ist als $SeitenZahl, dann befindet der Besucher sich noch nicht auf der vorletzten Seite und wird der weiter-Link auch hinzugefügt. */
if ($Seite - $NumerischeLinks > 1)
{
$AuslassungszeichenVorn = ' ...';
}
if ($Seite + $NumerischeLinks < $SeitenZahl)
{
$AuslassungszeichenHinten = ' ...';
}/* Jetzt werden noch die Variablen für die Auslassungszeichen (...) initialisiert. Diese werden dazu verwendet um die numerischen Angaben der Seiten zu trennen von die "zurück-" und "weiter-links". Diese dürfen nur verwendet werden wenn es mehr Seiten gibt als Links zur Anzeige davon.
Die Berechnung erfolgt so:
- für das Auslassungszeichen links (Beispiel: '... 3 4 5 6 7'): wenn $Seite minus $NumerischeLinks größer ist als 1, dann gibt es mindestens einen Link an der linken Seite der nicht sichtbar ist, und muss also das Auslassungszeichen links sichtbar sein.
- für das Auslassungszeichen rechts (Beispiel: '3 4 5 6 7 ...'): wenn $Seite plus $NumerischeLinks kleiner ist als $SeitenZahl, dann gibt es mindestens einen Link an der rechten Seite der nicht sichtbar ist, und muss also das Auslassungszeichen rechts sichtbar sein. */
$Nav = $AnfangLink;
$Nav .= $ZurueckLink;
$Nav .= $AuslassungszeichenVorn;
$Nav .= $SichtbareLinks;
$Nav .= $AuslassungszeichenHinten;
$Nav .= $WeiterLink;
$Nav .= $EndeLink;
print $Nav;/* Hier werden die einzelne Links (wovon die HTML-Codes in verschiedene Variablen gespeichert sind) zusammen gesetzt in der Variable $Nav. Dieser wird dann auf dem Bildschirm gezeigt. Dieses Stück Code können Sie an beliebiger Stelle auf Ihrer Seite stellen, jedoch muss es unter dem anderen PHP-Code stehen. */
if ($SeitenZahl > $Anzeige)
{
print "
Seiten: $SeitenZahl
Gehe zu Seite
";
echo '
<form action="'.$url.'" method="post">
<input type="text" size="3" name="Seite"></input>
<input type="submit" value="Los"></input>
<input type="hidden" name="Total" value="'.$Total.'"></input>
</form>
';
}/* Zum Schluss soll noch das Formular hinzugefügt werden, so dass der Besucher eine beliebige Seite besuchen kann. Hierzu muss er dann einfach nur eine Zahl angeben. Natürlich hat dies nur Sinn wenn es mehr Seiten gibt als es Navigationslinks gibt. Die Zahl der Navigationslinks wurde vorher schon gespeichert in der Variablen $Anzeige. Wenn $SeitenZahl größer ist als $Anzeige, dann soll das Formular hinzugefügt werden. Das Formular hat einem Submit-Button, ein Textfeld für die Variable Seite und ein verstecktes Feld für die Variable Total. Natürlich werden auch hier die Daten an der selben URL geschickt.*/
?>
</div>
Alles anzeigen
Wäre supi wenn sich das mal jemand anschauen könnte
THX
Burgerking