Gästebuch aufsplitten?

Birdie501

Grünschnabel
Hi Leute,

jetzt steinigt mich hoffentlich keiner! Ich weiss dass diese Frage schon oft gestellt wurde. Ich habe mir auch alle Beiträge angeschaut, bekomme mein Problem aber nicht auf mein Skript umgemünzt.

Also ich habe ein Gästebuch Skript und möchte nun gerne die Einträge des Gästebuchs auf mehrere Seiten verteilen. Ist jemand da draussen so nett und kann mir das an folgendem Code zeigen wie das geht?

Ich bedanke mich schon mal.

Grüße

PHP:
<?
##### Admin-Passwort #####
$adminpasswort="admin";
##### Ihre Email-Adresse - UNBEDINGT ÄNDERN! #####
$myemail="info@domain.de";
##### Soll bei jedem Eintrag eine Mail an Sie geschickt werden (ja/nein)? #####
$email_senden="nein";
########### HAUPTPROGRAMM ###########
if ($eintrag) { eintrag(); }
else if ($senden) { auswertung($kommentar,$nname,$hpage,$email); }
else if ($admin_login) { admin_login(); }
else if ($admin) { admin($passwort); }
else if ($loeschen) { loeschen($to_delete); }
else gaestebuch_zeigen();
########### FUNKTIONEN ###########
function gaestebuch_zeigen ()
{
global $PHP_SELF;
echo "<div class=\"ueberschrift\"><p style=\"margin:40pt; margin-top:0pt; margin-bottom:0pt\">Domain.de Gästebuch</p></div>";
echo <<<FORMULAR
<center>
<FORM METHOD="POST" ACTION="$PHP_SELF">
<INPUT class="input" TYPE="SUBMIT" NAME="eintrag" VALUE="Neuer Eintrag">
</FORM>
</center>
FORMULAR;
$eintrag=array();
$lesen=array();
$teil=array();
if (file_exists("gbuch.txt")) {
$datei=fopen("gbuch.txt","r");
while (!feof($datei)) {
$lesen=fgets($datei,100000);
array_push($eintrag,$lesen);
}
array_pop($eintrag);
arsort($eintrag);
foreach ($eintrag as $zeile) {
$teil=explode("|",$zeile);
$sekunden=$teil[0];
$zeit=$teil[1];
$name=$teil[2];
$email=$teil[3];
$hpage=$teil[4];
$text=$teil[5];
echo"<hr width=\"100%\" color=\"#CCCCCC\" size=\"1\" style=\"margin:40pt; margin-top:0pt; margin-bottom:0pt\">\n";
 
echo "<div class=\"smalltext\"><p align=\"justify\" style=\"margin:40pt; margin-top:0pt; margin-bottom:0pt\">\n";
echo"$zeit Uhr<br>\n";
echo "<br><img src=\"img/gb_person.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\" >&nbsp;$name<br>\n";
if ($email!="") {
echo "<img src=\"img/gb_email.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\" >&nbsp;<a href=\"mailto:$email\">$email</a><br>\n";
}
if ($hpage!="") {
echo "<img src=\"img/gb_home.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\" >&nbsp;<a href=\"$hpage\" target=\"blank\">$hpage</a><br>\n";
}
echo "<br><p align=\"justify\" style=\"margin:40pt; margin-top:0pt; margin-bottom:0pt\">$text</p>";
echo "</p>\n";
 
}
}
echo "<p align=\"right\"><a href=\"$PHP_SELF?admin_login=true\">Admin</a></div>\n";
}
function eintrag()
{
global $PHP_SELF;
$ua=getenv("HTTP_USER_AGENT");
if (1*strpos(strtolower($ua),"msie")>0) {
$breite1=38;
$breite2=62;
} else {
$breite1=22;
$breite2=30;
}
echo <<<EINTRAG
<p align="right" class="ueberschrift"><a href="$PHP_SELF">zum Gästebuch</a></p>
<table cellpadding="5" cellspacing="5" width="100%">
<tr>
<td align="center">
<div class="ueberschrift">Eintrag ins Gästebuch</div><p>
<FORM action="$PHP_SELF" method="post">
<table width="310">
<tr>
<td class="smalltext">
Name:
</td>
<td>
<input class="input" type="text" name="nname" size="$breite1" maxlength="40" VALUE="$nname">
</td>
</tr>
<tr>
<td class="smalltext">
E-Mail:*
</td>
<td>
<input class="input" type="text" name="email" size="$breite1" VALUE="$email">
</td>
</tr>
<tr>
<td width="33%" class="smalltext">
Homepage:*
</td>
<td>
<input class="input" type="text" name="hpage" size="$breite1" VALUE="$hpage">
</td>
</tr>
<tr>
<td colspan="2">
<div class="smalltext">Kommentar:<br></div>
<textarea class="input" name="kommentar" rows="6" cols="$breite2" VALUE="$kommentar"></textarea>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td colspan="2">
<input class="input" type="submit" name="senden" value="eintragen">&nbsp;
<INPUT class="input" TYPE="reset" VALUE=" löschen ">
</td>
<td>
</td>
</tr>
<tr>
<td class="smalltext">
<br>* optional
</td>
</tr>
</table>
</FORM>
</td></tr></table>
EINTRAG;
}
function auswertung ($kommentar,$nname,$hpage,$email)
{
global $PHP_SELF;
global $myemail;
global $email_senden;
echo "<p align=\"right\" class=\"ueberschrift\"><a href=\"$PHP_SELF\">zum Gästebuch</a></p>\n";
####### Die Angaben werden von überflüssigen Zeichen befreit #######
$kommentar = stripslashes ($kommentar);
$kommentar = trim ($kommentar);
$nname = stripslashes ($nname);
$nname = trim ($nname);
$hpage = stripslashes ($hpage);
$hpage = trim ($hpage);
$email = stripslashes ($email);
$email = trim ($email);
####### Das Datum und die Zeit wird ermittelt #######
$tag=date("d.");
$m=array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
$monat=$m[1*date("m")-1];
$jahr=date("Y");
$tdw=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag",);
$x=date("w");
$zeit=date("H:i:s");
$anm=$tdw[$x].",&nbsp;".$tag."&nbsp;".$monat."&nbsp;".$jahr."&nbsp;-&nbsp;".$zeit;
$sekunden=date("U");
####### Definition der Fehlermeldung #######
$zurueck="Klicken Sie <a href=\"javascript:history.back()\"><b>hier</b></a>, um zum Formular zurückzukehren und die Fehler zu beheben.</center>";
####### Überprüfunge auf Fehler #######
if ((empty($kommentar)) || ((!ereg(".+@.+\..+", $email)) && (!empty($email))) || (empty($nname))) {echo "<center><br><br><br><div class=\"fehler\">Fehler !</div><br><br>";}
### Kommentar ###
if (empty($kommentar))
{ echo "<div class=\"smalltext\">Sie haben keinen Kommentar eingegeben.<br><br>"; echo "$zurueck\n"; }
### Email ###
else
if(!ereg(".+@.+\..+", $email)&& !empty($email)) {
echo "<div class=\"smalltext\">Die E-Mail Adresse ist falsch.<br><br>"; echo "$zurueck\n"; }
### Name ###
else
if (empty($nname))
{ echo "<div class=\"smalltext\">Sie haben Ihren Namen nicht eingegeben.<br><br>"; echo "$zurueck\n</div>"; }
####### Alles in Ordnung #######
else {
####### Daten werden gespeichert #######
$komm=ereg_replace(chr(10),"<br>",$kommentar);
if (!file_exists("gbuch.txt")) { $datei=fopen("gbuch.txt","w"); fclose($datei); }
$gbfile=fopen("gbuch.txt","a");
fputs($gbfile,"$sekunden|$anm|$nname|$email|$hpage|$komm\n");
fclose($gbfile);
####### FALLS $email_senden="ja", WIRD EINE EMAIL AN $myemail GESENDET #######
	 if ($email_senden=="ja")
{
$subject = "Eintrag";
	 $header = "From: Gästebuch <$myemail>\n";
$nachricht="Zeit - $anm\nName - $nname\nEmail - $email\nText - $komm";
mail($myemail,$subject,$nachricht,$header);
}
echo "<center><br><br><br><div class=\"smalltext\"><b>Die Daten wurden erfolgreich eingetragen.</b></div><br><br><br>\n";
echo "<a href=\"$PHP_SELF\"><div class=\"smalltext\">Gästebuch erneut anschauen</a></div></center>";
}
}
function admin_login()
{
global $PHP_SELF;
echo <<<ADMINFORMULAR
<p align="right" class="smalltext"><a href="$PHP_SELF">zum Gästebuch</a></p>
<center><br><br>
<form action="$PHP_SELF?admin=true" method="post">
<div class="smalltext">Passwort:</div>
<input class="input" type="password" name="passwort" size="20" maxlength="30">
<input class="input" type="submit" name="admin" value=" login ">
</form>
</center>
ADMINFORMULAR;
}
function admin($passwort)
{
global $PHP_SELF;
global $adminpasswort;
echo "<p align=\"right\" class=\"smalltext\"><a href=\"$PHP_SELF\">zum Gästebuch</a></p>\n";
if ($passwort==$adminpasswort)
{
echo "<form action=\"$PHP_SELF\" method=\"post\">";
echo "<table cellpadding=\"5\" cellspacing=\"5\" width=\"100%\">";
$eintrag=array();
$lesen=array();
$teil=array();
if (file_exists("gbuch.txt"))
{
$datei=fopen("gbuch.txt","r");
while (!feof($datei))
{
$lesen=fgets($datei,100000);
array_push($eintrag,$lesen);
}
array_pop($eintrag);
rsort($eintrag);
foreach ($eintrag as $zeile)
{
$teil=explode("|",$zeile);
$sekunden=$teil[0];
$zeit=$teil[1];
$name=$teil[2];
$email=$teil[3];
$hpage=$teil[4];
$text=$teil[5];
$time=ereg_replace("&nbsp;","",$zeit);
$time=ereg_replace(" ","",$time);
echo "<tr><td width=\"50\" align=\"right\" valign=\"top\">";
echo "<input type=\"radio\" name=\"to_delete\" value=\"$sekunden\"><br>";
echo "</td><td class=\"smalltext\">";
echo"Zeit: $zeit<br>";
echo "Name: $name<br>";
echo "Email: $email<br>";
echo "Homepage: $hpage<br>";
echo "Kommentar: $text<br><br>";
echo "</td></tr>";
}
echo "<tr><td></td><td align=\"left\">";
echo "<input class=\"input\" type=\"submit\" name=\"loeschen\" value=\"den markierten Eintrag löschen\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
echo "<input class=\"input\" type=\"reset\" value=\"abbrechen\"></td></tr>";
echo "</table></form>";
}
}
else
{
echo "<center><div class=\"fehler\"><br><br><br><br>Falsches Passwort!</div>\n";
echo "<p class=\"smalltext\" align=\center\"><a href=\"$PHP_SELF?admin_login=true\">zum Login</a><center>\n";
}
}
function loeschen($to_delete)
{
global $PHP_SELF;
global $adminpasswort;
$zeile=array();
$tosave=array();
$to_delete=ereg_replace("&nbsp;","",$to_delete);
$to_delete=ereg_replace(" ","",$to_delete);
$datei=fopen("gbuch.txt","r");
while (!feof($datei))
{
$zeile=fgets($datei,100000);
$teil=explode("|",$zeile);
$datum=ereg_replace("&nbsp;","",$teil[0]);
$datum=ereg_replace(" ","",$datum);
if ($datum!=$to_delete) { array_push($tosave,$zeile); }
}
fclose($datei);
$datei=fopen("gbuch.txt","w");
foreach ($tosave as $x)
{
fputs($datei,"$x");
}
fclose($datei);
echo <<<FORMULAR
<p align="right"><a href="$PHP_SELF">zum Gästebuch</a></p>
<center>
<div class="fehler">Der Eintrag wurde gelöscht</div><br><br><br>
<div class="smalltext"><a href="$PHP_SELF">zum Gästebuch</a></div><br><br><br>
<form action="$PHP_SELF" method="post">
<input type="hidden" name="passwort" value="$adminpasswort">
<input class="input" type="submit" name="admin" value="zurück zur Administration">
</form>
</center>
FORMULAR;
}
?>
 
