Domanda

Ho due Invia / pulsanti in un modulo. Come faccio a determinare quale è stato colpito serverside?

È stato utile?

Soluzione

Se si dà ad ognuno un nome, il cliccato uno sarà inviato attraverso come qualsiasi altro ingresso.

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

Altri suggerimenti

Si può dare ogni ingresso un valore diverso e mantenere lo stesso nome:

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

Poi nel codice di controllo per vedere che è stato attivato:

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

L'unico problema è che si legano la logica per il testo nella finestra di input. Si potrebbe anche dare ad ognuno un nome univoco e basta controllare il $ _POST per l'esistenza di tale ingresso:

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

E nel codice:

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

Una soluzione ancora migliore consiste nell'utilizzare i tag tasto per inviare il modulo:

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

In questo modo non v'è nessun inconveniente con l'internazionalizzazione e più lingue di visualizzazione (nella prima soluzione, l'etichetta del tasto è anche il valore inviato al server).

C'è un nuovo approccio a questo HTML5, l'attributo formaction:

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

A quanto pare questo non funziona in IE9 e precedenti, ma per altri browser si dovrebbe andare bene (vedi: w3schools.com HTML

Questo è estremamente facile da test

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

Basta mettere che in una pagina HTML, fare clic sui pulsanti, e guardare l'URL

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

Forse le soluzioni proposte qui hanno lavorato nel 2009, ma Ive testato tutto questo risponde upvoted e nessuno sta lavorando in tutti i browser.

unica soluzione che ho trovato lavoro è questo: (ma è un po 'brutto da usare credo)

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

Utilizzare l'attributo formaction HTML (linea 5):

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

Il modo migliore per affrontare con più pulsante di invio sta usando caso interruttore script server

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

codice copione / Server - dove si sta presentando il modulo:

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

?>

Fonte: W3Schools.com

Dal momento che non è stato specificato quale metodo di scripting lato server si sta utilizzando, io ti do un esempio che funziona per Python, utilizzando CherryPy (anche se può essere utile per altri contesti, anche):

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

Invece di utilizzare il valore per determinare quale pulsante è stato premuto, è possibile utilizzare il nome (con il tag <button> invece di <input>). In questo modo, se i pulsanti capita di avere lo stesso testo, esso non causare problemi. I nomi di tutti gli elementi di forma, inclusi i pulsanti, vengono inviati come parte dell'URL. In CherryPy, ognuna di queste è un argomento per un metodo che fa il codice lato server. Quindi, se il metodo appena ha **kwargs per la sua lista di parametri (invece di digitare noiosamente ogni singolo nome di ciascun elemento forma) allora si può controllare per vedere quale pulsante è stato premuto in questo modo:

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

Definisci name come 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>

codice del server di esempio (PHP):

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

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

elseif molto importante, perché entrambi saranno analizzata se no. Godetevi.

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

Credo che si dovrebbe essere in grado di leggere il nome / valore nella propria matrice GET. Penso che il pulsante che non è stato fatto clic solito appaiono in quella lista.

Semplice è possibile modificare l'azione del modulo a diverse presentare pulsanti di clic.

Prova questo in document.ready

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

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

È anche possibile fare in questo modo (credo che sia molto conveniente se si dispone di ingressi N).

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

E poi nel lato server (PHP nel mio esempio) si può leggere "riga" come un array per ottenere l'indice:

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

$ _ POST [ 'riga'] sarà un array con un solo elemento, nell'indice forma => valore (ad esempio: '2' => 'qualcosa ").

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

È inoltre possibile utilizzare un attributo href e inviare un ottenere con il valore aggiunto per ogni pulsante. Ma la forma non sarebbe necessario quindi

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

Se si dispone di due pulsante di invio con funzione diversa quindi esplicitamente raccontare in tasti di ingresso con presentare tipo come:

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

Non è necessario preoccuparsi di quale tasto viene chiamato in lato server. Scrivi la tua logica in ogni funzione separatamente e li chiamano. Faranno il loro lavoro senza interferire con gli altri.

È possibile presentare i tasti in questo modo:

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

E poi il codice è possibile ottenere il valore utilizzando:

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

(valUnits e valPrice sono alcuni altri valori estraggo dalla forma che ho lasciato in per l'illustrazione)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top