Formular nur einmal abschicken

Dragosius

Erfahrenes Mitglied
Hallo zusammen,

ich habe unter anderem folgendes Formular:
HTML:
    <form action="index.php?info=kartenverwaltung&welche=wunsch" method="post">
        <input type="hidden" name="modus" value="wunsch" />
        <input type="hidden" name="art" value="normale" />
        <input type="hidden" name="id" value="<?php echo $t['id'];?>" />
        <input type="hidden" name="wofuer" value="<?php echo $wofuer;?>" />
        <input type="text" name="wk" />
        <br>
        <button type="submit">1 einl&ouml;sen</button>
    </form>

Das Problem hierbei ist, dass manche Personen da so schnell mehrfach drauf klicken, bevor das Formular verarbeitet wurde.

Wie kann ich das denn unterbinden, dass man af den "submit"-Button nur einmal klicken kann?
Ich vermute, dies funktioniert mit JavaScript.

Danke
 
Mit etwas Googel kommt das raus
wenn es ein klassischer "Form submit" ist, dann muss man eigentlich auch serverseitig arbeiten oder über Cookies gehen, da der "Form submit" ein Request auslöst der dasselbe oder ein anderes Skript aufruft.
Deswegen schlage ich vor mit Token zu arbeiten somit wird nur der erste Request durch kommen oder wie man das sagt

du könntest deinen Button auch das
Javascript:
onclick="this.disabled=true"
Dann ist er nach den klicken deaktiviert aber sendet nicht mit <form>. Vieleicht solltest du da dann ein Ajax request durchführen dann wäre senden und deaktivieren möglich.

Aber abwarten vieleicht haben andere noch bessere Ideen
 
Zuletzt bearbeitet:
Wie ist es denn die einfachste Lösung?
Ich habe sehr viele Formulare in Verwendung.

Ich denke, das wäre dann die 1. Lösung?
Wie kann man dies denn genau realisieren?
 
Deswegen schlage ich vor mit Token zu arbeiten somit wird nur der erste Request durch kommen oder wie man das sagt
Anti-CSRF Tokens sind immer eine gute Idee.
Damit könnte es möglich sein, dass man mit Mehrfachklicken auf einer Fehlerseite landet, obwohl eine der Anfragen tatsächlich durchgekommen ist, aber nicht die, die der Browser zuletzt ausgeführt hat.
Aus der UX-Perspektive ist es daher sinnvoll, den Button/das Formular zu deaktivieren.
Das ginge z. B. mit genau dem Code von @basti1012. Etwas schöner wäre es, wenn du addEventListener verwenden würdest.
 
Also kurze Rückmeldung:
Im Forefox und Edge funktioniert es einwandfrei.

Nur im Chrome lassen sich damit Buttons nun gar nicht mehr anlicken.

z.B. folgendes Formular:
HTML:
<form action="index.php" method="post">
    <input type="hidden" name="einloggen" value="true" />
    Name:<br /><input type="text" size="20" name="name" /><br /><br />
    Passwort:<br /><input type="password" size="20" name="passwd" /><br /><br />
    <input type="checkbox" name="bleiben" id="bleiben" value="true" checked="checked" /> <label for="bleiben">Automatisch einloggen</label> <br /><br />
    <button onclick="this.disabled=true" type="submit">Einloggen</button>
</form>

Gibt es hier denn eine Lösung, die für alle Browser funktioniert?
 
Mir fällt auf der schnelle nur die Ajax Lösung ein.Sobald der request gesendet wurde vergibst du den Button disabled
 
Zurück