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?

9voto

chetan mahajan Punkte 529

Ein HTML-Beispiel zum Senden einer anderen Formularaktion bei verschiedenen Schaltflächenklicks:

<form action="/login" method="POST">
    <input type="text" name="username" value="your_username" />
    <input type="password" name="password" value="your_password" />
    <button type="submit">Login</button>
    <button type="submit" formaction="/users" formmethod="POST">Add User</button>
</form>

Dasselbe Formular wird verwendet, um einen neuen Benutzer hinzuzufügen und einen Benutzer anzumelden.

9voto

Thielicious Punkte 3590

Definir name como 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 für Server-Code (PHP):

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

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

elseif sehr wichtig, da sonst beide geparst werden.

7voto

tixastronauta Punkte 376

Hinweis: Wenn Sie mehrere Schaltflächen zum Übermitteln haben und die Eingabetaste (ENTER) drücken, wird auf der Tastatur der Standardwert für die erste Schaltfläche im DOM verwendet.

<form>
  <input type="text" name="foo" value="bar">
  <button type="submit" name="operation" value="val-1">Operation #1</button>
  <button type="submit" name="operation" value="val-2">Operation #2</button>
</form>

Wenn Sie in diesem Formular auf ENTER drücken, werden die folgenden Parameter gesendet:

foo=bar&operation=val-1

6voto

Brōtsyorfuzthrāx Punkte 3909

Da Sie nicht angegeben haben, welche serverseitige Skripting-Methode Sie verwenden, gebe ich Ihnen ein Beispiel, das für Python funktioniert, mit CherryPy (obwohl sie auch in anderen Zusammenhängen 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 festzustellen, welche Taste gedrückt wurde, können Sie den Namen verwenden (mit der Option <button> Tag anstelle von <input> ). Wenn Ihre Schaltflächen zufällig denselben Text haben, wird dies keine Probleme verursachen. Die Namen aller Formularelemente, einschließlich der Schaltflächen, werden als Teil der URL gesendet.

In CherryPy ist jeder dieser Punkte ein Argument für eine Methode, die den serverseitigen Code ausführt. Wenn Ihre Methode also nur **kwargs für seine Parameterliste (anstatt mühsam jeden einzelnen Namen jedes Formularelements einzugeben), dann können Sie überprüfen, welche Schaltfläche wie folgt gedrückt wurde:

if "register" in kwargs:
    pass # Do the register code
elif "login" in kwargs:
    pass # Do the login code

3voto

Osmar Kozan Jr Punkte 145
<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>

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