У меня есть две кнопки submit в форме. Как определить, какая из них была нажата на сервере?
Решение 1: Дать каждому входу различной стоимости и сохранить то же название:
<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />
Затем в проверить код, чтобы увидеть, который был спровоцирован:
if ($_POST['action'] == 'Update') {
//action for update here
} else if ($_POST['action'] == 'Delete') {
//action for delete
} else {
//invalid action!
}
Проблема в том, что вы связали свою логику видимого пользователю текста в ввода.
Решение 2: Дать каждому уникальное имя и проверяем $_POST, где для существования этого входа:
<input type="submit" name="update_button" value="Update" />
<input type="submit" name="delete_button" value="Delete" />
И в коде:
if (isset($_POST['update_button'])) {
//update action
} else if (isset($_POST['delete_button'])) {
//delete action
} else {
//no button pressed
}
Даже лучшее решение заключается в использовании теги кнопка для отправки формы:
<form>
...
<button type="submit" name="action" value="update">Update</button>
<button type="submit" name="action" value="delete">Delete</button>
</form>
В HTML внутри кнопку (например, ..>обновление<..
- это то, что видит пользователь, потому что есть HTML предусмотрено, value
не видимых пользователю; это только отправляются на сервер. Таким образом нет никаких неудобств с интернационализацией и несколько языков дисплея (в бывшем решение, метку кнопки тоже значение отправляется на сервер).
Есть новый подход HTML5 для этого, formaction атрибута:
<button type="submit" formaction="/action_one">First action</button>
<button type="submit" formaction="/action_two">Second action</button>
Видимо, это не работает в IE9 и раньше, но за другие браузеры вы должны быть в порядке (см.: w3schools.com в HTML &ЛТ;кнопка> formaction атрибут).
Лично я, как правило, используют JavaScript для удаленной отправки формы (для быстрее воспринимается обратная связь) с таким подходом как резервное копирование. Между двумя, только люди не охватываются, т. е.&ЛТ;9 с JavaScript отключен.
Конечно, это может быть неуместно, если вы в основном принимают те же серверные действий независимо от того, какая кнопка была нажата, но часто, если есть два пользователя-побочных действий, то они будут карту два серверных действий, а также.
Редактировать:
Как отметил Pascal_dher в комментариях, этот атрибут также доступен на в <ввод> тег
как хорошо.
Это очень легко проверить
<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>
Просто поместите это в HTML-страницу, нажмите на кнопки и посмотрите на URL-адрес
<form>
<input type="submit" value="Submit to a" formaction="/submit/a">
<input type="submit" value="submit to b" formaction="/submit/b">
</form>
Используйте formaction в HTML атрибут (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>
Возможно, предлагаемые здесь решения работал в 2009 году, но я тестировал все это голосуют ответы и никто не работает в любых браузерах.
единственное решение я нашел работает это: (но ее немного некрасиво использовать думаю)
<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';"/>
</форма>
Лучший способ борьбы с несколькими кнопка "Отправить" с помощью переключателя случае в серверном скрипте
<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>
код сервера/сервера скрипт - где вы отправляете форме:
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;
}
?>
Источник: W3Schools.com
Определение имя
как массив
.
<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
очень важно, так как будет проанализирован, если не.
Наслаждаться.
Поскольку вы ничего'т указать, какие скрипты на стороне сервера метод вы'повторно через Я'll даем вам пример, который работает для Python, с использованием CherryPy (хотя оно может оказаться полезным для других контекстах тоже):
<button type="submit" name="register">Create a new account</button>
<button type="submit" name="login">Log into your account</button>
Вместо того чтобы использовать значение, чтобы определить, какая кнопка была нажата, можно использовать имя (с в <кнопка> тег
вместо <вход>
). Таким образом, если происходит вашего кнопки имеют один и тот же текст, он выиграл'т вызвать проблемы. Имена всех элементов формы, включая кнопки, отправляется как часть URL-адреса. В CherryPy, каждый из которых является аргументом для метода, который делает серверный код. Так что, если ваш метод просто `**kwargs для списке параметров (вместо того, чтобы кропотливо вводить каждое название каждого элемента формы), то вы можете проверить, чтобы увидеть, какая кнопка была нажата, как это:
if "register" in kwargs:
pass #Do the register code
elif "login" in kwargs:
pass #Do the login code
<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>
Я думаю, вы должны быть в состоянии прочитать имя/значение в вашем массиве GET. Я думаю, что кнопка, которая не была нажата, не появится в этом списке.
Просто вы можете изменить действие формы на разных кнопок нажать.
Попробуйте это в документе.Готов
$(".acceptOffer").click(function () {
$("form").attr("action", "/Managers/SubdomainTransactions");
});
$(".declineOffer").click(function () {
$("form").attr("action", "/Sales/SubdomainTransactions");
});
Вы также можете использовать атрибут href и отправить вам со значением к каждой кнопке. Но форма не'т быть то
href="/SubmitForm?action=delete"
href="/SubmitForm?action=save"
Вы также можете сделать это, как это (я думаю, это's очень удобно, если у вас есть 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, где['ом'] будет массив с одним элементом, в форме индекса => значение (например: '2' => 'что-то").
Вы можете представить кнопки такой:
<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 некоторые другие ценности, я извлекаю из формы, что я оставил для иллюстрации)