mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 07:05 Benutzername: Passwort: Auto-Login

Thema: PHP Gästebuch ohne DB - 2 Fragen vom 26.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP Gästebuch ohne DB - 2 Fragen
Autor Nachricht
knuerpsel
Threadersteller

Dabei seit: 28.02.2007
Ort: -
Alter: 37
Geschlecht: Weiblich
Verfasst Di 26.06.2007 15:00
Titel

PHP Gästebuch ohne DB - 2 Fragen

Antworten mit Zitat Zum Seitenanfang

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 Lächel

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>";
}
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 26.06.2007 15:44
Titel

Antworten mit Zitat Zum Seitenanfang

Zum ersten:

http://www.php.net/file
http://www.php.net/function.array-reverse
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 26.06.2007 18:46
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
knuerpsel
Threadersteller

Dabei seit: 28.02.2007
Ort: -
Alter: 37
Geschlecht: Weiblich
Verfasst Di 26.06.2007 19:58
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mi 27.06.2007 01:18
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
Account gelöscht


Ort: -
Alter: -
Verfasst Mi 27.06.2007 09:35
Titel

Antworten mit Zitat Zum Seitenanfang

Reloads verhindert man gewöhnlich mit dem Vergleich einer eindeutigen Id, der sog. Form-Challange. [/list]Herr Köhntopp schreibt:

http://www.php-faq.de/q/q-phplib-reloads.html

Auch schön, das Affenformular:

http://www.php-faq.de/q/q-stil-normalform.html


Zuletzt bearbeitet von am Mi 27.06.2007 09:50, insgesamt 1-mal bearbeitet
 
 
Ähnliche Themen Gästebuch mit php
cgi gästebuch
Gästebuch
Gästebuch
STRATO | Gästebuch
Gästebuch o.ä. mit Antwortfunktion
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.