Hm, irre ich mich, oder kam die Frage nicht schon gestern oder vorgestern?

Sind die Beiträge denn durch irgendein Zeichen voneinander getrennt?
 
Hi,

mag sein, dass es mit mysql besser geht. Ich brauche in diesem Fall aber eine Version mit txt Datei, da keine mysql DB vorhanden.

Die txt Datei in der die Beiträge gespeichert werden hat folgenden Aufbau.

Code:
1103415317|Sonntag,&nbsp;19.&nbsp;Dezember&nbsp;2004&nbsp;-&nbsp;01:15:17|tttttttt||tttttttt|ttttttttt<br>tttttttttt<br>ttt<br>t<br>tt<br>t<br>t<br>t<br>ttttttttttttt
1104799542|Dienstag,&nbsp;04.&nbsp;Januar&nbsp;2005&nbsp;-&nbsp;01:45:42|test|test@test.de|www.test.de|haloo, das ist ja schön!
1106659881|Dienstag,&nbsp;25.&nbsp;Januar&nbsp;2005&nbsp;-&nbsp;14:31:21|fghfgh|||fhg

Mag sein, dass das schon andere gefragt haben, aber eben nicht mit dem von mir verwendeten Code.

Ihr könnt es ja ganz einfach ausprobieren indem er den Code mal auf euren Webspace legt.

