Две кнопки отправки в одной форме - PullRequest
461 голосов
/ 14 февраля 2009

У меня есть две кнопки в форме. Как определить, какая из них была поражена серверной стороной?

Ответы [ 18 ]

5 голосов
/ 03 июля 2017

Определить name как 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>

Пример кода сервера (PHP):

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

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

elseif очень важно, потому что оба будут проанализированы, если нет. Наслаждайтесь.

3 голосов
/ 29 июня 2016
<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>
2 голосов
/ 14 февраля 2009

Я думаю, вы должны прочитать имя / значение в вашем массиве GET. Я думаю, что кнопка, которая не была нажата, не появится в этом списке.

0 голосов
/ 12 июля 2018

Если у вас есть две кнопки отправки с разными функциями, тогда явно укажите в кнопках ввода тип отправки, например:

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

Вам не нужно беспокоиться о том, какая кнопка вызывается на стороне сервера. Напишите свою логику в каждой функции отдельно и вызовите их. Они будут выполнять свою работу, не мешая другим.

0 голосов
/ 20 июля 2017

Вы также можете использовать атрибут href и отправить get со значением, добавленным для каждой кнопки. Но тогда форма не понадобится

href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
0 голосов
/ 24 июня 2015

Просто вы можете изменить действие формы на разных кнопках отправки. Нажмите.

Попробуйте это в документе. Готово

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

$(".declineOffer").click(function () {
       $("form").attr("action", "/Sales/SubdomainTransactions");
});
0 голосов
/ 21 января 2016

Вы также можете сделать это так (я думаю, это очень удобно, если у вас есть 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">

А затем на стороне сервера (в моем примере PHP) вы можете прочитать «строку» как массив, чтобы получить индекс:

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

$ _ POST ['row'] будет массивом только с одним элементом в форме index => value (например: '2' =>'thing ").

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

0 голосов
/ 24 июля 2015

Вы можете представить кнопки следующим образом:

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

И тогда в коде вы можете получить значение, используя:

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

(valUnits и valPrice - некоторые другие значения, которые я извлекаю из формы, оставленной для иллюстрации)

...