Autor |
Nachricht |
knuerpsel
Threadersteller
Dabei seit: 28.02.2007
Ort: -
Alter: 37
Geschlecht:
|
Verfasst Di 26.06.2007 15:00
Titel PHP Gästebuch ohne DB - 2 Fragen |
|
|
Hallo!
Also ich mach ein Gästebuch mit PHP und ner *.txt Datei in dem die Einträge abgelegt werden. Dabei habe ich zwei Probleme:
1.) Datensätze werden durch den Append-Modus leider falschrum wiedergegeben bzw. in die Datei eingetragen... Wie kann ich das umgehen?
2.) Drückt man auf Aktualisieren geht der Spaß mit dem Formular und dem Eintragen nochmal von vorn los... Wie kann ich das abstellen?
Suche jetzt schon 2 Tage im Web und das richtige war noch nicht dabei. Wäre sehr schön wenn mir jemand helfen kann, und besonders schön wenns schnell und einfach geht
Dankeschön im Vorraus!
knuerpsel
Anbei mein Code:
//Datensatz erstellen
$datensatz=$a."\n".$b."\n".$c."\n".$d."\n\n";
//\n ist ein Zeilenumbruch nach jedem Eintrag
//Eintrag kann erfolgen, wenn Texte eingefügt wurden
if($a && $b && $d){
/*Alle Datensätze sollen in der Datei gaestebuch.txt gespeichert werden*/
$dateiname="gaestebuch.txt";
/*Das Gästebuch muß zuerst geöffnet werden im Anhängemodus -APPEND*/
$datei=fopen($dateiname,"a");
//"a" ist der Append-Modus
//fopen heißt "file open"
//hier wird der datensatz in die Textdatei geschrieben
$input=fputs($datei,$datensatz);
if($input){echo "Danke für den Eintrag!";}
else{echo "Sie haben keinen kompletten Eintrag vorgenommen!";};
fclose($datei);
}
else{echo "Bitte tragen Sie sich in unser Gästebuch ein";};
//ab hier beginnt die ausgabe der einträge
$dateiname="gaestebuch.txt";
$datei=fopen($dateiname,"r"); //r bedeutet READ-modus
//nur gefüllte zeilen lesen
$zeile=true;
while($zeile) {
$zeile= fgets($datei,1000);
echo $zeile;
echo "<br>";
}
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
|
|
|
|
Anzeige
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 26.06.2007 18:46
Titel
|
|
|
Zitat: | Drückt man auf Aktualisieren geht der Spaß mit dem Formular und dem Eintragen nochmal von vorn los... Wie kann ich das abstellen? |
Wenn man wo auf "Aktualisieren" drückt?
Die Funktion im Browser? Oder einen Button/Link in deinem Formular?
Und was sollte passieren, wenn man die Seite aktualisiert?
Aktualisierst du die Seite, dann wird sie neu angefordert/ausgeliefert.
Was ist das Problem bei diesem Verhalten?
Was sollte denn deiner Meinung nach passieren?
|
|
|
|
|
knuerpsel
Threadersteller
Dabei seit: 28.02.2007
Ort: -
Alter: 37
Geschlecht:
|
Verfasst Di 26.06.2007 19:58
Titel
|
|
|
Wenn man im Browser auf Aktualisieren drückt, nachdem man sich ins Gästebuch eingetragen hat dann kriegt man folgende Nachricht :
Die Seite die Sie ansehen wollen, enthält POST-Daten. Wenn Sie die Daten nochmals senden, wird jede Aktion, die das Formular ausgeführt hat, wiederholt. Um die Daten nochmals zu senden klicken sie OK...
=> Also wird der gleiche Eintrag nochmal erstellt. Das ist doch blöd oder? Kann man da nichts gegen machen?
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Mi 27.06.2007 01:18
Titel
|
|
|
Zitat: | hat dann kriegt man folgende Nachricht :
Die Seite die Sie ansehen wollen, enthält POST-Daten. |
Ja, das ist logisch.
Es wurde ja schließlich auch ein POST-Request gesendet.
Bei einer GET-Anfrage wäre es das Gleiche.
Wenn du http://example.com?param=irgendwas anforderst und dann auf "Aktualisieren" klickst, wird ja auch wieder http://example.com?param=irgendwas angefordert und nicht nur http://example.com.
Zitat: | => Also wird der gleiche Eintrag nochmal erstellt. Das ist doch blöd oder? Kann man da nichts gegen machen?
|
Natürlich kannst du was dagegen machen.
Du könntest eine zusätzliche Abfrage einbauen und einen Eintrag nur dann vornehmen, wenn dieser nicht mit dem vorangegangenen identisch ist.
Das ändert dann allerdings nichts an der Tatsache, daß beim Aktualisieren diese Meldung kommt.
Wenn du das verhindert willst, solltest du nach einem erfolgreichen Eintrag in das Gästebuch auf eine andere Seite umleiten.
Das könnte eine Seite sein, wo du "Danke für den Eintrag. Klicken Sie hier, um zurück zum Gästebuch zu kommen." anzeigst.
Oder du könntest einfach automatisch wieder auf die gleiche Seite leiten. Ich weiß ja nicht, ob Eingabeformular und GB-Anzeige bei dir voneinander getrennt sind...
Vermutlich sieht es so aus, daß du ein Gästebuch mit den Einträgen hast und darunter dann dein Eingabeformular, ja?
Und nach dem Abschicken wird der neue Eintrag dann nicht gleich gezeigt..?
Darum der Versuch mit der Aktualisierung..?
Nach dem erfolgreichen Eintrag solltest du mit der Funktion header() umleiten, z.B.:
Code: | <?php
header( "Location: http://www.example.com/" );
exit;
?> |
Der Aufruf der Funktion header() funktioniert allerdings nur dann, wenn noch keine andere Ausgabe zum Browser erfolgt ist.
Sobald du nämlich bereits HTML-Code (oder auch nur ein einziges Leerzeichen) zum Client gesendet hast, wurden damit auch bereits HTTP-Header verschickt und eine Umleitung mittels header() kann nicht mehr funktionieren.
Ich weiß nicht, wie dein komplettes Script und dein HTML-Formular aussieht, aber eventuell müßtest du dein Script so umbauen, daß der Aufruf von header() vor jeder HTML-Ausgabe erfolgt.
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
|
|
|
|
|
|
|
Ähnliche Themen |
Gästebuch
Gästebuch mit php
cgi gästebuch
Gästebuch
wie resete ich ein gästebuch???
STRATO | Gästebuch
|
|