Gästebuch Teil 2 |
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hi
Seit einiger Zeit versuche ich mal wieder mein Gästebuch aufzuräumen.
Nun hab ich einige Einträge gelöscht.
Nun wird ein neuer Eintrag falsch angezeigt weil die ID nicht mehr in der Reihenfolge ist.
Also muß ich jedesmal die Einträge in der Datenbank einzeln aufrufen und die ID ändern.
Wie kann ich denn das Problem nur dauerhaft in den Griff bekommen?
JENS
|
 Profil
Editieren
Zitieren
|
HG
Posting-Schinder
Beiträge: 520 |
In der Datenbankabfrage einfach nicht nach der id sortieren, sondern nach dem Eintragsdatum. Oder darauf achten, daß die id immer um einen Zähler gesteigert wird, und nicht die nächste freie Zahl.
HG
---
www.kuminatano.de
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hi
Also wenn ich den Zähler immer um eins erhöhe und dann aber mal mittendrinn ein Eintrag rausnehmen muß hab ich wieder das gleiche Problem.
Wie muß ich dann was ändern wenn ich nach Datum sortiere?
Oder ist es vielleicht besser wenn ich die ID völlig entferne ?
JENS
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Poste mal bitte deinen Code, mit dem du das anzeigst.
|
 Profil
Editieren
Zitieren
|
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hallo
Ich hab den Quelltext mal hier hinterlegt.
Wär nicht schlecht wenn du mir da mal helfen könntest da ich keine Ahnung von hab.
Das hat mir mal einer gemacht den ich nun irgendwie nicht mehr zu fassen bekommen.
Danke schon mal.
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Oha, da blickt auch nur der durch, der es geschrieben hat.
Ich glaube dein Problem ist ,dass du nicht mit While abreitest. Damit würde das viel einfacher. Ich kann dir ja mal gerad einfach den relevanten Teil meines Gästebuchs hier posten. Darfst dich nur nicht wundern, weil ich eine MySQL-Klasse benutze, was aber nicht so viel zur Sache tut.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88: | if (!isset($seite)) {
$seite = 1;
}
include_once("guestbook/replace.inc.php");
//Berechnung der Einträge für die aktuelle Seite
$anfang = ($seite - 1) * $settings['guestbook_pageentries'];
$ende = $anfang + $settings['guestbook_pageentries'];
$result = $mysql->query("SELECT count(*) FROM guestbook");
$gesamt = $mysql->get_data($result, 2);
$gesamt = $gesamt[0];
$seiten = ceil($gesamt / $settings['guestbook_pageentries']);
$eintragnow = $gesamt - $anfang;
//Anfrage an die Datenbank für die Einträge
$result = $mysql->query("SELECT * FROM guestbook ORDER BY id DESC LIMIT ".$anfang.", ".$settings['guestbook_pageentries']);
//Ausgabe der einzelnen Einträge
while ($zeile = $mysql->get_data($result, 1)) {
echo "
".$eintragnow.". ".stripslashes($zeile['name'])." ($zeile[date]) |
".replace(stripslashes($zeile['text']));
if ($zeile['comment'] <> "") {
echo "
--------------------------------------
".replace(stripslashes($zeile['comment']))." ";
}
echo " |
";
if ($zeile['email'] <> "") {
echo "";
}
if ($zeile['homepage'] <> "") {
echo " ";
}
if ($zeile['icq'] <> "") {
echo " ";
}
echo " |
";
$eintragnow--;
};
echo "
";
//Pfeilnavigation links
if ($seite > 1) {
echo "<<";
} else {
echo "<<";
};
//Zahlenleiste
echo " |";
for ($i=1;$i<=$seiten;$i++) {
if ($i == $seite) {
echo " $i";
} else {
echo " $i";
};
};
echo " |";
//Pfeilnavigation rechts
if ($ende < $gesamt) {
echo " >>";
} else {
echo " >>";
};
?> |
Guck dir mal den Query und dann die Ausgabe mit der While-Schleife an. Das regelt gelöschte IDs automatisch.
Diese Nachricht wurde geändert von: languitar |
 Profil
Editieren
Zitieren
|
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hallo
Als ich blicke weder bei mir noch bei dir durch
|
 Profil