Grüße
 
Such mal nach zeilenweise auslesen oder so.
Dürfte schon öfter vorgekommen sein.

Einfach angeben wieviele Beiträge (also Zeilen) pro Seite ausgegeben werden sollen, und bei dem Link "weiter" angeben ab welcher Zeile er anfangen soll.


byez
 
Hilfe hat einer eine Aspirin?

Bei aller Liebe und respekt! - Warum so ein durcheinander? Ok du sagst du hast keine mysql Datenbank, ist für ein GB auch nicht wirklich nötig. Aber die meisten machen sich keine Gedanken bevor Sie eins programmieren. Glaube mir und tu dir selbst ein gefallen, und verwende für jeden Eintrag eine einzelne TXT Datei, die du dann als Dateinamen mit einem Zeistempel versiehst.

In einer Schleife liest du dann geordnet aus.
Aus deinem SAcript bleiben ein paar Byte übrig! Und du tust dir nicht wirklich schwer damit.

Achja eine Datei liest man auch so ein:
PHP:
$datei = file_get_contents("Pfadzurdate");
und dann explode() verwenden
Denn was machst du, sofern einer mehrere Zeilen Schreibt?

Gruss!

PS Du hast es auch leichter, sofern du mal ein Beitrag löschen willst. Dann löscht du einfach eine Textdatei. Usw. Aber auch das Zählen von Beiträgen fällt nicht mehr schwer oder etwa nicht?

