Deux boutons soumettre sous une forme

j'ai deux boutons submit dans un formulaire. Comment déterminer lequel a été touché à serverside?

409
demandé sur ypnos 2009-02-14 00:47:04

18 réponses

si vous donnez à chacun un nom, celui cliqué sera envoyé comme n'importe quelle autre entrée.

<input type="submit" name="button_1" value="Click me">
336
répondu Greg 2009-02-13 21:48:20

Vous pouvez donner à chaque entrée une valeur différente et garder le même nom:

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

puis dans le contrôle de code pour voir qui a été déclenché:

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

le seul problème avec cela est que vous liez votre logique au texte dans l'entrée. Vous pouvez également donner à chacun un nom unique et juste vérifier le $ _POST pour l'existence de cette entrée:

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

et dans le code:

if (isset($_POST['update_button'])) {
    //update action
} else if (isset($_POST['delete_button'])) {
    //delete action
} else {
    //no button pressed
}
732
répondu Parrots 2015-03-03 06:15:14

une solution encore meilleure consiste à utiliser des étiquettes de boutons pour soumettre le formulaire:

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

de cette façon il n'y a aucun inconvénient avec l'internationalisation et les langues d'affichage multiples (dans la première solution, l'étiquette du bouton est aussi la valeur envoyée au serveur).

72
répondu kiril 2016-02-11 19:16:20

il y a une nouvelle approche HTML5 à cela, l'attribut formaction :

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

apparemment cela ne fonctionne pas dans IE9 et plus tôt, mais pour les autres navigateurs vous devriez être bien (voir: w3schools.com HTML < button> attribut formaction ).

personnellement, J'utilise généralement Javascript pour soumettre des formulaires à distance (pour une rétroaction perçue plus rapide) avec cette approche comme sauvegarde. Entre les deux, les seules personnes non couvertes sont IE<9 avec Javascript désactivé.

bien sûr, cela peut être inapproprié si vous prenez essentiellement la même action Côté Serveur quel que soit le bouton qui a été poussé, mais souvent s'il y a deux actions côté utilisateur disponibles, alors ils vont passer à deux actions côté serveur ainsi.

Edit: Comme noté par Pascal_dher dans les commentaires, cet attribut est également disponible sur la balise <input> .

51
répondu Leo 2015-08-19 08:46:45

c'est extrêmement facile à tester

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

il suffit de mettre cela dans une page HTML, cliquez sur les boutons ,et regardez l'URL

26
répondu Peter Bailey 2009-02-13 21:51:28
<form>
    <input type="submit" value="Submit to a" formaction="/submit/a">
    <input type="submit" value="submit to b" formaction="/submit/b">    
</form>
14
répondu MevlütÖzdemir 2016-11-08 10:03:46

peut-être que les solutions suggérées ici ont fonctionné en 2009, mais j'ai testé toutes ces réponses rétrogrades et personne ne travaille dans aucun navigateur.

la seule solution que j'ai trouvé efficace est celle - ci: (mais c'est un peu laid à utiliser je pense)

<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
répondu Joakim 2014-08-05 11:36:55

la meilleure façon de traiter le bouton Soumettre multiple est d'utiliser le cas de commutation dans le script du serveur

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

code du serveur/serveur de script lorsque vous soumettez le formulaire:

demo_form.151930920 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;
}

?>

Source: W3Schools.com

7
répondu Shailesh Sonare 2017-01-25 16:12:42

puisque vous n'avez pas spécifié quelle méthode de script côté serveur vous utilisez, Je vais vous donner un exemple qui fonctionne pour Python, en utilisant CherryPy (bien qu'il puisse être utile pour d'autres contextes, aussi):

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

plutôt que d'utiliser la valeur pour déterminer quel bouton a été pressé, vous pouvez utiliser le nom (avec l'étiquette <button> au lieu de <input> ). De cette façon, si vos boutons ont le même texte, cela ne posera pas de problèmes. Les noms de tous les éléments de formulaire, y compris les boutons, sont envoyés en tant que partie de L'URL. Dans CherryPy, chacun de ceux-ci est un argument pour une méthode qui fait le code côté serveur. Ainsi, si votre méthode a juste **kwargs pour sa liste de paramètres (au lieu de taper tédieusement chaque nom de chaque élément de forme) alors vous pouvez vérifier pour voir quel bouton a été appuyé comme ceci:

if "register" in kwargs:
    pass #Do the register code
elif "login" in kwargs:
    pass #Do the login code
4
répondu Shule 2015-12-04 14:45:18
<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
répondu Osmar Kozan Jr 2016-06-29 13:22:08

je pense que vous devriez être capable de lire le nom/la valeur dans votre tableau GET. Je pense que le bouton qui n'a pas été cliqué n'apparaîtra pas dans cette liste.

2
répondu John Bubriski 2009-02-13 21:48:26

définit name comme 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>

exemple de code serveur (PHP):

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

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

elseif très important, parce que les deux seront analysés sinon. Profiter.

2
répondu Thielicious 2017-07-02 22:48:54

use formaction HTML attribut

<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>
1
répondu Thirumalmani Lavanyan 2018-07-30 07:17:34

Simple vous pouvez changer l'action du formulaire sur différents boutons soumettre clic.

essayez ceci dans le document.Prêt

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

$(".declineOffer").click(function () {
       $("form").attr("action", "/Sales/SubdomainTransactions");
});
0
répondu Slan 2015-06-24 09:34:13

vous pouvez aussi le faire comme ceci (je pense que c'est très pratique si vous avez N entrées).

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

et puis du côté du serveur (PHP dans mon exemple) vous pouvez lire "row" comme un tableau pour obtenir l'index:

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

$_POST ['row'] sera un tableau avec un seul élément, dans la forme index => value (par exemple:' 2 '= > 'something').

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

0
répondu Pato 2016-01-21 04:10:31

vous pouvez également utiliser un attribut href et envoyer un get avec la valeur ajoutée pour chaque bouton. Mais le formulaire ne serait pas nécessaire alors

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
0
répondu Jonathan Laliberte 2017-07-19 21:15:00

si vous avez deux boutons soumettre avec une fonction différente, puis indiquer explicitement dans les boutons d'entrée avec le type de soumettre comme:

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

vous n'avez pas besoin de vous soucier du bouton qui s'appelle côté serveur. Écrivez votre logique dans chaque fonction séparément et de les appeler. Ils feront leur travail sans interférer avec les autres.

0
répondu Jasmin Akther Suma 2018-07-12 06:56:01

Vous pouvez présenter les boutons comme ceci:

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

et ensuite dans le code vous pouvez obtenir la valeur en utilisant:

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

(valUnits et valPrice sont d'autres valeurs que j'extrais de la forme que j'ai quitté en pour l'illustration)

-1
répondu user3714578 2015-07-24 09:52:33