 |
29.05.2006, 13:32
|
#1 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| PHP-Formular: Zweites Absenden verhindern? Hi,
ihr habt doch bestimmt einen genialen Trick für folgendes Problem auf Lager:
Ich möchte verhindern, dass ein Benutzer nach dem Absenden eines Formulars mit dem Zurück-Button seines Browsers die Daten ein zweites mal eingeben kann.
Meine Lösungsvorschläge:
1. eine ID beim Aufrufen des Formulars generieren und diese in einer Datenbank speichern, wurde das Formular bereits gesendet, wird es beim nächsten mal nicht noch einmal ausgeführt.
2. man lässt nur eindeutige Datenbankeinträge zu, sprich überprüft, ob der Eintrag schon vorhanden ist.
Aber bei beiden Lösungen muss ich nochmal die Datenbank fragen, gibt es hier keine geschickte Methode mit versteckten Eingabefeldern, um ein nochmaliges Absenden zu verhindern? | Fabian
News-Redakteur
[TweakPC Team] "Only wimps use tape backup: _real_ men just upload their important stuff
on ftp, and let the rest of the world mirror it" (Zitat Linus Torvalds) |
| |
29.05.2006, 16:57
|
#2 (permalink)
| | Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: PHP-Formular: Zweites Absenden verhindern? Du kannst auch Session-Variablen setzen..
Auf deiner Eintrageseite: PHP-Code: <? session_start(); if (!isset($_SESSION("gesendet"))) { $_SESSION("gesendet")=true; //Eintrag in der Datenbank machen } else { echo "Nur ein Eintrag pro Person!!"; } ?> Wenn ein Benutzer dann aber irgendwann später nochmal auf die Seite kommt, oder sie SessionID ändert kann er sich nochmal eintragen..
Ansonsten würd ich den Ansatz mit der Eindeutigkeit weiterverfolgen, du kannst z.B. einen eindeutigen Index auf alle Spalten setzen, dann bekommst du eine Fehlermeldung, wenn du nochmal genau das selbe in die DB schreiben willst.. | |
Geändert von Markus (10.06.2006 um 19:54 Uhr)
|
| |
29.05.2006, 17:31
|
#3 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| AW: PHP-Formular: Zweites Absenden verhindern? Na danke schonmal, ich denke ich mache eine Kombination.
Die reine "Ist ein Eintrag schon da"-Sicherung ist mir etwas wenig, weil man dann ja nur eine kleine Änderung gemacht haben kann.
Aber die Session-ID muss ich immer intern nochmal auf dem Server speichern, oder kennt da jemand noch einen Trick? | | |
| |
29.05.2006, 23:33
|
#4 (permalink)
| | Polsterwaffenkampfsportle r
Registriert seit: 29.10.2003 Ort: Double-U-UpperValley
Beiträge: 14.522
| AW: PHP-Formular: Zweites Absenden verhindern? einfach nach dem absenden einen redirect auf die seite ohne dem POST haufen im request setzen
header:location('meineseite.php'); | | |
| |
30.05.2006, 06:31
|
#5 (permalink)
| | Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: PHP-Formular: Zweites Absenden verhindern? Zitat: |
Zitat von tele einfach nach dem absenden einen redirect auf die seite ohne dem POST haufen im request setzen
header:location('meineseite.php'); |
Das mit der Session hab ich ja oben quasi schon drin, einfach da wo
//Eintrag in der Datenbank machen
steht deine SQL-Anfrage zum Speichern der (Adress?)Daten machen..
das ganze geht natürlich auch über cookies.. PHP-Code: <? if (!isset($_COOKIE("gesendet"))) { setcookie("gesendet", true, time()+3600*24*30); /* expire in 30 Days */ //Eintrag in der Datenbank machen } else { echo "Nur ein Eintrag pro Person!!"; } ?> | |
Geändert von Markus (10.06.2006 um 19:54 Uhr)
|
| |
30.05.2006, 07:01
|
#6 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| AW: PHP-Formular: Zweites Absenden verhindern? Zitat: |
Zitat von tele einfach nach dem absenden einen redirect auf die seite ohne dem POST haufen im request setzen
header:location('meineseite.php'); | Eine automatische Weiterleitung habe ich bereits eingebaut, aber der User kann doch trotzdem den Zurück-Button im Browser nutzen, oder sehe ich das falsch?
Oder macht das header:location etwas andere als echo-redirect... | | |
| |
30.05.2006, 07:27
|
#7 (permalink)
| | Hardware Freak
Registriert seit: 10.04.2002 Ort: Wernigerode
Beiträge: 7.471
| AW: PHP-Formular: Zweites Absenden verhindern? Hi,
ich kann dir leider nicht sagen wies geht. Aber vielleicht kannst du die Gültigkeit der Eingabemaske Löschen.
Ne Art ID die zugeteilt, wird wenn das Formularfenster geöffnet wird (Also der Link oder Button mit dem Man zum Formular kommt). Wenn das Formular abgesendet wurde, wird die ID ungültig.
Die ID müsstest du meiner Meinung nach nicht in ner DB Speichern. Sondern als Laufzeitvariable. Klick Variable erzeugen. senden Variable rücksetzen.
Leider kenn ich mich mit PHP nicht aus. Aber ich würde versuchen in der Richtung nach ner Lösung zu suchen. | |
Geändert von BomberD (30.05.2006 um 07:30 Uhr)
|
| |
30.05.2006, 08:21
|
#8 (permalink)
| | Nachtduscher
Registriert seit: 22.01.2002
Beiträge: 12.569
| AW: PHP-Formular: Zweites Absenden verhindern? Sagt mal lest ihr BenniG.´s Posts nicht? Er hat quasi alles schonmal geschrieben, was ihr hier vorschlagt, sogar mir Codebeispielen. | Ihr seid ja nur neidisch, weil ich der einzige bin, zu dem die leisen Stimmen sprechen! TweakPC IRC Channel: #tweakpc im Quakenet (irc.quakenet.org) Satzzeichen folgen direkt hinter einem Wort. Es ist kein Leerzeichen dazwischen! |
| |
30.05.2006, 08:34
|
#9 (permalink)
| | Hardware Freak
Registriert seit: 10.04.2002 Ort: Wernigerode
Beiträge: 7.471
| AW: PHP-Formular: Zweites Absenden verhindern? Gelesen schon, aber überlesen. Sry Benny.
Meine Kollegin hat noch gemeint sie haben mal etwas ähnliches gemach tund im PHP Formular nach dem Erfolgreichen Senden die Variablen in den Feldern gelöscht. Das heist die Eingabefelder sind beim zurückgehen nach dem Senden wieder leer.
Sie ist der Meinung, dass das so auch gehen sollte. | | |
| |
30.05.2006, 08:48
|
#10 (permalink)
| | Overclocker
Registriert seit: 24.05.2002
Beiträge: 200
| AW: PHP-Formular: Zweites Absenden verhindern? Mit autocomplete hat man so ein form dann in null komma nix wieder mit den alten werten gefüllt 
Wenn man ein Cookie setzt, ob das Formular ausgefüllt wurde (wird bei einigen umfragen (z.B. bei Onlinekosten) so gemacht) hat man schonmal eine Menge User ausgesperrt, wer von denen weiß schon wie man Cookies löscht 
Die Eingabefelder löschen kannst du eh nur Clientseitig per Javsscript z.B. .. | | |
| |
05.06.2006, 20:43
|
#11 (permalink)
| | Stickstoff Junkie
Registriert seit: 02.02.2002 Ort: Jena
Beiträge: 3.678
| Lösung Soderle,
ich habe in Anlenung an die Lösung von BenniG folgendes eingebaut: PHP-Code: <?php session_start(); if ($_SESSION[reload]=='no') {echo 'Weiterleitung';exit;} $_SESSION[reload]='no'; ?> Das ganze wird dann noch mit einem Check auf doppelten Eintrag in der Datenbank kombiniert, damit nicht bei einem zweiten seperaten Aufruf nochmal eingetragen wird.
Also Danke für den Tip ... die positive Bewertung dürfte dich erreicht haben. | |
Geändert von Markus (10.06.2006 um 19:55 Uhr)
|
| |
10.06.2006, 19:55
|
#12 (permalink)
| | BofH
Registriert seit: 22.01.2002
Beiträge: 2.371
| AW: PHP-Formular: Zweites Absenden verhindern? und wenn man [ php ] anstatt code nutzt siehts auch noch schön aus | | |
| |  | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | | | | Ansicht | Thema bewerten | Linear-Darstellung | |
Forumregeln
| Es ist dir erlaubt, neue Themen zu verfassen. Es ist dir erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. | | |