Selbsterstellte Gästebuch, Neue Seite ab x Seiten

leon_20v

Erfahrenes Mitglied
Hallo,

ich habe folgendes Gästebuch erstellt:

PHP:
<html>
<head>
<title>G&auml;stebuch</title>
<link rel="stylesheet" type="text/css" href="layout.css" />
</head>
<body>
<?php
//MySQL Connection
include_once ("connect_to_mysql.php");

$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC");
echo '
<h1>G&auml;stebuch</h1><br><br>';

while($row = mysql_fetch_assoc($datenholen))
{
echo '
<fieldset>
<legend>'.$row["name"].' am '.$row["date"].'</legend>
<label>'.$row["text"].'</label>
</fieldset><br>';
}
echo '<br>';
include_once ("guestbook-eintragen.html");
?>
</body>
</html>

Ich hätte jetzt gern, dass nach 10 Einträgen eine neue Seite gemacht werden soll. Wie mache ich das am blödsten?

Mit einer Schleife und einem Switch?
Wenn ja welche Schleife würdet ihr verwenden?
Wie heißt den der Befehl, das ich erst mal nur 10 Einträge aus der Datenbank will?

Hmm aber ich glaub da gibts sicher eine bessere Methode das zu erstellen?
 
Danke für die Antwort,

da ich erst anfange mit PHP und mySQL, bist du bitte so lieb und sagst mir noch ein paar Worte dazu?
 
ja okay das kenne ich ja doch schon :) nur nicht daran gedacht,

nur mir ist nicht ganz klar, wie ich das dann verpacke, das der mir eben nach den 10 eine neue seite macht
 
Ich wollte eh schon lange eine solche Klasse für mein Wiki schreiben.

PHP:
<?php
$conn = mysql_connect('localhost', 'root', '') or die  ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db('test') or die  ("Kann DB nicht auslesen: ".mysql_error());

//Aktuelle Seitennummer aus dem $_GET auslesen
$actPageNr = ($_GET['nr']) ? $_GET['nr'] : 0; 

//Definitionen
$sql = "SELECT * FROM nav";
$itemsPerPage = 5;

//Mein Navigator anlegen (Die Klasse ist weiter unten definiert)
$myNav = new Navigator($sql, $itemsPerPage);
//Aktuelle Seite setzen
$myNav->setPageNr($actPageNr);

//Zu Testzwecken geb ich ma das generierte SQL aus, im normalfall kann man damit die Daten abrufen
echo $myNav->getActSql();
echo "<hr />";

//Aufbau der Navigation
//Erste/Vorhergehende Seite -Links einfügen
if(!$myNav->bof()){
    $navEntries[] = "<a href='{$_SERVER['PHP_SELF']}?nr=".$myNav->getFirstNr()."'>&lt;&lt;</a>";
    $navEntries[] = "<a href='{$_SERVER['PHP_SELF']}?nr=".$myNav->getPrevNr()."'>&lt;</a>";
}
//Pro Seite einen Link einfügen
foreach($myNav->getPageNumbers() as $nr){
    if($nr == $actPageNr){
        $navEntries[] = "<b>{$nr}</b>";        
    }else{    
        $navEntries[] = "<a href='{$_SERVER['PHP_SELF']}?nr={$nr}'>{$nr}</a>";
    }
}
//Nächste/Letzte Seite -Links einfügen
if(!$myNav->eof()){
    $navEntries[] = "<a href='{$_SERVER['PHP_SELF']}?nr=".$myNav->getNextNr()."'>&gt;</a>";
    $navEntries[] = "<a href='{$_SERVER['PHP_SELF']}?nr=".$myNav->getLastNr()."'>&gt;&gt;</a>";
}

//Alle Links mit ' | ' getrennt ausgeben 
echo implode(' | ', $navEntries);



