Seitenwechsel beim Gästebuch

Hallo Experten!

Ich habe mir ein kleines Gästebuch zusammengeschrieben. Es klappt auch nun weiss ich aber nicht wie ich nach 10 Einträge die Seite wechseln kann.
Ich kenn mich mit php und mysql eingendlich nicht gut aus, aber möchte mir gern ein kleine Gästebuch selber schreiben.
Also wie soll das ablaufen wenn mehr als 10 Einträge gemacht worden sind?
Ich kann mir doch nur gewisse Einträge anzeigen lassen von 1 bis 10 oder so?
Und wie soll das dann mit den phpSeiten gemacht werden muss ich dann immer manuel eine neue Seite machen? oder sollte das automatisch in php gemacht werden?
Rufe ich dann immer nur die gleiche Seite auf (gaestebuch.php) wo ich dann blättern kann oder wird da immer eine neue Seite aufgerufen?

danke für eure Tipps
mfg Andi

hallöchen !

also, ein kleiner denkanstoss zu später/früher stunde !
du legst also die anzahl der auf einer seite darzustellenden beiträge fest (in deinem fall also anscheinend 10)
du holst dir aus der datenbank die ersten 10 beiträge
$sql=„SELECT * FROM dein_table ORDER BY sortierkriterium DESC LIMIT startwert,anzahl“; (startwert am anfang 1, anzahl 10)
beim aufruf des links „nächste seite“ (zb) gibst du ihm eine variable mit von der er zu abfragen beginnen soll, im fall der seite 2 also 11
(also zb. so:

Hallöle,

Ich kann meinem Voredner nur Zustimmen.
Ich rate Dir, Dich mit MySQL zu beschäftigen, dass erspart Dir oft sehr umständliche PHP Programmierarbeit. Denn vieles geht mit den direkten MySQL Befehlen viel einfacher, unkomplizierter und vor allem schneller. warum immer erst alle Daten abfragen und dann mit PHP sortieren Formatieren usw., wenn es mit MySQL schon von vorenherein geht.

Wie es immer so schön heisst:„Man soll das Rad nicht neu erfinden“. :smile:

Bei Deiner Lösung solltest Du nicht vergessen, die Links, welche zu den weiterführenden Seiten führen zu programmieren.
Am besten lässt Du die von PHP erstellen.

hi danke für deine schnelle Antwort. Habe gester 10 Minuten zu Früh Feierabend gamacht, dachte eigendlich nicht mehr das ich noch eine Antwort bekommen:smile: zu dieser Zeit.

Ich habe das ganze schon in mysql gemacht mit folgenden Felder
ID auto_increment
Datum
name
email
komment

Also habe alles sogemacht, und hat auch geklappt. Aber mit der Abfrage habe ich da so meine Probleme. Ich habe das ganze so gemacht, ich glaube aber nicht das das die beste Lösung ist.

<?php $ID =$_POST[ID];
$datum =$\_POST[datum]; if ($start == 0) $start = 0; $anzahl = 10; $db\_link = mysql\_connect("localhost", "", "") or die(mysql\_error()); mysql\_select\_db("datenbank",$db\_link); $result = mysql\_query("SELECT \* FROM gaestebuch ORDER BY datum DESC LIMIT $start,$anzahl"); while ($ds = mysql\_fetch\_array($result)) { echo ""; echo " "; echo " "; echo "Vorname".$ds[name].""; echo "E-mail".$ds[email].""; echo "Kommentar".$ds [komment].""; echo "Aktuelle Datum".$ds [datum].""; echo ""; } ?\> das ganze habe ich dann runter kopiert und das gleich dann mit der mit der Abfrage ob $start 11 ist gemacht dann spring er mir schon auf die andere Seite aber ich glaub das das so nicht korrekt ist oder? Und wie geht das dann weiter wenn ich mehrere Einträge sind so 40 oder 50 dann muss ich doch den Link immer manuel angeben oder? Soll ich da so was wie ein Zähler einbauen? Sorry aber wie isch schon sagte php ist nicht so mein Ding hoffe ich habe mich klar ausgedrückt und du kannst mir da noch ein Tipp geben mfg andi > hallöchen ! > > also, ein kleiner denkanstoss zu später/früher stunde ! > du legst also die anzahl der auf einer seite darzustellenden > beiträge fest (in deinem fall also anscheinend 10) > du holst dir aus der datenbank die ersten 10 beiträge > $sql="SELECT \* FROM dein\_table ORDER BY sortierkriterium DESC > LIMIT startwert,anzahl"; (startwert am anfang 1, anzahl 10) > beim aufruf des links "nächste seite" (zb) gibst du ihm eine > variable mit von der er zu abfragen beginnen soll, im fall der > seite 2 also 11 > (also zb. so:

Hi dank dir für den Tipp

aber wie ich schon im unterern Beitrag schrieb, ich habe da keine Ahnung wie ich das machen soll. Natürlich wer deine Lösung am besten
Vielleicht hast du ein Tipp oder eine gute URL für mich wos so was gut beschrieben ist
ein dankeschön schon mal im voraus
mfg andi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo andi !
pffuu… wo soll man da anfangen…
aber ich werds probieren :
zuerst solltest du dir mal alle datensätze auslesen damit du weisst wieviel da sind, damit du dir die seitenanzahl ausrechnen kannst, das machst du so:
if ($conn) {
$sql=„SELECT * FROM gaestebuch“;
$result = mysql_query($sql, $conn) or die (mysql_error());
$gesamt=mysql_num_rows($result);
$seiten=ceil($gesamt/$anzahl); // ganze zahl draus machen

} else echo „error, bla bla…“;

so… jetzt hast du die seitenanzahl -> $seiten
jetzt musst du dir die aktuelle seite berechnen, wenn am anfang $start 0 ist, ist die aktuelle seite klarerweise 1, klar ?

if ($start==0) $aktseite=1; // die Seite 0 gibts ned, daher machen wir 1 draus
if ($off>0) {
$aktseite=$start/$anzahl+1; //berechnen der aktuellen Seite
}

so… und jetzt kannst du den link zur nächsten seite anzeigen, ich möchte nur anmerken, dass das eine navigation ohne seitennummern wird, mit seitennummern wäre es jetzt ein bischen zu „umfangreich“ .
also:

echo "Seite $aktseite von $seiten  ";

// abfragen ob nächste und vorherige seiten auch dargestellt werden soll
if($start>=$anzahl) // anzeigen der vorherigen seite nur wenn es auch ein vorherige gibt !
echo"vorherige Seite   ";

if($anzahl==$anz || $newsbeitraegenächste Seite

";

anmerkung zu der variablen $anz:
die holst du dir aus der mysql abfrage, die du unten bereits geschrieben hast, einfach nach der abfrage unten dazufügen:
$anz=mysql_num_rows($result);
so… ich hoffe du kennst dich „halbwegs“ aus, und ICH hoffe, ich habe keine variablennamen durcheinandergebracht, ich hab das aus meinem script genommen und dementsprechend adaptiert.
gutes gelingen
grüsse
wiesi

ps: links zu php sind doch glaub ich ehh unten in der brettbeschreibung angeführt oder ?

hi danke für deine schnelle Antwort. Habe gester 10 Minuten zu
Früh Feierabend gamacht, dachte eigendlich nicht mehr das ich
noch eine Antwort bekommen:smile: zu dieser Zeit.

Ich habe das ganze schon in mysql gemacht mit folgenden Felder
ID auto_increment
Datum
name
email
komment

Also habe alles sogemacht, und hat auch geklappt. Aber mit der
Abfrage habe ich da so meine Probleme. Ich habe das ganze so
gemacht, ich glaube aber nicht das das die beste Lösung ist.

<?php : $ID =$_POST[ID];
$datum =$\_POST[datum]; if ($start == 0) $start = 0; $anzahl = 10; $db\_link = mysql\_connect("localhost", "", "") or die(mysql\_error()); mysql\_select\_db("datenbank",$db\_link); $result = mysql\_query("SELECT \* FROM gaestebuch ORDER BY datum DESC LIMIT $start,$anzahl"); while ($ds = mysql\_fetch\_array($result)) { echo "id=\"zahler\" value= \"1\"\>"; echo " "; echo " "; echo "Vorname".$ds[name].""; echo "E-mail".$ds[email].""; echo "Kommentar".$ds [komment].""; echo "Aktuelle Datum".$ds [datum].""; echo ""; } ?\> das ganze habe ich dann runter kopiert und das gleich dann mit der mit der Abfrage ob $start 11 ist gemacht dann spring er mir schon auf die andere Seite aber ich glaub das das so nicht korrekt ist oder? Und wie geht das dann weiter wenn ich mehrere Einträge sind so 40 oder 50 dann muss ich doch den Link immer manuel angeben oder? Soll ich da so was wie ein Zähler einbauen? Sorry aber wie isch schon sagte php ist nicht so mein Ding hoffe ich habe mich klar ausgedrückt und du kannst mir da noch ein Tipp geben mfg andi > hallöchen ! > > also, ein kleiner denkanstoss zu später/früher stunde ! > du legst also die anzahl der auf einer seite darzustellenden > beiträge fest (in deinem fall also anscheinend 10) > du holst dir aus der datenbank die ersten 10 beiträge > $sql="SELECT \* FROM dein\_table ORDER BY sortierkriterium DESC > LIMIT startwert,anzahl"; (startwert am anfang 1, anzahl 10) > beim aufruf des links "nächste seite" (zb) gibst du ihm eine > variable mit von der er zu abfragen beginnen soll, im fall der > seite 2 also 11 > (also zb. so:

hallo wiesi

danke für die ausführliche Beschreibung sehr nett von dir
ojjjeee dachte nicht das dass so schwer ist habe mal alles eingebaut aber funkt nicht. Sollte das alles unter der mysql abfrage in der while Schleife hinein? Komme mit der if nicht klar //if ($conn) ist $conn eine Variable für die connection zur Datenbank?
aber lass mal ich hoffe ich kann das alles richtig einbauen
dank dir vielmals für deine bemühungen
mfg
andi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallöchen !

sorry… hatte vergessen die variable $conn auf deine umzudrehen, bei dir heisst die natürlich db_link
die abfrage aller vorhandener daten (if ($conn) … ) ist natürlich vorher, vor deiner eigentlichen abfrage (der 10 beiträge)
alles andere gehört vor der ausgabe der beiträge, also bevor du das array mit fetch_array () ausliest…
ich hoffe es ist jetzt etwas klarer ?

grüsse
wiesi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi ich noch mal
es klappt noch nicht ganz, mit vor und zurückblätter, aber das werde ich schon machen. Ich werde mir den ganzen Code noch mal genau anschauen und hoffe das ich daraus doch noch schlau werden:smile:
also vielen vielen dank für deine Behmühungen
bis dann
mfg andi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ich habe jetz alles so gemacht aber dass klappt nicht
Die Variable anzahl die ich mit den Link mitschicke erhöht sich nicht um eins
Habe das jetzt so gemacht

<?php $ID =$_POST[ID];
$datum =$\_POST[datum]; //$zahler =$\_POST[zahler] = 0; $start = 0; $anzahl = 2; $db\_link = mysql\_connect("localhost", "", "") or die(mysql\_error()); mysql\_select\_db("sternhuette",$db\_link); $sql="SELECT \* FROM gaestebuch"; ////////// $result = mysql\_query($sql, $db\_link) or die (mysql\_error()); /////////////////////////////// $gesamt=mysql\_num\_rows($result); $seiten=ceil($gesamt/$anzahl); if ($start==0) $aktseite=1; // die Seite 0 gibts ned, daher machen wir 1 draus if ($off\>0) { $aktseite=$start/$anzahl+1; //berechnen der aktuellen Seite } echo "Seite $aktseite von $seiten "; echo " "; //////////////////////////////////////// $result = mysql\_query("SELECT \* FROM gaestebuch ORDER BY datum DESC LIMIT $start,$anzahl"); ///////////////////////// $anz=mysql\_num\_rows($result); if($start\>=$anzahl) // anzeigen der vorherigen seite nur wenn es auch ein vorherige gibt ! echo"[vorherige Seite](%2524PHP_self?start=%2522.(%2524start-%2524anzahl).%2522) "; if($anzahl==$anz) // es soll keine "nächste Seite" geben, wenn es keine mehr gibt ! :smile: echo"[nächste Seite](%2524PHP_self?anzahl=%2522.(%2524start+%2524anzahl).%2522) "; echo "Anzahl = $anzahl"; echo " "; echo "Start = $start"; ////////////////////////////////////////////// while ($ds = mysql\_fetch\_array($result)) { //echo ""; echo " "; echo " "; echo " "; echo " Vorname".$ds[name].""; echo "E-mail".$ds[email].""; echo "Kommentar".$ds [komment].""; echo "Aktuelle Datum".$ds [datum].""; echo ""; //echo "Nummer".$ds [zahler].""; //echo "$anzahl"; //echo "$zahler"; //echo "[loeschen](%255C%2522loeschen.php?ID=%2524ds%255BID%255D%255C%2522)"; //echo "[andern](%255C%2522aendern.php?ID=%2524ID%255BID%255D%255C%2522)"; //echo "$datum"; } //[nächste Seite](eingabe.php?%2524start=11)[zurück](eingabe.php?%2524start=0) ?\> bei den Varialen $newsbeitraege if ($off\>0) { $aktseite=$start/$anzahl+1; Hier sollte sich anzahl um eins erhöhen oder aber wozu ist die Varibale $off den so erhöht sich anzahl nicht um eins oder? Habe es mit einer anderen Variante probiert funzt aber nichts Ich glaube ich verstehe was nicht Sorry mfg andi > [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo auch nochmal !

tja, die variable $off ist bei dir die variable $start
(wie ich gesagt habe, ich hoffe dass ich alle variablen umgedreht habe, anscheinend hatte ich die vergessen)

grüsse
wiesi

Hi
habe die schon mit $start umgewechselt gehabt, aber klappt trozdem nicht
ok ich gebe es jetzt auf
dank für deine ganze Bemühung

mfg

andi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ich misch mich auch ma ein :smile:)

Also nachdem ich seitenlangen *grins* Code durchforstet habe, ist mir eines aufgefallen. Ich kann mich irren, aber kann es sein das eine enscheidende Funktion „count()“ vergessen wurde?

Irgewndwie kommt man aus dem ganzen Code Wirrwar nicht mehr raus.

Ich denke bei der ersten Abfrage der DB, muss die SQL-Anweisunf folgendermaßen lauten:

$sql = "SELECT count( id ) FROM gaestebuch";

Mit count( Feldname ) liest man die Anzahl der Datensätze aus, welche keinen NULL-Wert habe.

Damit hast Du schonmal die Gesamtanzahl der Einträge.
Ich werde mal ein bisschen rumbasteln und Dir ein geeignete Lösung Posten. Bitte gedulde Dich noch solange.

Gruss Michael

Hi Michael
danke für dein Tipp ich glaube das Problem ist das wenn die Seite erneut aufgerufen wird $anzahl und $start immer wieder auf den gleichen Wert gesetzt werden wie ich sie als erstes oben vergieb oder nicht?
So kann ich mitschicken was ich will wenn die Variablen dann wieder den alten Wert bekommen. Aber vielleicht hast du da ne bessere Lösung
danke schon mal im voraus
mfg andi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich habs
Hallo nochmal,

ich glaub ich hab´s :smile:

<?php // Script erstellt Autoseitenwechsel<br />


// Anzeigen der Beiträge
$Seite = $\_REQUEST[Seite];

switch( $Seite )
{
 case 1:
 $sql = "SELECT \* FROM gaestebuch ORDER BY id DESC( 1, 10)";
 break;

 case 2:
 $sql = "SELECT \* FROM gaestebuch ORDER BY id DESC( 11, 21 )"
 break;

 case \>2:
 $AbBeitrag = $Seite \* 10 + 1;
 $BisBeitrag = $AbBeitrag + 10;
 $sql = "SELECT \* FROM gaestebuch ORDER BY id DESC( $AbBeitrag, $BisBeitrag );
 break;
}

// Ausgabe der Beiträge innerhalb der Seite
$Beitraege = mysql\_fetch\_array( mysql\_query( $Sql, $Connect );

print "Name: $Beitraege[Name]
;
print "Nachname: $Beitraege[Nachname]
";
// usw.



// HIER BEGINNT DIE SEITENZAHLERSTELLUNG

// DB-Connect und Abfrage
$Sql = "SELECT count( id ) FROM Tabelle"; // SQL-ABFRAGE, Rest sollte bekannt sein
$Ergebnis = mysql\_result( mysql\_query( $Sql, $Connect );


// Ausrechenen der Seitenanzahl
$AnzahlBeitraege = 10;
$SeitenZahl = ceil( $Ergebnis / $AnzahlBeiträge ); // ceil() nimmt nächstgrössere Zahl an


// Vermeidung von NULL Seiten
if( $SeitenZahl Seite $i );
}


?\>

So müste es eigentlich funktionieren. Bitte bedenke, dass ich Deine Variablen nicht adaptiert habe. Du müsstest sie also noch entsprechend anpassen. Ich habe die Variablen extra so benannt, dass Du weiss für was sie steht.

Ich habe es nicht gestestet aber es müsste gehen. Sorry wenn´s nicht geht.

Gruss Michael