Twee verzendknoppen in één formulier

Ik heb twee -knoppen in een formulier. Hoe bepaal ik welke een serverside was?


Antwoord 1, Autoriteit 100%

Als u elk een naam geeft, wordt de geklik ingedrukt als elke andere invoer.

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

Antwoord 2, Autoriteit 183%

oplossing 1:
Geef elk een andere waarde in en houd dezelfde naam:

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

Dan in de codecontrole om te zien welke is geactiveerd:

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

Het probleem daarmee bindt u uw logica aan de gebruiker-zichtbare tekst binnen de invoer.


oplossing 2:
Geef elke unieke naam en controleer de $ _post voor het bestaan ​​van die ingang:

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

en in de code:

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

Antwoord 3, Autoriteit 25%

Een nog betere oplossing bestaat uit het gebruik van button-tags om het formulier in te dienen:

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

De HTML inde knop (bijv. ..>Update<..is wat de gebruiker ziet; omdat er HTML is meegeleverd, wordt de valueis niet zichtbaar voor de gebruiker; het wordt alleen naar de server gestuurd. Op deze manier is er geen ongemak met internationalisering en meerdere weergavetalen (in de vorige oplossing is het label van de knop ook de waarde die naar de server wordt gestuurd) .


Antwoord 4, autoriteit 24%

Er is een nieuwe HTML5-aanpak hiervoor, het formaction-attribuut:

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

Blijkbaar werkt dit niet in IE9 en eerder, maar voor andere browsers zou het goed moeten zijn (zie: w3schools.com HTML <button> formaction-kenmerk).

Persoonlijk gebruik ik Javascript om formulieren op afstand in te dienen (voor sneller waargenomen feedback) met deze aanpak als back-up. Tussen de twee zijn de enige mensen die niet gedekt zijn IE<9 met Javascript uitgeschakeld.

Natuurlijk kan dit ongepast zijn als u in principe dezelfde actie aan de serverzijde uitvoert, ongeacht op welke knop is gedrukt, maar vaak, als er twee gebruikersacties beschikbaar zijn, worden deze toegewezen aan twee serveracties ook.

Bewerken:
Zoals opgemerkt door Pascal_Dher in de opmerkingen, is dit kenmerk ook beschikbaar op de <input>TAG.


Antwoord 5, Autoriteit 7%

Dit is extreem eenvoudig te 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>

Zet dat gewoon op een HTML-pagina, klik op de knoppen en kijk naar de URL


Antwoord 6, Autoriteit 6%

Gebruik de formactionHTML-attribuut (5e regel):

<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>

Antwoord 7, Autoriteit 4%

<form>
    <input type="submit" value="Submit to a" formaction="/submit/a">
    <input type="submit" value="submit to b" formaction="/submit/b">    
</form>

Antwoord 8, Autoriteit 2%

Misschien werkten de voorgestelde oplossingen hier in 2009, maar ik heb al deze up-vermelde antwoorden getest en niemand werkt in alle browsers.

Alleen oplossing die ik vond werk is dit: (maar het is een beetje lelijk om te gebruiken, denk ik)

<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';"/>


Antwoord 9, autoriteit 2%

De beste manier om met de knop voor meerdere verzenden om te gaan, is het gebruik van schakelkast in serverscript

<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/serverscript – waar u het formulier indient:

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;
}
?>

Bron: W3Schools.com


Antwoord 10

U vormt een actie voor meerdere verzendknoppen in één formulier
voorbeeld

<input type="submit" name="" class="btn action_bg btn-sm loadGif" value="Add Address" title="" formaction="/addAddress"> 
 <input type="submit" name="" class="btn action_bg btn-sm loadGif" value="update Address" title="" formaction="/updateAddress"> 

Antwoord 11

Definieer nameals 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>

Voorbeeld servercode (PHP):

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

elseiferg belangrijk, omdat beide zullen worden geparseerd als dit niet.
Genieten.


Antwoord 12

Aangezien u niet hebt opgegeven welke server-side scripting methode u gebruikt, geef ik u een voorbeeld dat voor Python werkt, met behulp van cherrypy (hoewel het ook nuttig kan zijn voor andere contexten):

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