/**
* @copyright    mpl by ERB software
*               All rights reserved
* @author       stefan.erb@erb-software.com
*/
Class Navigator{
    const C_DEFAULT_ITEMS_PER_PAGE = 10;

    protected $sql;
    protected $itemsPerPage;
    protected $pages = array();
    protected $index = array();
    protected $actPageNr;

    /**
     * Constructeur
     * @param $sql          String      SQL das die Daten angrenzt, ohne ; am Schluss
     * @param $itemsPerPage Integer     Anzahl Datensätze die pro Seite angezeigt werden sollen
     */
    public function __construct($sql, $itemsPerPage =C_DEFAULT_ITEMS_PER_PAGE){
        $this->sql = $sql;
        $this->itemsPerPage = $itemsPerPage;

        //Anzahl Datensätze ermitteln
        $sql = "SELECT COUNT(*) AS count_items FROM ({$this->sql}) AS data_for_count";
        $result = mysql_query($sql);
        $countItems = mysql_result($result, 0, 0);
        mysql_free_result($result);
        
        //Die Seiten definieren-> array([pageNr] => [LIMIT-Start der DB])
        $this->pages = range(0, $countItems-1, $this->itemsPerPage); 
        $this->index = array_keys($this->pages);        
    }
    
    /**
     * Die aktuelle Seitennummer setzen 
     * @param $pageNr       Integer
     */
    public function setPageNr($pageNr){
        $this->actPageNr = $pageNr;        
    }

    /**
     * Ein SQL ausgeben mit dem man die Daten abrufen kann
     * @retrun              String      SQL-Statement
     */
    public function getActSql(){
        return  "{$this->sql} LIMIT {$this->pages[$this->actPageNr]}, {$this->itemsPerPage}";
    }
    
    /**
     * @return              Array<Integer>  Gibt ein Array mit allen Seitennummern aus
     */
    public function getPageNumbers(){
        return $this->index;        
    }
    
    /**
     * Begin of File
     * @param $pageNr       Integer     Optional: zu prüfende Nr
     * @return              Boolean     Gibt an ob der Zeiger auf dem ersten Element steht
     */
    public function bof($pageNr = false){
        if(!$pageNr) $pageNr = $this->actPageNr;
        return $pageNr <= $this->getFirstNr();
    }
    
    /**
     * End of File
     * @param $pageNr       Integer     Optional: zu prüfende Nr
     * @return              Boolean     Gibt an ob der Zeiger auf dem letzten Element steht
     */
    public function eof($pageNr = false){
        if(!$pageNr) $pageNr = $this->actPageNr;
        return $pageNr >= $this->getLastNr();
    }
    
    /**
     * @return              Integer     Erste Seitennummer
     */
    public function getFirstNr(){
        return reset($this->index);
    }

    /**
     * @return              Integer     Letzte Seitennummer
     */
    public function getLastNr(){
        return end($this->index);
    }
    
    /**
     * @return              Integer     Nächste Seitennummer (false falls wir bereits am Ende sind)
     */
    public function getNextNr($pageNr = false){
        if(!$pageNr) $pageNr = $this->actPageNr;
        $nextNr = ((!$pageNr) ? $this->actPageNr : $pageNr) + 1;
        return ($this->eof($nextNr)) ? false : $nextNr;
    }

    /**
     * @return              Integer     Vorhergehende Seitennummer (false falls wir bereits am Anfang sind)
     */
    public function getPrevNr($pageNr = false){
        if(!$pageNr) $pageNr = $this->actPageNr;
        $prevNr = ((!$pageNr) ? $this->actPageNr : $pageNr) - 1;
        return ($this->bof($prevNr)) ? false : $prevNr;
    }
}
?>
 
oha ist das komplex :)

ob ich das schaffe das einzubauen, ich bezweifle es mit meinem jetzigen wissensstand sehr :(
ich chech ja die hälfte nicht:)

jetzt hab ich mir was überlegt:

eigentlich reicht es mir ja wenn ich die letzten 30 Einträge auf 3 Seiten mit jeweils 10 Einträgen anzeigen lassen kann.

kann ich das dann nicht so machen?:

Erste Page:
PHP:
$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC Limit 10");
.
.
.

Zweite Page
PHP:
$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC LIMIT 11,20");

Dritte Page
PHP:
$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC LIMIT 21,30" );

Vierte Page, alle anderen dann (könnte ne lange liste werden, allerdings glaub ich nicht, das es soviele werden)
PHP:
$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC 31,*");

und das dann mit $_GET und ner IF abfrage****
 
Zuletzt bearbeitet:
Grüße,

du machst es dir viel zu kompliziert (da kommt viel zu viel Code raus und letztendlich viel zu wenig Überblick). Wenn du dir das mal genau anguckst, handelt es sich bei deinem Limit-Problem jeweils bei dem ersten Wert bzgl. der Nachfolgenden um eine Reihe (zweiter Wert ist nahezu äquivalent).

als Beispiel zur Berechnung der 1. Reihe (y sei dein Ergebnis):
y=x*10+1;
als Beispiel zur Berechnung der 2. Reihe (y sei dein Ergebnis):
y=2x;

Dabei ist zu beachten, dass das x aus der ersten Gleichung gleich dem x aus der zweiten ist....
Soweit zur Alternative, ansonsten hat Yaslaw dir ja schon ein sehr detailiertes Skript zur Verfügung gestellt.
 
Mein Script ist direkt anwendbar. Kopier es mal vollständig in eine Datei, passe im Zeile 9 das SQL an und am Anfang die Connection auf deine DB und prüfe es mal....
 
@alex-T

ich habs versucht, ich versuche es jetzt schon ewig, nur irgendwie ist der wurm drinn :(

PHP:
if($_GET['inc']=="1") { 
$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC LIMIT 0,10"); }
 else {
	 $count1=2;
	 while ( $count1 <= $AnzahlS )
	 		{ if ($_GET['inc']== $count1) { 
			
			$datenholen = mysql_query("SELECT * FROM `gb` ORDER BY `date` DESC LIMIT (10*($count1-1)),(10*($count))" );
			$count1++; } } }

des muss doch so gehen****

also "?inc=1" funktioniert wunderbar doch bei "?inc=2" kommt folgender fehler:

Code:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /customers/veritas-fluctuare.de/veritas-fluctuare.de/httpd.www/Gaestebuch/gaestebuch.php on line 92

irgendwie ist da ein fehler davor... :( weil vor dieser zeile 92 kommt der code von oben

Achso die Variable $AnzahlS wird immer aufgerundet mit ceil, somit kanns hier keine probleme geben
 
Zuletzt bearbeitet:
Zurück