Tutorial: Blaetterfunktion fuer Gb.

nicholas

Grünschnabel
Hi, ich bin noch ziemlich neu auf dem Gebiet PHP und brauche mal Hilfe..
Ich habe mir grade ein bissel nach dem Tutorial hier auf der Seite die Blaetterfunktion eingebaut. leider habe ich da 2 Probleme.. Irgendwo wird da scheinbar was falsch berechnet, zum einen faengt das Script statt (wie ueblich) mit einer Seite "0" an und nicht mit "1". die Seitenzahl ab 1 wird aber irgendwie trotzdem richtig berechnet, nur die letzte Seite ist halt leer und da ist ne zusaetzliche Seite "0".
Problem 2: Das script zeigt immer "Seite 1 - Einträge von 5 bis 10" an dabei sollte da eigentlich 6-10 stehen da ja 5 posts pro page sind..

so hier jetzt mal der link zum gb: HIER

und hier der Code:

PHP:
<html>
<head>
<title>gb</title>
</head>
<body>
<?PHP
error_reporting("E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR");
include("mysql.php");
if($page == "")
 {
  $page = "1";
 }
$proseite=5;
$db = mysql_connect ($host,$username,$password);
mysql_select_db ($database);
$sql = "SELECT * FROM gbook";
$result = mysql_query($sql,$db);
$number = mysql_num_rows($result);
$seiten=floor($number/$proseite);
$start=$page * $proseite;
$sql="SELECT * FROM gbook LIMIT $start,$proseite";
$result = mysql_query($sql,$db);
$ende = $start + $proseite;
if ($ende>$number)
 {
  $ende = $number;
 }
echo "Zur Zeit sind $number Einträge im Gästebuch <BR> \n";
echo "Seite $page - Einträge von $start bis $ende <BR> \n";
while ($row = mysql_fetch_array($result))
 {
  $datum=$row["datum"];
  $navn=$row["name"];
  $email=$row["email"];
  $text=$row["text"];
  $text = nl2br ( htmlentities ( stripslashes ($text)));
   echo "<font face='Verdana' size='2' color='#666666'>
        <b>
        <a href='mailto:$email'>$navn</a></b> $datum</i></font>
        <font face='Verdana' size='1' color='#666666'>
        <br>$text<br><br>
        </font>";
 }
if ($page>0)
 {
  $i=$page-1;
  echo "<a href='gb.php?page=$i'>&lt;</a>&nbsp;";
 }
for($i=0; $i<=$seiten; $i++)
 {
  if ($i==$page)
   {
    echo $i."&nbsp;";
   }
  else
   {
    echo "<a href='gb.php?page=$i'>$i</a>&nbsp;";
   }
 }
if ($page<$seiten)
 {
  $i=$page+1;
  echo "<a href='gb.php?page=$i'>&gt;</a>";
 }
?>
</body>
</html>

Ich hoffe jemand kann mir helfen.
 
Ich hab keine Ahnung ob das was hilft, aber ich hab eine ähnliche(ganz entfernt ähnliche) selber gemacht. und zwar wenn du das hier

PHP:
$seiten=floor($number/$proseite);

durch das hier ersetzt

PHP:
$seiten=ceil($number/$proseite);

Wenn er 11 Einträge findet, dann rechnet er bei dem Beispiel 11 durch 5 also irgendwas mit 2,2, da er abrundet zeigt er nur zwei Seiten an, also wird das letzte (Nummer 11) nicht angezeigt.

Und bei dem hier

PHP:
for($i=0; $i<=$seiten; $i++) 
{ 
  if ($i==$page) 
   { 
    echo $i."&nbsp;"; 
   } 
  else 
   { 
    echo "<a href='gb.php?page=$i'>$i</a>&nbsp;"; 
   } 
}

musst du das hier:

PHP:
for($i=0; $i<=$seiten; $i++) 
{ 
  $itemp = $i + 1;
  if ($i==$page) 
   { 
    echo $itemp."&nbsp;"; 
   } 
  else 
   { 
    
    echo "<a href='gb.php?page=$i'>$itemp</a>&nbsp;"; 
   } 
}

machen, da er sonst erst die Seite 0 ausgibt und dann erst bei 1 anfängt. Mehr fällt mir dazu im Moment nich ein. Hoffe es hilft was :)
 
Zuletzt bearbeitet:
Achso, sorry, dein zweites Problem mit dem von 5-10. Ich glaub das liegt hier dran:

PHP:
echo "Seite $page - Einträge von $start bis $ende <BR> \n";

Mach dadraus einfach:

PHP:
$tempstart = $start + 1;
$temppage = $page + 1;
echo "Seite $temppage - Einträge von $tempstart bis $ende <BR> \n";
 
Also ICH habe aus dem

PHP:
for($i=0; $i<=$seiten; $i++)
das hier gemacht:

PHP:
for($i=0; $i<$seiten; $i++)
.
Also einfach das '=' entfernt, sonst hat er mir bei 4 Einträgen immer noch eine leere Seite 3 hinzugefügt. So macht er immer genau soviele, wie auch wirklich Seiten existieren.

Ich habe auch noch eine Frage: Wie mache ich, dass auf seite 1 die neusten Beiträge erscheinen, und auf Seite 2, 3, 4... die alten? Also genau umgekehrt?
 
Zuletzt bearbeitet:
Ich habe auch noch eine Frage: Wie mache ich, dass auf seite 1 die neusten Beiträge erscheinen, und auf Seite 2, 3, 4... die alten? Also genau umgekehrt?
Dazu musst du lediglich den MySQL-Query etwas modifizieren, und zwar so:
PHP:
"SELECT FROM blabla ORDER BY id DESC"
DESC (=descending) bedeutet absteigend. (theoretisch kannst du auch den timestamp verwenden, so du denn einen benutzt, aber ich verwende aus Gewohnheit immer die ID ;))
 
Ich hab mich schon gefrgat, wie ich nicht daran denken konnte ;)

Nur klappt das leider nicht. Wenn ich das einfüge, kommt dann folgender Fehler:

Warning: Supplied argument is not a valid MySQL result resource in /usr/www/htdocs/tschaer/sql/show.php on line 53

Diese Zeile 53 sieht so aus und hat irgendwie wohl etwas damit zu tun:

PHP:
while ($row = mysql_fetch_array($result)) {
Was stimmt denn da nicht?
Ohne das ORDER BY id DESC geht es nämlich, nur eben nicht in der gewünschten Reigenfolge. Ach ja: natürlich existiert das Feld 'id' in meiner SQL-Datenbank.
 
Es hat nun doch geklappt. Scheinbar muss man darauf achten, wo genau man das ORDER BY id in der Zeile der SQL-Abfrage einsetzt... komisch... aber Hauptsache es funktioniert. Danke für die Hilfe und sorry dass ich hier den Thread eines anderen Users für meine Fragen benutzt habe :rolleyes:
 
Zurück