• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mehrfaches versenden von Formularen vorbeugen

Status
Für weitere Antworten geschlossen.

Joda1994

Neues Mitglied
hi,

wie macht man, das ein formular nur einmal durch einen bestätigungsklick abgesendet wird??? bei einer aktualisierung sollte es dann nicht mehr abgesendet werden. gibts da ne möglichkeit??
 
Werbung:
weiterleitung mittels

header('Location: ./');

oder nen Captcha
 
Werbung:
Session Id

Hallo,

ich hatte das mal mit einer SESSION ID gelöst welche mit dem Formular wieder an das aufrufende Script übergeben wurde.

1. Abfrage ob SESSION ID == GET ID ist
2. mit der Funktion md5(microtime()); eine neue SESSION ID erzeugen
3. Bedingte einmalige Ausgabe des Formulars
4. mit <input type=\"hidden\" name=\"id\" value=\"".$_SESSION['id']."\"></input> die ID mit dem Formular an das aufrufende Script übergeben.
5. Bedingte Ausgabe einer Bestätigung mit Link zum Formular

Nach dem Absenden ist Punkt 1 erfüllt und eine neue SESSION ID wird erzeugt. Ein Browser Reload würde nur die Bestätigung neu laden. Über den Browser-Zurück-Button erhält man auch nicht mehr das Formular, da in diesem Fall Punkt 1 (neue SESSION ID != alte GET ID) nicht mehr erfüllt wäre.

Bei mir wird wie gesagt das Formular nach dem Absenden nicht mehr angezeigt, da ich dies durch eine IF-Bedingung steuere. Über den Link in Punkt 5 wird die Bedingung wieder zurückgesetzt. Dadurch kann man den Browser so oft neu laden wie mal will, aber nix passiert.

Das Script funktioniert, ist aber sicher nicht der Weisheit letzter Schluss.

BG
elchivato
 
Ich würds auch mit ner Sessionvariable machen. Diese muss aber ggf. irgendwann auch mal zurück gesetzt werden, da mann ja sonst wirklich nur "nochmal senden" kann, wenn der Browser neugestartet wird oder die Session sonst wie ihre Gültigkeit verliert.

PHP:
<?php
if($_SESSION['isSend']!=true)
{
	// Form senden
	$_SESSION['isSend']=true
}
else
{
	// Meldung dass das Formular nur einmal gesendet werden darf
}
?>
 
So habe ich es auch gelöst und habe der Session den Wert time() gegeben.
Wenn die Zeit dann über 30min. ist, wird die Session gelöscht.


mfg. Marlin
 
Werbung:
Lol unsicher.

Was ist wenn einer einfach dann statt Firefox denn iNet-Explorer nimmt oder seine Temps leert?

Mach dir ne DB und trage jeweils die IP und die Sendezeit des Benutzers ein, und immer, wenn die IP 123.456.7.8 (:p, z. B.) nochmals das Formular benutzen will, also auf Senden klickt, dann kann man abprüfen, ob die Zeit schon um ist.

Also ich kann dir das gerne mal in Code erklären, nur will ich hier nicht alles aufschreiben und dann wars für die Katz :D


LG ;)
 
Lol unsicher.

Was ist wenn einer einfach dann statt Firefox denn iNet-Explorer nimmt oder seine Temps leert?

Mach dir ne DB und trage jeweils die IP und die Sendezeit des Benutzers ein, und immer, wenn die IP 123.456.7.8 (:p, z. B.) nochmals das Formular benutzen will, also auf Senden klickt, dann kann man abprüfen, ob die Zeit schon um ist.

Also ich kann dir das gerne mal in Code erklären, nur will ich hier nicht alles aufschreiben und dann wars für die Katz :D


LG ;)

Cookies werden doch von "eigentlich" jedem Brower unterstützt. Daher mein ich, dass man nicht diesen Umweg gehen muss. Außerdem könnte bei deiner Lösung jeder von dieser Ip keine Nachricht mehr senden und in großen Büros ist das nicht gut ;-)

Ich glaube der Schutz soll nur vor "F5" schützen ;-)

Marlin
 
Ohne DB?

Lol unsicher.

Was ist wenn einer einfach dann statt Firefox denn iNet-Explorer nimmt oder seine Temps leert?

