Gästebucheinträge sortieren?
Aleks
- php
hallo zusammen,
ich habe mir gerade ein gästebuch erstellt und es funktioniert auch weitestgehend! der übersichthalber würde ich gerne die einträge chronologisch ordnen, das heißt, dass der aktuellste eintrag oben als erstes aufgelistet werden soll. bis jetzt ist das leider nicht der fall und die neuen einträge werden einfach hinten angehängt.
die einträge werden in eine .txt-datei auf meiner festplatte gespeichert.
danke für eure hilfe!
Moin!
die einträge werden in eine .txt-datei auf meiner festplatte gespeichert.
Wie hübsch!
Wir wissen also PHP, Gästebuch, Flatfiles. Leider wissen wir sonst nichts über Dein Gästebuch. Und das ist zuwenig um Dir helfen zu können.
Versetze uns doch in den erforderlichen Wissensstand :)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
oh sorry, bin noch ein blutiger anfänger!
also, das eingabeformular befindet sich auf der seite gaestebuch.html. die eingaben werden an die datei eintraege.php gesendet, welche den eintrag dann in eine .txt-datei auf meiner festplatte schreibt.
meines erachtens müsste das problem im PHP-abschnitt des eintraege.php-scripts stecken:
<?
if (isset($abschicken)){
»» $datei = fopen("eintraege.txt","a");
»» $kommentar = ereg_replace("\n","<br>",$kommentar);
»» $kommentar = stripslashes($kommentar);
»» $daten = "<hr><b>Name:</b> $name<br>
»» <b>Ort:</b> $ort<br>
»» <b>Email:</b> <a href=mailto:$email>$email</a><br>
»» <b>Homepage:</b> <a href=$url>$url</a><br>
»» <b>Datum:</b> " . date('d. F Y H:i') . "<br>
»» <b>Eintrag:</b><br>
»» $kommentar<br>\n\n";
»» fwrite($datei,$daten);
»» fclose($datei);
}
»»
if (file_exists("eintraege.txt")){
»» $datei = fopen("eintraege.txt","r");
»» $daten = fread($datei,filesize("eintraege.txt"));
»» print $daten;
}
else {
»» print "<center><b>Es sind keine Einträge vorhanden!
</b></center>";
}
?>
in diesem fall werden die daten in einfache variablen gespeichert. ich habe aber dasselbe beispiel nochmal, dort werden die daten allerdings in arrays gespeichert.
ich hoffe das reicht jetzt als info!
danke!
Hello,
<?
if (isset($abschicken)){
»» $datei = fopen("eintraege.txt","a");
»» $kommentar = ereg_replace("\n","<br>",$kommentar);
»» $kommentar = stripslashes($kommentar);
»» $daten = "<hr><b>Name:</b> $name<br>
»» <b>Ort:</b> $ort<br>
»» <b>Email:</b> <a href=mailto:$email>$email</a><br>
»» <b>Homepage:</b> <a href=$url>$url</a><br>
»» <b>Datum:</b> " . date('d. F Y H:i') . "<br>
»» <b>Eintrag:</b><br>
»» $kommentar<br>\n\n";
»» fwrite($datei,$daten);
»» fclose($datei);
}
»»
if (file_exists("eintraege.txt")){
»» $datei = fopen("eintraege.txt","r");
»» $daten = fread($datei,filesize("eintraege.txt"));
»» print $daten;
}
else {
»» print "<center><b>Es sind keine Einträge vorhanden!
</b></center>";
}
?>
Ok, für den ersten Fall bin ich auf den ersten Blick jewtzt reingefallen. Das bekommen wir aber schnell repariert:
Du hast eine Datei mit wahlfreier Satzlänge und im Prinzip auch wahlfreiem Satzformat. Das bedeutet, dass Du ersteinmal die Datensätze separieren musst. Dazu brauchst Du nur einen HTML-Kommentar zwischen die Datensätze zu stanzen. Damit es keine Fehler gibt, muss genau dieser Kommentar aus den Daten extrahiert werden. das erreicht man am einfachsten dadurch, dass man die Postdaten vor demm Wegschreiben durch ein Filter jagt, dass
1. alle Tags entfernt
2. die Backslashes entfernt
Dann fügst Du einfach hinter jedem Datensatz ein <!-- neuer Eintrag --> ein.
Wenn Du die Datei nun vollständig eingelesen hast in eine Streamvariable, dann kannst Du diese ganz einfach mit
$_records = explode("<!-- neuer Eintrag -->",$stream); zerlegen.
Dieses Array kannst Du nun reversieren und wenn Du willst auch wieder zusammenbauen mit $stream = implode("<!-- neuer Eintrag -->";$_records);
http://de.php.net/manual/en/function.explode.php
http://de.php.net/manual/en/function.implode.php
Auf diese Weise kann man auch eine Seitenweise Ausgeb von z.B. immer fünf Einträgen realisieren.
Deine vorhandenen Gästebucheinträge musst Du natürlich konvertieren, das heiß die Trenner dazwischen bauen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
super vielen dank!
das werd ich jetzt mal ausprobieren.
Moin!
Dieses Array kannst Du nun reversieren und wenn Du willst auch wieder zusammenbauen mit $stream = implode("<!-- neuer Eintrag -->";$_records);
Warum einfach. wenn es kompliziert geht :)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Ok, für den ersten Fall bin ich auf den ersten Blick jewtzt reingefallen. Das bekommen wir aber schnell repariert:
Du hast eine Datei mit wahlfreier Satzlänge und im Prinzip auch wahlfreiem Satzformat. Das bedeutet, dass Du ersteinmal die Datensätze separieren musst. Dazu brauchst Du nur einen HTML-Kommentar zwischen die Datensätze zu stanzen. Damit es keine Fehler gibt, muss genau dieser Kommentar aus den Daten extrahiert werden. das erreicht man am einfachsten dadurch, dass man die Postdaten vor demm Wegschreiben durch ein Filter jagt, dass
1. alle Tags entfernt
2. die Backslashes entferntDann fügst Du einfach hinter jedem Datensatz ein <!-- neuer Eintrag --> ein.
Wenn Du die Datei nun vollständig eingelesen hast in eine Streamvariable, dann kannst Du diese ganz einfach mit
$_records = explode("<!-- neuer Eintrag -->",$stream); zerlegen.
Dieses Array kannst Du nun reversieren und wenn Du willst auch wieder zusammenbauen mit $stream = implode("<!-- neuer Eintrag -->";$_records);
http://de.php.net/manual/en/function.explode.php
http://de.php.net/manual/en/function.implode.phpAuf diese Weise kann man auch eine Seitenweise Ausgeb von z.B. immer fünf Einträgen realisieren.
Deine vorhandenen Gästebucheinträge musst Du natürlich konvertieren, das heiß die Trenner dazwischen bauen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
kannst du diese variante vielleicht noch was näher erklären? die von fastix hab ich jetzt begriffen, würde aber auch gerne noch deine möglichkeit verstehen!
so wie ich das bisher verstanden habe, wird als orientierung ein html kommentar in die .txt-datei eingefügt, die dann beim auslesen widererkannt wird. kannst du vielleicht noch etwas konkreter werden?
ich möchte gern so viel wie möglich lernen, da ich gerade eine ausbildung begonnen habe, und meine vorkenntnisse schon ab der zweiten woche aufgebraucht waren!
danke!
Hello,
kannst du diese variante vielleicht noch was näher erklären? die von fastix hab ich jetzt begriffen, würde aber auch gerne noch deine möglichkeit verstehen!
Daten kommen per POST an
Wenn isset($_POST['neuer Eintrag'])
POST-Array wird "kastriert"
Datensatz wird vorbereitet ("Bastelei")
Datei wird im (a+)-Modus geöffnet
wenn filesize > 0
Seperator + "\n" wird angefügt (den hast Du natürlich als Konstante deklariert)
vorbereiteter Datensatz wird angefügt
Datei wird geschlossen
---<<
#immer:
Datei wird im (r)-Modus geöffnet
Datei wird eingelesen
Datensätze werden mit $_records = explode(Seperator,$dateiinhalt) erzeugt
Datensätze werden umsortiert mit array_reverse()
Datensätze werden wieder zu einem Stream zusammengebaut mit implode("<hr>",$_records);
HTML-Rahmen wird aufgebaut
HTML-Rahmen wird dausgegeben (echo $HTMLhead)
Datensätze werden ausgegeben (echo $stream)
HTML-Fuß wird ausgegeben (echo $HTMLfoot)
Und Tschüss.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin!
<?
$neu_vor_alt=true; # >> false, wenn alt vor neu: Ohne Anführungsstriche!
$filename="eintraege.txt";
$daten_alt=""; $daten_neu="";
if (file_exists($filename)){
$datei = fopen($filename,"r");
$daten_alt = fread($datei,filesize($filename));
fclose($datei);
}
if (isset($_POST['abschicken'])) {
$kommentar = stripslashes(htmlentities(($_POST['kommentar'])));
# Es fehlte das Umwandeln von HTML-Code.
# Sonst wird womöglich irgendwelcher JS-Scheiss in Dein GB eingetragen und alle wundern sich :)
$kommentar = str_replace("\n","<br>",$kommentar);
# str_replace ist bei einfachen Erstzungen schneller
# Die anderen Variablen sind genau so zu behandeln:
$name = stripslashes(htmlentities(($_POST['name'])));
$email= stripslashes(htmlentities(($_POST['email'])));
$url = stripslashes(htmlentities(($_POST['url'])));
# Basteln
$daten_neu = "<hr><b>Name:</b> $name<br>
<strong>Ort:</strong> $ort<br>
<strong>Email:</strong> <a href=mailto:$email>$email</a><br>
<strong>Homepage:</strong> <a href=$url>$url</a><br>
<strong>Datum:</strong> " . date('d. F Y H:i') . "<br>
<strong>Eintrag:</strong><br>
$kommentar<br>\n\n";
# Hier wird es ernst:
if ($neu_vor_alt) {
$daten=$daten_neu.$daten_alt;
} else {
$daten=$daten_alt.$daten_neu;
}
# Flatfile öffnen und überschreiben:
$datei = fopen($filename,"w");
fwrite($datei, $daten);
fclose($datei);
}
if ($daten_neu.$daten_alt != "") {
if ($neu_vor_alt) {
print $daten_neu.$daten_alt;
} else {
print $daten_alt.$daten_neu;
}
} else {
print "<div style='font-weight:bold; text-align: center'>Es sind keine Einträge vorhanden!</div>";
}
?>
ich hoffe das reicht jetzt als info!
Na... ich auch, ich habe da allerhand Unsinn rausgemacht. Woher stammt das (schlechte) Beispiel?
Ach so: keine Garanie, es können Typos drin sein.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello fastix®,
warum sicher, wenn es auch unsicher geht? ;-)
Bei Deiner methode MUSS Aleks mit Locking arbeiten, wenn ihm seine Einträge lieb sind.
Bei Aleks Methode kann es nur einmal passiren, dass der gerade im Append befindliche Datensatz nur halb gelesen wird, weil die Leseoperation von Client A ggf. die Schreiboperation von Client B überholt.
Aber es können keinen Daten verloren gehen.
Wenn er striptags() benutzt vor dem Wegschreiben, dann darf er sich lt. Thomas Luethi (den ich schon lange nicht mehr gesehen habe) die htmlentites() schenken und nur htmlspecialchars() benutzen. Allerdings würe ich es auch so machen, wie Du.
1. stripslashes()
2. striptags()
3. htlmentities()
4. nl2br()
in dieser Reihenfolge. Und dann erst wegschreiben. Damit man das nicht mit jedem Wert einzeln machen muss, könnte man die Funktionen gepackt auf alle Datenwerte aus dem POST-Array anwenden.
Dafür gibt es Array_map().
function filter($val)
{
if (is_array($val))
{
return array_map('filter', $val)
}
else
{
return nl2br(htmlentities(striptags(stripslashes($val))));
}
}
$_POST = arraymap('filter', $_POST);
Habs jetzt nicht ausprobiert, müsste aber funktionieren.
Dann kann man sich das ganze Geschreibsel sparen. Ich bin da immer gerne faul. Wahrscheinlich kann man das in der hier häufig gezeigten Kompaktschreibweise auch in einer einzigen Zeile mit dem Trinitätsoperator erreichen, aber dann steigt ja keiner mehr durch ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin!
Hello fastix®,
Bei Deiner methode MUSS Aleks mit Locking arbeiten, wenn ihm seine Einträge lieb sind.
Bei Aleks Methode kann es nur einmal passiren, dass der gerade im Append befindliche Datensatz nur halb gelesen wird, weil die Leseoperation von Client A ggf. die Schreiboperation von Client B überholt.Aber es können keinen Daten verloren gehen.
Hehe :) Es geht um ein Gästebuch. Ich vermute nicht, dass da Einträge im hunderstel-sekunden-Takt aufschlagen.
Ansonsten hätte ich sicher eine Datenbank wärmstens empfohlen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Bei Deiner methode MUSS Aleks mit Locking arbeiten, wenn ihm seine Einträge lieb sind.
Bei Aleks Methode kann es nur einmal passiren, dass der gerade im Append befindliche Datensatz nur halb gelesen wird, weil die Leseoperation von Client A ggf. die Schreiboperation von Client B überholt.Aber es können keinen Daten verloren gehen.
Hehe :) Es geht um ein Gästebuch. Ich vermute nicht, dass da Einträge im hunderstel-sekunden-Takt aufschlagen.
Das vielleicht nicht, aber wenn einer einen kleinen benchnmarktest auf sein Eintragungsscript absetzt, sind die Daten auch weg. Außerdem ist der Fehler vorhersehbar und daher wäre es schlampig, ihn nicht zu vermeiden.
Locken also zumindest über den gesamten Updatevorgang von VOR dem Lesen bis NACH dem Schreiben.
Das Anzeigescript kann da nichts kaputt machen, nur ggf. mal nur einen Teil der Daten erwischen.
Ansonsten hätte ich sicher eine Datenbank wärmstens empfohlen.
Das wäre für diese Anwendung mit Kanonen auf Spatzen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin!
Ok. ok. Hier das komplette Skript mit allen Einbauten.
<?PHP
$neu_vor_alt=true; # >> false, wenn alt vor neu: Ohne Anführungsstriche!
$filename="eintraege.txt";
$this_uri="http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];
$daten_alt=""; $daten_neu="";
if (file_exists($filename)){
$datei = fopen($filename,"r");
$daten_alt = fread($datei,filesize($filename));
fclose($datei);
}
if (isset($_POST['abschicken'])) {
$kommentar = stripslashes(htmlentities(($_POST['kommentar'])));
$kommentar = str_replace("\n","<br>",$kommentar);
# str_replace ist bei einfachen Erstzungen schneller
# abbrechen, wenn $kommentar leer ist:
if ($kommentar=="") {
header ("Location: $this_uri");
exit;
}
# Die anderen Variablen sind genau so zu behandeln:
$name = stripslashes(htmlentities(($_POST['name'])));
$email= stripslashes(htmlentities(($_POST['email'])));
$url = stripslashes(htmlentities(($_POST['url'])));
# Basteln
$daten_neu = "<hr><b>Name:</b> $name<br>
<strong>Ort:</strong> $ort<br>
<strong>Email:</strong> <a href=mailto:$email>$email</a><br>
<strong>Homepage:</strong> <a href=$url>$url</a><br>
<strong>Datum:</strong> " . date('d. F Y H:i') . "<br>
<strong>Eintrag:</strong><br>
$kommentar<br>\n\n";
# Hier wird es ernst:
if ($neu_vor_alt) {
$daten=$daten_neu.$daten_alt;
} else {
$daten=$daten_alt.$daten_neu;
}
# Flatfile öffnen und überschreiben:
$datei = fopen($filename,"w");
flock($datei,2);
fwrite($datei, $daten);
flock($datei,3);
fclose($datei);
header ("Location: $this_uri");
exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
</head>
<h1>Gästebuch</h1>
<form method="POST">
<pre>
Name: <input type="text" name="name">
eMail: <input type="text" name="email">
URL: <input type="text" name="url">
Kommentar:<textarea name="kommentar"></textarea>
<input type="submit" name="abschicken" value="abschicken">
</pre>
</form>
<?PHP
if ($daten_neu.$daten_alt != "") {
if ($neu_vor_alt) {
print $daten_neu.$daten_alt;
} else {
print $daten_alt.$daten_neu;
}
} else {
print "<div style='font-weight:bold; text-align: center'>Es sind keine Einträge vorhanden!</div>";
}
?>
</body>
</html>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Ok. ok. Hier das komplette Skript mit allen Einbauten.
Sorry Sir, aber das ist falsch. Es muss der komplette Updatevorgang gekapselt (locked) werden, da sonst kein quasi-atomarer Zustand hergestellt wird.
if (file_exists($filename)) ## das kann man sich schenken, wenn man $daterihandle prüft
{ ## und Warnings im Betrieb ausschaltet, dafür aber
## $php_errormsg abfragt --> gibts aber auch noch Fallen
$datei = fopen($filename,"r+");
$lock_ok = flock($datei,LOCK_EX
$daten_alt = fread($datei,filesize($filename));
##fclose($datei); ## offen lassen
}
if (isset($_POST['abschicken'])) {
$kommentar = stripslashes(htmlentities(($_POST['kommentar'])));
$kommentar = str_replace("\n","<br>",$kommentar);
# str_replace ist bei einfachen Erstzungen schneller# abbrechen, wenn $kommentar leer ist:
if ($kommentar=="") {
header ("Location: $this_uri");
exit;
}
# Die anderen Variablen sind genau so zu behandeln:
$name = stripslashes(htmlentities(($_POST['name'])));
$email= stripslashes(htmlentities(($_POST['email'])));
$url = stripslashes(htmlentities(($_POST['url'])));# Basteln
$daten_neu = "<hr><b>Name:</b> $name<br>
<strong>Ort:</strong> $ort<br>
<strong>Email:</strong> <a href=mailto:$email>$email</a><br>
<strong>Homepage:</strong> <a href=$url>$url</a><br>
<strong>Datum:</strong> " . date('d. F Y H:i') . "<br>
<strong>Eintrag:</strong><br>
$kommentar<br>\n\n";# Hier wird es ernst:
if ($neu_vor_alt) {
$daten=$daten_neu.$daten_alt;
} else {
$daten=$daten_alt.$daten_neu;
}
# Flatfile öffnen und überschreiben:
if (fseek($datei,0,SEEK_SET) !=0) die ('irgendein blöder Dateifehler');
fwrite($datei, $daten);
ftruncate($datei,strlen($daten));
fclose($datei); ### fclose() löst auch den Lock auf.
header ("Location: $this_uri");
exit;
}
Hier wird jetzt mit Blocking Lock gearbeitet. Der hält das Script solange an, bis die Lockanforserung Erfolg hatte oder die max_execution_time beendet ist.
Wird Zeit, dass mein Artikel fertig wird. hat schon 18 Seiten im Druck und ich hab immer noch Stoff.
Die letzte Anregung kam gerade wieder durch Sven rautenberg, weil Lunix/Unix mit Dateidescriptoren ganz anders verfährt, als WinDOS. Musste ich doch glatt noch ne Testrunde einlegen. Ich wusste dsa zwar eigentlich, aber dran gedacht habe ich nicht. Ich bin halt NOVELL+DOS-geschädigt.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Moin!
Sorry Sir, aber das ist falsch. Es muss der komplette Updatevorgang gekapselt (locked) werden, da sonst kein quasi-atomarer Zustand hergestellt wird.
Das mag ja alles ganz nett sein. Aber rechnen wir mal:
Ein gut besuchtes Gästebuch bekommt angenommen aller 10 Tage (864.000 Sekunden) einen Eintrag.
Rechnen wir mal damit, dass das Eintragen 1/10 Sekunde dauert.
Bedeutet im Durchschnitt ergibt sich ein Konflikt aller 864.000 * 10 Einträge. Das sind: 8.640.000.
Also ca. 8,64 Millionen Einträge. Oder 86,4 Millionen Tage oder etwa 236.500 Jahre.
(Bitte keine Krümelkackerei, ich habe mit 365,25 Tagen gerechnet.)
Na zumindest sollte in dem Zeitraum auch mal eine Datensicherung vorgenommen werden. Die Lebenszeit einer Platte (MTBF) beträgt nämlich angeblich durchschnittlich 11 Jahre.
Bei einem Stresstest sind die Daten hinterher eh nicht zu gebrauchen.
Somit dauert es durchschnittlich
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello,
Sorry Sir, aber das ist falsch. Es muss der komplette Updatevorgang gekapselt (locked) werden, da sonst kein quasi-atomarer Zustand hergestellt wird.
Das mag ja alles ganz nett sein. Aber rechnen wir mal:
Ein gut besuchtes Gästebuch bekommt angenommen aller 10 Tage (864.000 Sekunden) einen Eintrag.
Rechnen wir mal damit, dass das Eintragen 1/10 Sekunde dauert.
Entschuldige bitte, wenn ich jetzt einfach mal etwas deutlicher werden: Du hast es leider immer noch nicht verstanden.
Ein Gästebuch, dessen Locking nicht sauber gebaut ist, lässt sich von jedem Idioten löschen. Ich gebe hier keine Anleitung, wie das geht. Aber die Idioten (und auch viele "Gute") wissen wies geht.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi,
ich hab es mal mit deiner methode ausprobiert fastix, aber jetzt überschreibt er ständig die einträge in der eintraege.txt-datei. im endeffekt bleibt immer nur ein eintrag drin.
Moin!
ich hab es mal mit deiner methode ausprobiert fastix, aber jetzt überschreibt er ständig die einträge in der eintraege.txt-datei. im endeffekt bleibt immer nur ein eintrag drin.
Dann hast Du was falsch abgeschrieben. (Ich habs getestet, es gibt nur noch ein Problem, das kann man aber abwenden, wenn man eine
Nimm das komplette Skript und ändere den HTML- Teil.
<?
$neu_vor_alt=true; # >> false, wenn alt vor neu: Ohne Anführungsstriche!
$gburi="http://localhost/test/gb.php";
$filename="eintraege.txt";
$daten_alt=""; $daten_neu="";
if (file_exists($filename)){
$datei = fopen($filename,"r");
$daten_alt = fread($datei,filesize($filename));
fclose($datei);
}
if (isset($_POST['abschicken'])) {
$kommentar = stripslashes(htmlentities(($_POST['kommentar'])));
# Es fehlte das Umwandeln von HTML-Code.
# Sonst wird womöglich irgendwelcher JS-Scheiss in Dein GB eingetragen und alle wundern sich :)
$kommentar = str_replace("\n","<br>",$kommentar);
# str_replace ist bei einfachen Erstzungen schneller
# Die anderen Variablen sind genau so zu behandeln:
$name = stripslashes(htmlentities(($_POST['name'])));
$email= stripslashes(htmlentities(($_POST['email'])));
$url = stripslashes(htmlentities(($_POST['url'])));
# Basteln
$daten_neu = "<hr><b>Name:</b> $name<br>
<strong>Ort:</strong> $ort<br>
<strong>Email:</strong> <a href='mailto:$email'>$email</a><br>
<strong>Homepage:</strong> <a href='$url'>$url</a><br>
<strong>Datum:</strong> " . date('d. F Y H:i') . "<br>
<strong>Eintrag:</strong><br>
$kommentar<br>\n\n";
# Hier wird es ernst:
if ($neu_vor_alt) {
$daten=$daten_neu.$daten_alt;
} else {
$daten=$daten_alt.$daten_neu;
}
# Flatfile öffnen und überschreiben:
$datei = fopen($filename,"w");
fwrite($datei, $daten);
fclose($datei);
# Umleitung wegen Reload:
header("Location: $gb_uri");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
</head>
<h1>Gästebuch</h1>
<form method="POST">
<pre>
Name: <input type="text" name="name">
eMail: <input type="text" name="email">
URL: <input type="text" name="url">
Kommentar:
<textarea name="kommentar"></textarea>
<input type="submit" name="abschicken" value="abschicken">
</pre>
</form>
<?php
if ($daten_neu.$daten_alt != "") {
if ($neu_vor_alt) {
print $daten_neu.$daten_alt;
} else {
print $daten_alt.$daten_neu;
}
} else {
print "<div style='font-weight:bold; text-align: center'>Es sind keine Einträge vorhanden!</div>";
}
?>
</body>
</html>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
$gburi="http://localhost/test/gb.php";
change to: (Typo...)
$gb_uri="http://localhost/test/gb.php";
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
jetzt kapier ich gar nichts mehr. er zeigt mir einen parse-error in der </html> zeile an!?!?!
du hast aber alles in ein script geschrieben, oder?
Moin!
du hast aber alles in ein script geschrieben, oder?
Komplett lauffähig, mit Wiederholsperre und allem Schnickschnack:
https://forum.selfhtml.org/?t=87761&m=522319
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hello fastix®,
Wir wissen also PHP, Gästebuch, Flatfiles. Leider wissen wir sonst nichts über Dein Gästebuch. Und das ist zuwenig um Dir helfen zu können.
Versetze uns doch in den erforderlichen Wissensstand :)
Das sehe ich anders. Ich sehe zwar auch schon einige der möglichen Fehlerquellen dabei, aber wenn die Einträge vorwärts sauber ausgelesen werden können (trotz Zeilenumbrüchen), dann werden sie es rückwärts bestimmt auch.
@ Aleks,
Ich nehme nun einfach mal an, dass die Datei komplett Satz in ein Array eingelesen wird, bei dem jeder Datensatz ein eigenes Element belegt.
Dann kannst Du http://de.php.net/manual/en/function.array-reverse.php benutzen, und Deine Ausgaberoutine mit dem Ergebnis wie bisher beschicken.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hey ihr zwei,
schaut auch bitte mal dieses script an, habe ein bisschen rumexperimentiert. das lustige ist, das mir anfang als output nichts angezeigt wurde. da ich meinen fehler nicht erkannt habe, wollte ich mit var_dump() den inhalt der variablen ausgeben lassen. und siehe da, auf einmal zeigte mir der browser meine gästebuch einträge in der gewünschten reihenfolge an, allerdings mit array auswertung und das sieht natürlich nicht so schön aus. also wo steckt mein fehler?
<?
$stream = ("eintraege.txt");
if (isset($abschicken)){
$datei = fopen("eintraege.txt","a");
$kommentar = ereg_replace("\n","<br>",$kommentar);
$kommentar = stripslashes($kommentar);
$daten = "<hr><b>Name:</b> $name<br>
<b>Ort:</b> $ort<br>
<b>Email:</b> <a href=mailto:$email>$email</a><br>
<b>Homepage:</b> <a href=$url>$url</a><br>
<b>Datum:</b> " . date('d. F Y H:i') . "<br>
<b>Eintrag:</b><br>
$kommentar<br>\n\n";
fwrite($datei,$daten);
fclose($datei);
}
if (file_exists("eintraege.txt")){
$filehandle = fopen("eintraege.txt","r");
$stream = fread($filehandle, filesize("eintraege.txt"));
$hier_array = explode('#######',$stream);
$umsortiere_array = array_reverse ($hier_array);
var_dump($umsortiere_array);
} else {
print "<center><b>Es sind keine Einträge vorhanden!</b></center>";
}
?>
Hello,
hey ihr zwei,
schaut auch bitte mal dieses script an, habe ein bisschen rumexperimentiert. das lustige ist, das mir anfang als output nichts angezeigt wurde. da ich meinen fehler nicht erkannt habe, wollte ich mit var_dump() den inhalt der variablen ausgeben lassen. und siehe da, auf einmal zeigte mir der browser meine gästebuch einträge in der gewünschten reihenfolge an, allerdings mit array auswertung und das sieht natürlich nicht so schön aus. also wo steckt mein fehler?
<?
$stream = ("eintraege.txt"); ## wozu ist das gut?
if (isset($abschicken)) ## das ist hässlich. ==> if (isset($_POST['abschicken'])
{
$datei = fopen("eintraege.txt","a");
$kommentar = ereg_replace("\n","<br>",$kommentar);
$kommentar = stripslashes($kommentar);
$daten = "<hr><b>Name:</b> $name<br>
<b>Ort:</b> $ort<br>
<b>Email:</b> <a href=mailto:$email>$email</a><br>
<b>Homepage:</b> <a href=$url>$url</a><br>
<b>Datum:</b> " . date('d. F Y H:i') . "<br>
<b>Eintrag:</b><br>
$kommentar<br>\n\n";
fwrite($datei,$daten);
fclose($datei);
}if (file_exists("eintraege.txt")){
$filehandle = fopen("eintraege.txt","r");
$stream = fread($filehandle, filesize("eintraege.txt"));
$hier_array = explode('#######',$stream);
$umsortiere_array = array_reverse ($hier_array);
var_dump($umsortiere_array);} else {
print "<center><b>Es sind keine Einträge vorhanden!</b></center>";
}
?>
Harzliche Grüße aus http://www.annerschbarrich.de
Tom