Was ist der beste Weg zu identifizieren, welches Formular übermittelt wurde?

8

Momentan, wenn ich meine Formulare entwerfe, möchte ich den Namen der Schaltfläche "Senden" gleich der ID des Formulars behalten. Dann, in meinem PHP, mache ich nur if(isset($_POST['submitName'])) , um zu überprüfen, ob ein Formular eingereicht wurde und welches Formular übermittelt wurde.

Erstens, gibt es irgendwelche Sicherheitsprobleme oder Konstruktionsfehler mit dieser Methode?

Ein Problem, auf das ich gestoßen bin, ist, wenn ich meine Formulare mit Javascript überlagern möchte, um dem Benutzer eine schnellere Validierung zu ermöglichen. Während ich zum Beispiel die serverseitige Validierung natürlich beibehalten muss, ist es für den Benutzer bequemer, wenn eine Fehlermeldung inline angezeigt wird, wenn eine Eingabe verwischt wird. Außerdem wäre es sinnvoll, beim Klicken auf die Schaltfläche Senden die gesamte Formularvalidierung bereitzustellen.

Wenn der Benutzer auf die Übergabeschaltfläche des Formulars klickt, halte ich daher die Standardaktion an, führe meine Überprüfung durch und versuche dann, die traditionelle Übergabefunktionalität zu reneablen, wenn die Validierung erfolgreich ist. Um dies zu tun, verwende ich die form.submit() Methode, aber leider sendet dies nicht die Übergabeschaltfläche Variable (wie es sein sollte, da form.submit () ohne Klicken auf eine Schaltfläche aufgerufen werden kann). Das bedeutet, dass mein PHP-Skript nicht erkennt, dass das Formular gesendet wurde.

Was ist der richtige Weg, um dies zu umgehen? Es scheint, als ob die Standardlösung darin besteht, ein verstecktes Feld in das Formular einzufügen, nachdem es die Validierung bestanden hat, die den Namen der ID des Formulars hat. Wenn dann form.submit () aufgerufen wird, wird dies anstelle des Submit-Buttons weitergegeben. Diese Lösung scheint mir jedoch sehr unpraktisch zu sein und so frage ich mich, ob ich sollte:

a) Verwenden Sie eine alternative Methode, um festzustellen, welches Formular gesendet wurde, das nicht darauf angewiesen ist, den Übergabeschalter zu übergeben. Wenn ja, welche Alternative gibt es? Offensichtlich ist es nicht besser, ein extra verstecktes Feld von Anfang an zu haben.

b) Verwenden Sie eine alternative Javascript-Lösung, die es mir ermöglicht, mein Nicht-Javascript-Design beizubehalten. Gibt es zum Beispiel eine Alternative zu form.submit (), die es mir erlaubt, zusätzliche Daten zu übergeben?

c) Saugen Sie es auf und fügen Sie einfach ein verstecktes Feld mit Javascript ein.

UPDATE: Ich habe die richtige Antwort akzeptiert, aber ich wollte nur meinen Fehler hier klarstellen, so dass es für andere hilfreicher wäre. Ich benutze Mootools und ich glaube sehr naiv, dass ich, als ich addEvent ('submit' ...) benutzt habe, sofort event.stop () aufrufen musste, um zu verhindern, dass das von uns gesendet wird. Eigentlich ist das nicht der Fall und ich kann event.stop () nur aufrufen, wenn die Validierung fehlschlägt. Andernfalls wird der Standard-Submit wie üblich ausgelöst und die Verwendung von form.submit () wird komplett überflüssig.

    
Rupert Madden-Abbott 18.04.2010, 18:40
quelle

2 Antworten

6

Sie könnten die Formulare an verschiedene Handler mit action=file1.php und action=file2.php senden.

Werden sie mit einem Bündel desselben Codes verarbeitet? Legen Sie das in separate Dateien, schließen Sie die Gemeinsamkeiten ein und schreiben Sie die eindeutigen Bits in jede der Behandlungsdateien. Nicht hacken, organisieren.

Halten Sie bei der Javascript-Validierung die Standardaktion nicht an und fahren Sie fort, statt dies zu tun:

%Vor%

Auf diese Weise ist, wenn JS ausgeschaltet ist oder die Validierung fehlschlägt, das Formular action / event intakt und es verhält sich wie erwartet, sonst ist es Bonk. Und sicher, behalten Sie sicher serverseitige Validierung. Das ist die "echte" Validierung, die Client-Seite soll nur dem Benutzer gefallen und ihm Zeit sparen. Verlasse dich niemals auf dich.

    
Alex Mcp 18.04.2010, 18:41
quelle
3

Sie können die Aktion des Formulars anpassen, um einen get key / value hinzuzufügen. wie action="formhandle.php?formid=10"

    
Jared Forsyth 18.04.2010 18:43
quelle

Tags und Links