Editieren
Zitieren
|
Andreas S
Otto-Normal-Poster
Beiträge: 81 |
DreamPromise schrieb am 14.09.2003 23:47
Wie muß ich dann was ändern wenn ich nach Datum sortiere? |
1: | $query .= "ORDER BY gb_id DESC "; |
ändern in:
1: | $query .= "ORDER BY datum DESC, uhrzeit DESC "; |
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Grenz dein Problem doch mal ein. Das ist immer ganz Hilfreich beim erklären.
Ich geb dir mal nen kurzen Überblick wie mein Code funktioniert:
replace.inc.php enthält eine Funktion zum Ersetzen der Smilies, ist also erst mal nicht wichtig.
Ab Zeile 7 geht es los mit einigen Berechnungen. Dabei osllte man wissen, dass $settings['guestbook_pageentries'] die Anzahl der Einträge pro Seite enthält. Das lege ich vorher fest. Du kannst da natürlich auch einfach direkt ne Zahl immer hinschreiben.
Zeile 8: Berechnung des ersten Anzuzeigenden Eintrags. $seite wird dabei über die Adresszeile übergeben (und jetzt lüncht mich nicht wegen register_globals = on).
Zeile 9: berechnet den letzen Eintrag, der auf der jeweiligen Seite angezeigt wird. Also Starteintrag + Anzahl der Einträge, die angezeigt werden sollen.
Zeile 10 - 12:: Hier frage ich kurz die Anzahl aller Einträge ab. Die steht nachher in $gesamt.
Zeile 13: Hier wird die Anzahl aller Seiten augerechnet, die das Gästebuch hat (ceil = aufrunden, da ja auch unvollständige Seiten angezeigt werden sollen).
Zeile 14: Hier wird gerade noch die Nummer für die durchlaufende Nummerireung der Einträge in der Ausgabe berechnet.
Jetzt kommt die eigentliche Ausgabe:
Zeile 17: Hier frage ich erst mal alle entsprechenden Einträge aus der Datenbank ab. Dabei wird LIMIT benutzt. Der erste Parameter gibt dabei an, beim wievielten Datenbankeintrag begonnen werden soll auszulesen; der zweite Parameter sagt wie viele Einträge von da aus ausgelsen werden sollen. &mysql->query ust im grunde übrigens die Funtkion mysql_query()
Ich habe jetzt also alle Einträge, die ich auf der ensprechenden seite anzeigen möchte im der Variable $result.
Zeile 20ff.: Hier beginnt die While-Schleife, mit der jetzt die Einträge abgearbeitet werden. While und MySQL sind quasi untrennbar. While geht jetzt einfach alle Einträge in $result durch und legt dabei den jeweiligen Eintrag mit Hilfe von mysql_fetch_array in $zeile ab. In den folgenden Zeilen passiert dann einfach nur noch die Ausgabe mit den ganzen Fällen (Smilies umwandeln, Wenn Emailadresse gesetzt -> Symbol anzeigen etc...)
Zeile 63ff.: Hier erstelle ich jetzt kurz noch die Navigation für das Gästebuch.
Ich hoffe das hilft dir weiter. Du musst dich einfach mal ein bisschen eiarbeiten. Mal ein paar Sachen umbauen, den query etwas verändern und einfach gucken was passiert und dann schlussfolgern, weiso das so passiert ist.
|
 Profil
Editieren
Zitieren
|
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hallo
So gehts leider auch nicht.
Ich hab gerade mal einen Testeintrag gemacht.
Der erscheint nun auf einer neuen Seite.
Wenn ich aber die ID entsprechend anpasse damit die der vorherigen Eintrag um eins erhöht ist,zeigt das Gästebuch die Einträge wieder richtig an.
JENS
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Ja, du hast ja auch enen grundsätzlich fehler in deinem Konzept, da du nicht mit While arbeitest. An der Schleife wie bei mri wirst du nicht dran vorbeikommen
|
 Profil
Editieren
Zitieren
|
DreamPromise
Mausakrobat Threadstarter
Beiträge: 171 |
Hallo
Ja das dachte ich mir schon
Aber ich hab nicht die Erfahrung das neu zumachen.....bzw das zu ändern.
Dann muß ich wohl so wie bisher weiter machen und die IP´s immer anpassen...
Hab´s ja bis jetzt auch immer gemacht...was sollt.
Danke für deine Hilfe.
|
 Profil
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
Wieso? Ich hab dir doch gerade schon fast das fertige Gästebuch geliefert. Müsstest gerade nur wieder die Bruchstücke der MySQL-Klasse in normale PHP-Befehle ändern und das auf deine Tabellenstruktur anpassen.
Außerdem wenn du wenig arbeit haben möchtest, dann nimm einfach das feedbook. Es wäre nur gerade etwas Arbeit die ganzen Einträge zu übertragen, dafür gibt es dabei dann einen super Administrationsbereich bie dem du ganz ohen PHP-Kenntnisse auskommst.
Gruß
Johannes
|
 Profil
Editieren
Zitieren
|