TIPP Fang einfach neu an, und wenn du Probs hast helf ich dir!
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

das ist ja nett gemeint mit dem helfen beim Neuanfang. Ich habe das Gästebuch aber so schon laufen und in das Layout eingepasst. Es ist auch wirklich simpel und funktioniert.

Ich will nun nicht die ganze Arbeit von vorne beginnen. Es muss doch mit ein paar Kniffen möglich sein, den vorhandenen Code so zu bearbeiten, dass die Einträge so wie sie sind auf mehrere Seiten verteilt werden.

Nur weil an meinem Auto die ZV fehlt kaufe ich mir auch kein neues :) sondern rüste diese nach.

Grüße
 
Ja klar ist es möglich. Aber du hast nochmal so ein Aufwandt.
Eben deswegen!

OK ich verstehe das ganze auch, dass du da keinen neuen Anfang machen möchtest. OK dann bleibe eben beim alten:

-> Aber poste uns dann bitte einen Eintrag bzw. Die TXT datei wo die Einträge drin sind:

Und noch eine Sache, was machst du wenn die Datei übervoll wird?

Lieber einmal viel Aufwandt wie hinterher viel Ärger.

Zeig mir mal die Datei und dann schauen wir weiter!

PS UPS hast du ja schon getan! sorry!

Parameter Edit über URL übergeben
ZB ?edit=4 für 4ten Eintrag!

PHP:
$datei=file("dietextdatei");
for($i=0;$i<count($datei);$i++){
if($i == $_GET[edit]) { echo "<textarea>$datei[$i]</textarea>"; }
}

Einfach mal probieren
 
Zuletzt bearbeitet von einem Moderator:
Hallo Lukasz,

das verstehe ich nun nicht ganz. Ich will ja nicht jeden einzelnen Eintrag durch den Parameter Aufruf anzeigen lassen können, sonder beispielsweise immer 5 pro Seite.

Falls ich es falsch verstehe, könntest du dann man den angepassten code posten?

Danke.

Grüße

p.s. wenn die datei zu groß würde, dann werden alte beiträge gelöscht oder ausgegliedert. Ken Mensch liesst das ganze Gästebuch :)
 
Ja sge male was ist heut mit mir los Jete hab ichs mit bearbeiten aber ist dasgleiche Prinzib!

Du übergibst Parameter ?seite=1

PHP:
$datei=file("dietextdatei"); 
for($i=0;$i<count($datei);$i++){ 
if($i <= ($_GET[seite] + 5) && $i >= $_GET[seite]) { echo $datei[$i]"<br>"; } 
}
 
Zurück