Mach dir ne DB und trage jeweils die IP und die Sendezeit des Benutzers ein, und immer, wenn die IP 123.456.7.8 (:p, z. B.) nochmals das Formular benutzen will, also auf Senden klickt, dann kann man abprüfen, ob die Zeit schon um ist.

Also ich kann dir das gerne mal in Code erklären, nur will ich hier nicht alles aufschreiben und dann wars für die Katz :D


LG ;)


Hallo,

hast du eine Idee wie man das ohne DB hinbekommt?

BG
elchivato
 
Werbung:
Lol Cookies.

Kennst du das beim Firefox:

Extras > Private Daten löschen > Cookies...

Und was nun? Schutz weg. Machs mit ner DB, dann haste das.... ;)


Naja zur Frage ohne DB.
Du kannst alles in eine Textdatei schreiben und diese laufend aktualisieren lassen, z.B. wenn ein User deine Seite aufruft oder mit der Nvaigation wohinklickt, dass es die Textdatei aufruft, die Uhrzeit prüft und dann schaut, was löschen und was nicht.




LG ;)
 
Es geht hier nciht um den Spamschutz sondern um das verhindern von doppelten einträgen durch aktuallisieren der seite...

wenn man spam verhindern will baut man nen benutzerfreundliches klick captcha ein :p
 
Werbung:
Lol Cookies.
Kennst du das beim Firefox:
Extras > Private Daten löschen > Cookies...
Und was nun? Schutz weg. Machs mit ner DB, dann haste das.... ;)

Kennste das bein Tcom Sppedcontrol "Verbindung herstellen" und "Verbindung Trennen"?? Oder Router an und wieder aus?
Und was nun? Schutz weg. Machs mit einem Captcha;-)

Ich meine man braucht eigentlich nur einen Schutz vor F5, außerdem hätte ich keine Fehlermeldung ausgeben wie "Deine Ip-Adresse ist gesperrt" oder sowas.


Marlin
 
Zu dem ausgeben von "Deine IP Adresse ist gesperrt" muss ich dem marlin-b recht geben.

Ich habe hier schon oft gesehen wie einige Leute einfach viel zu viele Informationen an die User Preisgeben wie zum beispiel bei einem Login:

Code:
Dein Benutzername stimmt nicht mit dessen Passwort überein.

Der User wird doch wohl wissen das der Name Existiert, wenn er ihn eingegeben hat...

Und wenn ein Böser man daher kommt und Spam verbreiten will wird er nach dem Zweiten versuch wohl auch wissen das er einfach nicht mehr Senden kann, da hinter der Homepage ein Guter Programmierer saß...

Also ein Captcha und eine kleine Maßnahme gegen Personen die deine Seiten zu schnell hintereinander aufrufen reichen vollkommen.
 
Ich habe hier schon oft gesehen wie einige Leute einfach viel zu viele Informationen an die User Preisgeben wie zum beispiel bei einem Login:

Code:
Dein Benutzername stimmt nicht mit dessen Passwort überein.

Der User wird doch wohl wissen das der Name Existiert, wenn er ihn eingegeben hat...

Wie z.B. Rapidshare:
Code:
Benutzer gefunden, doch Passwort ist falsch.
Jetzt steht dort nur noch, das Passwort ist falsch. Jedoch weiß man dann, dass der Benutzer existiert.


Marlin
 
Werbung:
Wie z.B. Rapidshare:
Code:
Benutzer gefunden, doch Passwort ist falsch.
Jetzt steht dort nur noch, das Passwort ist falsch. Jedoch weiß man dann, dass der Benutzer existiert.


Marlin
Ich sage immer Benutzername oder Passwort ist falsch!

Zur eigentlichen Sorge:
Der/Die/Das Captcha ist eigentlich die beste Lösung.
 
mir gehts ja gar nich darum, dass man blockiert werden soll oda so. es soll einfach nur f5-drücker blockieren, sodass man immer neu auf den button klicken muss. kann man die $_POST-variablen nich irgendwie unsetten???
 
Werbung:
habs. hab da jez noch
HTML:
<meta http-equiv="refresh" content="0"; URL="showusers.php">
eingebaut, dann gings.
 
habs. hab da jez noch
HTML:
<meta http-equiv="refresh" content="0"; URL="showusers.php">
eingebaut, dann gings.

Dann leitest du ja einfach nach dem Absenden des Formulares weiter :D, was ist wenn ich eine Seite zurück gehe und dann aktualisiere, dann hast dus auch wieder doppelt.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben