it-swarm.com.de

Zwei Senden-Buttons in einem Formular

Ich habe zwei Submit Buttons in einem Formular. Wie kann ich feststellen, welche Seite auf der Server-Seite getroffen wurde?

428
Alex

Wenn Sie jedem einen Namen geben, wird der angeklickte als eine andere Eingabe gesendet.

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

Sie können jeder Eingabe einen anderen Wert geben und denselben Namen beibehalten:

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

Dann im Code überprüfen, um zu sehen, welche ausgelöst wurde:

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

Das einzige Problem dabei ist, dass Sie Ihre Logik mit dem Text in der Eingabe verknüpfen. Sie können auch jedem einen eindeutigen Namen geben und einfach $ _POST auf die Existenz dieser Eingabe überprüfen:

<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
}
759
Parrots

Eine noch bessere Lösung besteht in der Verwendung von Button-Tags zum Senden des Formulars:

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

Auf diese Weise gibt es keine Probleme mit der Internationalisierung und mehreren Anzeigesprachen (in der vorherigen Lösung ist die Bezeichnung der Schaltfläche auch der Wert, der an den Server gesendet wird).

81
kiril

Es gibt einen neuen HTML5-Ansatz, das formaction-Attribut:

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

Anscheinend funktioniert das in IE9 und früheren Versionen nicht, aber für andere Browser sollten Sie in Ordnung sein (siehe: w3schools.com HTML <button> formaction Attribute ).

Ich persönlich benutze in der Regel Javascript, um Formulare aus der Ferne (für schnelleres Feedback) mit diesem Ansatz als Backup zu übermitteln. Die einzigen nicht abgedeckten Personen sind IE <9 mit deaktiviertem Javascript.

Dies kann natürlich unangemessen sein, wenn Sie grundsätzlich dieselbe Aktion serverseitig ausführen, unabhängig davon, welche Taste gedrückt wurde. Wenn jedoch zwei benutzerseitige Aktionen verfügbar sind, werden sie auch zwei serverseitigen Aktionen zugeordnet.

Edit: Wie von Pascal_dher in den Kommentaren angegeben, ist dieses Attribut auch für den Tag <input> verfügbar.

59
Leo

Dies ist extrem 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

26
Peter Bailey
<form>
    <input type="submit" value="Submit to a" formaction="/submit/a">
    <input type="submit" value="submit to b" formaction="/submit/b">    
</form>
16
MevlütÖzdemir

Vielleicht haben die hier vorgeschlagenen Lösungen 2009 funktioniert, aber ich habe alle diese Antworten getestet und niemand arbeitet in einem Browser.

die einzige Lösung, die ich gefunden habe, ist die folgende:

<form method="post" name="form">
<input type="submit" value="dosomething" onclick="javascript: form.action='actionurl1';"/>
<input type="submit" value="dosomethingelse" onclick="javascript: form.action='actionurl2';"/>

11
Joakim

Der beste Weg, um mit mehreren Senden-Schaltflächen umzugehen, ist die Verwendung von Switch-Fällen im Serverskript

<form action="demo_form.php" method="get">

Choose your favorite subject:

<button name="subject" type="submit" value="html">HTML</button>
<button name="subject" type="submit" value="css">CSS</button>
<button name="subject" type="submit" value="javascript">Java Script</button>
<button name="subject" type="submit" value="jquery">jQuery</button>

</form>

servercode/Serverskript - wo Sie das Formular absenden:

demo_form.php

<?php

switch($_REQUEST['subject']) {

    case 'html': //action for html here
                break;

    case 'css': //action for css here
                break;

    case 'javascript': //action for javascript here
                        break;

    case 'jquery': //action for jquery here
                    break;
}

?>

Quelle: W3Schools.com

8
Shailesh Sonare

verwenden Sie das HTML-Attribut formaction

<form action="/action_page.php" method="get">
  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>
  <button type="submit">Submit</button><br>
  <button type="submit" formaction="/action_page2.php">Submit to another page</button>
</form>

