693 Stimmen

Zwei Übermittlungsschaltflächen in einem Formular

Ich habe zwei einreichen Schaltflächen in einem Formular. Wie kann ich feststellen, welche Schaltfläche serverseitig angeklickt wurde?

1024voto

Parrots Punkte 25928

Lösung 1:
Geben Sie jeder Eingabe einen anderen Wert und behalten Sie denselben Namen bei:

<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />

Prüfen Sie dann im Code, was ausgelöst wurde:

if ($_POST['action'] == 'Update') {
    //action for update here
} else if ($_POST['action'] == 'Delete') {
    //action for delete
} else {
    //invalid action!
}

Das Problem dabei ist, dass Sie Ihre Logik an den für den Benutzer sichtbaren Text innerhalb der Eingabe binden.


Lösung 2:
Geben Sie jeder Eingabe einen eindeutigen Namen und überprüfen Sie $_POST auf das Vorhandensein dieser Eingabe:

<input type="submit" name="update_button" value="Update" />
<input type="submit" name="delete_button" value="Delete" />

Und im Code:

if (isset($_POST['update_button'])) {
    //update action
} else if (isset($_POST['delete_button'])) {
    //delete action
} else {
    //no button pressed
}

542voto

Greg Punkte 306033

Wenn Sie jedem einen Namen geben, wird der angeklickte Eintrag wie jede andere Eingabe durchgeschickt.

<input type="submit" name="button_1" value="Click me">

168voto

Leo Punkte 3807

Dafür gibt es einen neuen HTML5-Ansatz, die formaction Attribut:

<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>

Offenbar funktioniert dies nicht in Internet Explorer 9 und früher, aber bei anderen Browsern sollten Sie keine Probleme haben (siehe: w3schools.com HTML <button> formaction Attribut ).

Ich persönlich verwende in der Regel JavaScript, um Formulare per Fernzugriff zu übermitteln (für eine schnellere Rückmeldung), mit diesem Ansatz als Backup. Die einzigen, die nicht abgedeckt sind, sind Internet Explorer vor Version 9 mit deaktiviertem JavaScript.

Natürlich kann dies unangemessen sein, wenn Sie im Grunde die gleiche Aktion serverseitig ausführen, unabhängig davon, welche Schaltfläche gedrückt wurde, aber oft, wenn es zwei benutzerseitige Aktionen verfügbar sind, dann werden sie auch zwei serverseitigen Aktionen zugeordnet.

Wie von Pascal_dher in den Kommentaren angemerkt, ist dieses Attribut auch auf der Seite <input> Tag ebenfalls.

153voto

kiril Punkte 4186

Eine noch bessere Lösung besteht in der Verwendung von Schaltflächen-Tags zum Absenden des Formulars:

<form>
    ...
    <button type="submit" name="action" value="update">Update</button>
    <button type="submit" name="action" value="delete">Delete</button>
</form>

Das HTML innerhalb die Schaltfläche (z. B. ..>Update<.. ist das, was der Benutzer sieht; da HTML zur Verfügung gestellt wird, ist die value ist für den Benutzer nicht sichtbar; sie wird nur an den Server gesendet. Auf diese Weise gibt es keine Unannehmlichkeiten mit der Internationalisierung und mehreren Anzeigesprachen (bei der früheren Lösung ist die Beschriftung der Schaltfläche auch der an den Server gesendete Wert).

37voto

Peter Bailey Punkte 103278

Dies ist sehr einfach zu testen:

<form action="" method="get">
    <input type="submit" name="sb" value="One">
    <input type="submit" name="sb" value="Two">
    <input type="submit" name="sb" value="Three">
</form>

Fügen Sie das einfach in eine HTML-Seite ein, klicken Sie auf die Schaltflächen, und sehen Sie sich die URL an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X