Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   PHP-Formular: Zweites Absenden verhindern? (https://www.tweakpc.de/forum/programmiersprachen/37246-php-formular-zweites-absenden-verhindern.html)

Fabian 29.05.2006 13:32

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?

BenniG. 29.05.2006 16:57

AW: PHP-Formular: Zweites Absenden verhindern?
 
Du kannst auch Session-Variablen setzen..
Auf deiner Eintrageseite:
[php]
<?
session_start();
if (!isset($_SESSION("gesendet"))) {
$_SESSION("gesendet")=true;
//Eintrag in der Datenbank machen
} else {
echo "Nur ein Eintrag pro Person!!";
}
?>
[/php]
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..

Fabian 29.05.2006 17:31

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?

tele 29.05.2006 23:33

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');

BenniG. 30.05.2006 06:31

AW: PHP-Formular: Zweites Absenden verhindern?
 
[quote=tele]einfach nach dem absenden einen redirect auf die seite ohne dem POST haufen im request setzen


header:location('meineseite.php');[/quote] :confused:

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]
<?
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!!";
}
?>
[/php]

Fabian 30.05.2006 07:01

AW: PHP-Formular: Zweites Absenden verhindern?
 
[QUOTE=tele]einfach nach dem absenden einen redirect auf die seite ohne dem POST haufen im request setzen
header:location('meineseite.php');[/QUOTE]
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...

BomberD 30.05.2006 07:27

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.

_Smash_ 30.05.2006 08:21

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.

BomberD 30.05.2006 08:34

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.

BenniG. 30.05.2006 08:48

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. ..

Fabian 05.06.2006 20:43

Lösung
 
Soderle,

ich habe in Anlenung an die Lösung von BenniG folgendes eingebaut:

[php]<?php
session_start();
if ($_SESSION[reload]=='no') {echo 'Weiterleitung';exit;}
$_SESSION[reload]='no';
?>[/php]

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.

Markus 10.06.2006 19:55

AW: PHP-Formular: Zweites Absenden verhindern?
 
und wenn man [ php ] anstatt code nutzt siehts auch noch schön aus ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.