Da Sie nicht angegeben haben, welche serverseitige Skriptmethode Sie verwenden, gebe ich Ihnen ein Beispiel für Python mit CherryPy (obwohl es auch für andere Kontexte nützlich sein kann):

<button type="submit" name="register">Create a new account</button>
<button type="submit" name="login">Log into your account</button>

Anstatt den Wert zu verwenden, um zu bestimmen, welche Taste gedrückt wurde, können Sie den Namen verwenden (mit dem Tag <button> anstelle von <input>). Wenn Ihre Schaltflächen zufällig denselben Text haben, führt dies zu keinen Problemen. Die Namen aller Formularelemente, einschließlich Schaltflächen, werden als Teil der URL gesendet. In CherryPy ist jede davon ein Argument für eine Methode, die den serverseitigen Code ausführt. Wenn Ihre Methode nur **kwargs für ihre Parameterliste hat (anstatt jeden einzelnen Namen jedes Formularelements mühsam einzugeben), können Sie prüfen, welche Schaltfläche folgendermaßen gedrückt wurde:

if "register" in kwargs:
    pass #Do the register code
Elif "login" in kwargs:
    pass #Do the login code
4
Shule

Definieren Sie name als array.

<form action='' method=POST>
    (...) some input fields (...)
    <input type=submit name=submit[save] value=Save>
    <input type=submit name=submit[delete] value=Delete>
</form>

Beispiel Servercode (PHP):

if (isset($_POST["submit"])) {
    $sub = $_POST["submit"];

    if (isset($sub["save"])) {
        // save something;
    } elseif (isset($sub["delete"])) {
        // delete something
    }
}

elseif ist sehr wichtig, da beide analysiert werden, wenn nicht. Genießen.

3
Thielicious
<form method="post">
<input type="hidden" name="id" value="'.$id.'" readonly="readonly"/>'; //any value to post PHP
<input type='submit' name='update' value='update' formAction='updateCars.php'/>
<input type='submit' name='delete' value='delete' formAction='sqlDelete.php'/>
</form>
3
Osmar Kozan Jr

Ich denke, Sie sollten den Namen/Wert in Ihrem GET-Array lesen können. Ich denke, dass die Schaltfläche, auf die nicht geklickt wurde, nicht in dieser Liste angezeigt wird.

2
John Bubriski

Wenn Sie zwei Übergabeschaltflächen mit unterschiedlichen Funktionen haben, geben Sie die Eingabeschaltflächen mit der Übergabeart ausdrücklich an:

<input type="submit" click="save()" name="saveBtn" value="save">
<input type="submit" click="update()" name="updateBtn" value="update">

Sie müssen sich keine Gedanken darüber machen, welche Schaltfläche auf der Serverseite aufgerufen wird. Schreiben Sie Ihre Logik in jede Funktion und rufen Sie sie auf. Sie werden ihre Arbeit machen, ohne andere zu stören.

0

Einfach können Sie die Aktion des Formulars auf verschiedenen Senden-Schaltflächen ändern.

Versuchen Sie dies in document.Ready

$(".acceptOffer").click(function () {
       $("form").attr("action", "/Managers/SubdomainTransactions");
});

$(".declineOffer").click(function () {
       $("form").attr("action", "/Sales/SubdomainTransactions");
});
0
Slan

Sie können es auch so machen (ich denke, es ist sehr praktisch, wenn Sie N Eingänge haben).

<input type="submit" name="row[1]" value="something">
<input type="submit" name="row[2]" value="something">
<input type="submit" name="row[3]" value="something">

Auf der Serverseite (in meinem Beispiel PHP) können Sie "row" als Array lesen, um den Index zu erhalten:

$index = key($_POST['row']);

$ _POST ['row'] ist ein Array mit nur einem Element in der Form index => value (zum Beispiel: '2' => 'etwas ").

http://php.net/manual/de/function.key.php

0
Pato

Sie können auch ein href-Attribut verwenden und ein Get mit dem für jede Schaltfläche angehängten Wert senden. Aber das Formular wäre dann nicht erforderlich 

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
0