PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden (http://www.selfphp.de/forum/showthread.php?t=21631)

mimatete 13.06.2009 14:02:06

doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Hallo liebe Experten!

Mein Gästebuch, wohl bemerkt ohne DB, mach endlich, was es soll, sogar in Farbe (www.meinphp.mimatete.de/p3.php). Es macht aber sogar mehr - und zwar wenn man ein Beitrag abschickt und dann die Seite aktualisiert (per Schalter des Browsers oder F5, ich habe Firefox) schreibt das Prog den letzten Beitrag noch Mal ins Buch (dabei sind die Imput-Felder schon leer).
Ich habe folgendes Versucht (nicht gleichzeitig):
den Abschnitt mit
"öffne Datei mit Option 'a', schreibe ein Satz mit Tilden dazwischen, schließe Datei"
habe ich

1. zwischen IF (isset($_POST["Senden"])) und unset($_POST["Senden"]); gestellt
2. zwischen if (($_POST["Senden"])=="Abschicken") und $_POST["Senden"] =""; gestellt

(es handelt sich um die SUBMIT-schaltfläche mit dem Namen SENDEN und dem Wert ABSCHICKEN)

Ich glaube, dass man das Schreiben in die Datei unterbinden kann. Ziel ist: NUR dann schreiben, wenn die Daten per diese besondere Schaltfläche gesendet werden und nicht mit F5.
Bitte um ein Wink. Ich habe keinen Code eingefügt, weil Ihr Menschen und NICHT Parser seid. Mein Problem ist wirklich gut beschrieben.
Danke
mimatete

DokuLeseHemmung 13.06.2009 14:09:15

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Erzeuge eine zufalls "TAN" speichere sie in Session und gib sie als verstecktes Formfeld mit. Vor dem Speichern prüfe die gültikeit der TAN. Nach dem Speichern lösche die TAN in Session.

mimatete 14.06.2009 14:16:24

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Herzlichen Dank.

Folgendes habe ich gemacht:
1. gleich am Anfang des Formulars folgene Zeile eingefügt:
<input type="hidden" name="istweg" value=1>

2. vor dem öffnen der Datei mit den Einträgen:
if ($_POST["istweg"] == 1)

3. Nach dem Schließen der Datei zwei Varianten ausprobiert:
  • unset($_POST["istweg"]);
  • $_POST["istweg"] = "";

Leider ist das Programm sehr stur und wiederholt die Ausgabe weiter. Jede Aktualisierung bring eine neue Zeile in die Datei. Hmmmm.....
Ich habe auch nach dem eine Zeile in die Datei geschrieben wurde die entsprechende Variable auf NIX gesetzt. Wo befinden sich die Daten, die wiederholt reigeschrieben werden? im Cache? Ich habe zwar sehr viel über Computer gelernt, aber dieses Verhalten war nicht dabei :(
Hat noch jemand eine Idee?
Stört es, dass die Plausibilitätskontrolle von JS realisiert wird? Ich habe gelesen, dass es ohne Probleme geht und sogar empfohlen wird.

Danke
mimatete

DokuLeseHemmung 14.06.2009 14:22:33

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Zitat:

Wo befinden sich die Daten, die wiederholt reigeschrieben werden? im Cache?
Im Browser Cache!
Und da kommst du mit PHP nicht dran.
Es ist also sinnfrei, im Post Array rumzurühren.

Indyk 15.06.2009 11:01:26

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Hallo mimatete,

du hast zwei gebräuchliche lösungen zu auswahl, einmal die von DokuLeseHemmung vorgeschlagene token lösung, und zum anderen kannst du den user nach der formularverarbeitung weiterleiten, ich zitiere:
Zitat:

Zitat von Besser PHP Programmieren, Kapitel 9 Praxis-Lösungen für den Programmieralltag
Eine Zweite Möglichkeit, mit dem Problem umzugehen, ist, den Benutzer einfach zu "forwarden". Das heißt, dass der User, nachdem die Daten gespeichert wurden, mit Hilfe der Funktion header() umgeleitet wird. Auch damit kann man die Seite "reaload-sicher" machen, da das Versenden der Daten dann nicht mehr in der History des Browsers bleibt; es wird durch die Weiterleitung ersetzt.


mimatete 15.06.2009 18:02:52

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Ach, Ihr lieben Experten,

ich habe nicht nur die 2 Möglichkeiten.

Jetzt gehen "Eingabe" und "Auswertung + Darstellung" getrennte Wege und sind in Frames eingebetet. Ich weiss, dass man Frames nicht mag. Aber jetzt ist mein GB sehr schön und funktioniert (http://www.meinphp.mimatete.de/GB2/gb2.htm).

Wenn man programmiert darf man sich nicht so versteifen auf 2 oder 3 Lösungen.
Vielle Wege führen ins Ziel, auch wenn sie manchmal sehr komisch aussehen.

Ich werde versuchen Euch nicht mehr zu beanspruchen. Ihr seid mir ... zu trocken. Vielleicht, weil Ihr (alle?) Männer seid. Es ist wirklich nicht angenehm von Euch beratschlagt zu werden (mit eine einzige Ausnahme - DokuLeseHemmung). Ich habe keine Komplexe oder Vorurteile, vielleicht bin ich in meiner Krankheit ein wenig dünnhäutig geworden.
Nicht alle Programmierer sind gefühllose Eremiten. Und nicht alle sind Männer ;o)

mimatete

Indyk 15.06.2009 18:12:37

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Hallo mimatete,

Zitat:

du hast zwei gebräuchliche lösungen zu auswahl
Damit meinte ich das es 2 Wege gibt die sich bewehrt haben und auf die oft zurück gegriffen wird. Da steht in keinster weise das es nicht möglich ist diese Problematik auf 1000000 anderen wegen zu lösen.

Das man frames nicht benutzt hat seine Gründe, die dir anscheinend nicht wichtiger sind als deine exotische lösung.

Tut mir leid wenn wir versuchen schnell und kompetent zu helfen und keinen kaffe und kuchen verteilen.

DokuLeseHemmung 15.06.2009 18:46:18

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Danke für die Blumen.
(Nicht alle sehen das so)
Eigentlich bin ich hier dafür "berühmt", dass ich "Denkblockierte" ordendlich zusammenfalte.
(habe hier fast mehr Feinde als Freunde)

Aber das mit dem M/W Gedöns ist mir wurscht. Ich antworte als Neutrum(zumindest versuche ich es).

Zum Thema:
Auch meines bescheidenen Wissens nach, gibts nur diese 2 genannten praktikablen Möglichkeiten. Wie du das per Frames abgehandelt hast, KA. Kann ich mir auch nicht vorstellen.

PS:
Ich habe es gerade mal getestet...
Doppelte Einträge sind über F5 problemlos möglich.

Mache meine Beiträge ruhig weg.....(zumindest den doppelten)

Big-Gremlin 16.06.2009 05:19:58

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
@DokuLeseHemmung

zusammenfalten??? naja...ich finde nur, dass du teils eine seltsame Art zu antworten hast wenn man nicht gleich auf den Punkt kommt Oo

wie auch immer....das mit den Frames klappt bei mir auch nich so ganz...kenne auch nur die 2 besagten Lösungen...wobei ich eher zur zweiten tendiere.... man muss bei header() halt nur aufpassen, dass keine Ausgabe vorher kommt

cortex 16.06.2009 09:27:31

AW: doppelte einträge im gästebuch nach browseraktualisierung (oder F5) vermeiden
 
Zitat:

Zitat von mimatete (Beitrag 128557)
Ich weiss, dass man Frames nicht mag

nein - frames sind lediglich keine antwort auf (d)ein problem. aber nun... jeder, wie er / sie es mag.

Zitat:

Zitat von mimatete (Beitrag 128557)
Wenn man programmiert darf man sich nicht so versteifen [...]

mich persönlich beschleicht ein sehr eigenartiges gefühl, wenn ein user im anfänger-stadium zuerst einmal (grundlegende) hilfe benötigt und plötzlich kluge sprüche macht.

Zitat:

Zitat von mimatete (Beitrag 128557)
Es ist wirklich nicht angenehm von Euch beratschlagt zu werden [...]

die hand, die einen füttert, beisst man nicht. ist dir das schon einmal zu ohren gekommen?

Zitat:

Zitat von mimatete (Beitrag 128557)
Ich habe keine Komplexe oder Vorurteile, vielleicht bin ich in meiner Krankheit ein wenig dünnhäutig geworden.

ach gottchen... und deswegen schwingst du dich zum botschafter - sorry: zur botschafterin - der sensibilität auf und wirfst uns sowas hier an den kopf: Nicht alle Programmierer sind gefühllose Eremiten. verleiht dir deine gesundheitliche beeinträchtigung das recht, uns zu be- / verurteilen...? welche rolle spielt es, dass du (möglicherweise) weiblich bist?

mädchen... du gibst mir kraft am frühen morgen.

cx


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:25:04 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.