In plaats van de waarde te gebruiken om te bepalen op welke knop werd ingedrukt, kunt u de naam gebruiken (met de <button>TAG in plaats van <input>). Op die manier, als uw knoppen overkomen met dezelfde tekst, veroorzaakt het geen problemen. De namen van alle formulieren, inclusief knoppen, worden verzonden als onderdeel van de URL. In CherryPy is elk van die een argument voor een methode die de Server-Side-code doet. Dus, als uw methode gewoon heeft **kwargsvoor de parameterlijst (in plaats van toediaal te typen elke enkele naam van elk formulieritem), kunt u controleren om te zien welke knop zo is ingedrukt:

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

Antwoord 13

<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>

Antwoord 14

HTML-voorbeeld om verschillende formulieracties te verzenden bij verschillende klikken op een knop:

<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>

Hetzelfde formulier wordt gebruikt om een nieuwe gebruiker en login gebruiker toe te voegen.


Antwoord 15

Ik denk dat je de naam/waarde in je GET-array zou moeten kunnen lezen. Ik denk dat de knop waarop niet is geklikt, niet in die lijst zal verschijnen.


Antwoord 16

Je kunt het ook zo doen (ik denk dat het erg handig is als je N ingangen hebt).

<input type="submit" name="row[456]" value="something">
<input type="submit" name="row[123]" value="something">
<input type="submit" name="row[789]" value="something">

Een gemeenschappelijk gebruiksbehuizing zou verschillende ID’s uit een database voor elke knop gebruiken, zodat u later in de server kunt weten waar de rij is geklikt.

In de serverzijde (PHP in dit voorbeeld) kunt u “rij” lezen als een array om de ID te krijgen.
$_POST['row']is een array met slechts één element, in het formulier [ id => value ](Bijvoorbeeld: [ '123' => 'something' ]).

Dus, om de geklikte ID te krijgen, doet u:

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

http://php.net/Manual/en/function.Key.php


Antwoord 17

Eenvoudig U kunt de actie van formulier op verschillende verzendknoppen wijzigen Klik.

Probeer dit in document.REEK

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

Antwoord 18

U kunt ook een HREF-attribuut gebruiken en een ontvangst verzenden met de toegewijde waarde voor elke knop. Maar het formulier is dan niet vereist

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

Antwoord 19

Aangezien u niet hebt opgegeven welke server-side scripting methode u gebruikt, geef ik u een voorbeeld dat werkt voor PHP

<?php
   if(isset($_POST["loginForm"]))
   {
    print_r ($_POST); // FOR Showing POST DATA
   }
   elseif(isset($_POST["registrationForm"]))
   {
    print_r ($_POST);
   }
   elseif(isset($_POST["saveForm"]))
   {
    print_r ($_POST);
   }
   else{
   }
?>
<html>
<head>
</head>
<body>
  <fieldset>
    <legend>FORM-1 with 2 buttons</legend>
      <form method="post" >
      <input type="text" name="loginname" value ="ABC" >
     <!--Always use type="password" for password --> 
     <input type="text" name="loginpassword" value ="abc123" >
     <input type="submit" name="loginForm" value="Login"><!--SUBMIT Button 1 -->
     <input type="submit" name="saveForm" value="Save">  <!--SUBMIT Button 2 -->
   </form>
  </fieldset>
  <fieldset>
    <legend>FORM-2 with 1 button</legend>
     <form method="post" >
      <input type="text" name="registrationname" value ="XYZ" >
     <!--Always use type="password" for password -->
     <input type="text" name="registrationpassword" value ="xyz123" >
     <input type="submit" name="registrationForm" value="Register"> <!--SUBMIT Button 3 -->
   </form>
  </fieldset>
</body>
</html>

Antwoord 20

U kunt de knoppen zoals deze presenteren:

<input type="submit" name="typeBtn" value="BUY">
<input type="submit" name="typeBtn" value="SELL">

En vervolgens in de code kunt u de waarde krijgen met:

if request.method == 'POST':
    #valUnits = request.POST.get('unitsInput','')
    #valPrice = request.POST.get('priceInput','')
    valType = request.POST.get('typeBtn','')

(Valunits en Valprice zijn enkele andere waarden die ik uithaal uit de vorm die ik vertrok voor illustratie)

Other episodes