formular nur einmal senden...
leon
- php
juten morgen ;D
ich habe mal ne frage...
wie kann ich es per php unterbinden das ein formular mehrere male abgeschickt werden kann?
das problem ist wenn ich per formular was in die datenbank eintrage, dann dauert das manchmal ein bisschen und das formular bzw. der button ist nach dem senden noch kurz sichtbar, und wenn ich nun nocheinmal sende bevor er die informationen an das andere script weitergegeben, dann habe ich halt meherere einträge in der datenbank...
also ich kenne die jscript lösungen, aber die möchte ich nicht benutzen...
hat da jemand ne idee???
vielleicht eine blitzschnelle weiterleitung oder sowas?
oder ne sendebegränzung von 5 sekunden oder so?
viele
grüße
leon
Hallo,
ich würde eine eindeutige ID in als hidden field in der form mitschicken, die, wenn abgeschickt, aus einem table gelöscht wird. wird nun der request ein 2tes mal abgeschickt, und die id existiert nicht mehr, dann beendet sich das skript o.ä.
Ausserdem gibts noch die Attribute disabled mit denen du mit dem onsubmit event handler den absende button nach dem absenden "ausgrauen" kannst.
Gruss
Hallo,
ich würde eine eindeutige ID in als hidden field in der form mitschicken, die, wenn abgeschickt, aus einem table gelöscht wird. wird nun der request ein 2tes mal abgeschickt, und die id existiert nicht mehr, dann beendet sich das skript o.ä.
Ausserdem gibts noch die Attribute disabled mit denen du mit dem onsubmit event handler den absende button nach dem absenden "ausgrauen" kannst.Gruss
@all
ok danke für die hilfe leutz!
hmmm...
das mit den session muss ich mir mal jetzt angucken...
danke;)
@Eternius
könntest du mir deine idee näher erläutern, das mit den ID klingt gut
irgendwie gut...
hmmm...
"onsubmit event"
bräuchte ich nicht dazu jscript...
gruß
leon
Sup!
Du kannst sowieso nicht verhindern, dass Leute zweimal die gleichen Daten schicken - allerdings könntest Du es durchaus clientseitig zu verhindern *versuchen*. Nur darf sich der Server nicht darauf verlassen. Wenn der Server zu langsam ist, dann sollte er vielleicht die neuen Daten an einen Hintergrundprozess weiterreichen, der dann checkt, ob die Daten doppelt vorhanden sind, und ggf. nicht einträgt - der Prozess, der die neue Webseite ausliefert braucht dann nicht zu warten und kann sofort eine Antwort senden.
Ist natürlich etwas komplizierter zu programmieren.
Gruesse,
Bio
hallo,
hat da jemand ne idee???
das einfachste wäre imho auf der formularseite eine session zu starten,
diese auch wieder auf der 'result'-seite zu starten und mit an die db zu senden. beim db-zugriff diese session prüfen. ist ein db-eintrag mit der gleichen SID vorhanden, schreibst due einfch nicht nochmal.
ahoi, andi
juten morgen ;D
Moin!
wie kann ich es per php unterbinden das ein formular mehrere male abgeschickt werden kann?
Stichwort: Mehrfachposting. Ich hab das mal in PERL umgesetzt und hier beschrieben:
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=16&id=15
Das ist zwar nicht PHP, läßt sich aber sicher auch nach PHP umsetzen.
Wenn Du Lust hast, teste es!
http://perlbase.xwolf.de/cgi-bin/testforum.cgi
Hab da eine extra lange Sperrzeit für DEMO-Zwecke!
1. Ohne Eingabe [Nachricht senden] klicken -> es kommt eine FM, weil nichts eingegeben wurde
2. Nun innerhalb 20s reload machen, Frage "Formulardaten erneut senden" mit j beantworten.
--> jetzt steht geschrieben "Bitte keine Mehrfachpostings" ...
Erst nach 20s kannst du wieder senden. Natürlich kann und sollte die Sperrzeit i.d.Praxis ein bischen kleiner sein, ich würde den Wert auf 3..5 sec setzen, auf jeden Fall ist das abhängig davon, wie lange es braucht um nach einem POST eine neue Seite aufzubauen (wie lange der [senden-button] noch zu sehen ist).
Gruss, Rolf
Hello,
wie kann ich es per php unterbinden das ein formular mehrere male abgeschickt werden kann?
Wenn das Formular per ServerPost von einem Server an einen anderen abgeschickt wird, durch ordentliche und gewissenhafte Programmierung.
Wenn das Formular von einem Client abgeschickt wird, dann kann man das mit PHP gar nicht verhinder, dass dasselbe Formular mehrmals geschickt wird. Der User könnte sich das Ding ja auch speichern oder nachbauen. Wie man Formulare baut, steht ja schließlich in SelfHTML.
Man kann jetzt clientseitig mittels JavaScript dafür sorgen, dass sich das Formular durch Submit selbst vernichtet. Das ist der einfachste und schnellste Weg. Dann können aber nur noch User mit eingeschaltetem JavaScript überhaupt Posten, da bei positiv programmiertem Schutzmechanismus sonst keine action festgelegt ist.
Zum Verfahren mit Zertifikaten:
Beim Anfordern eines Formulars vom Server erhält dieses eine Form-ID,
die in die Session des Users eingetragen wird. jetzt kann manin zwei
Richtungen einen Schutz aufbauen:
1. Wenn ein User dasselbe Formular zweimal abschickt, ist beim
zweiten Eintreffen des requests die Form-ID bereits verbraucht
und daher kann der Server das Doppelposting erkennen
2. Wenn ein User das gleiche Formular zweimal anfordert, kann der
Server in der Session über die Formularklasse erkennen, dass
eventuell noch ein offener Vorgang dieser Klasse besteht, der mit
Vorrang abgearbeitet oder abgebrochen werden muss und kann
dem User eine Rückfrage schicken. Sagt der user: Oh Entschuldigung,
das erste Fenster hatte ich aus Versehen geschlossen, kann er
wieder auf den alten Status aufgesetzt werden.
Außerdem sollte man alle Formularanforderungen nur in benannten Fenstern durchführen. Das führt dann bei doppelter Anforserung wenigstens bei den meisten Browsern dazu, dass es keine mehrfachen Instanzen einer Formularklasse am Client gibt. Leider führt das bei Clients ohne JavaScript und ungeübten Usern auch oft dazu, dass dieser verwirrt wird, da er glaubt, keine Antwort zu bekommen. Wenn die Formularklasse nämlich schon eine Instanz auf dem Server hat, und das Fenster zufällig nach hinten gerutscht ist, bleibt es dort auch.
HTML alleine ist leider bis heute noch nichtn in der Lage, das Fesnter mit dem Focus auch nach oben zu bringen. Hier muss mMn dringend eine HTML-Funktion geschaffen werden, die der Client auch berücksichtigt.
Liebe Grüße aus http://www.braunschweig.de
Tom