Как я могу определить, какая кнопка была нажата в форме PHP?

У меня есть несколько кнопок на моей странице, но я не уверен, как определить, какой из них был нажат. Здесь разметка для моих двух кнопок:

<input type="submit" id="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" value="Delete" />

Ответ 1

С HTML-формой, такой как:

<input type="submit" name="btnSubmit" value="Save Changes" />
<input type="submit" name="btnDelete" value="Delete" />

Код PHP для использования будет выглядеть так:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Something posted

    if (isset($_POST['btnDelete'])) {
        // btnDelete
    } else {
        // Assume btnSubmit
    }
}

Вы должны всегда предполагать или использовать по умолчанию первую кнопку отправки для отображения в виде исходного кода HTML. На практике различные браузеры надежно отправляют имя/значение кнопки отправки с данными публикации, когда:

  1. Пользователь буквально нажимает кнопку отправки мышью или указательным устройством
  2. Или есть фокус на кнопке отправки (они вкладываются в нее), а затем нажимается клавиша Enter.

Существуют другие способы отправки формы, и некоторые браузеры/версии принимают решение не отправлять имя/значение каких-либо кнопок отправки в некоторых из этих ситуаций. Например, многие пользователи отправляют формы, нажимая клавишу Enter, когда курсор/фокус находится на текстовом поле. Формы также могут быть отправлены через JavaScript, а также некоторые более неясные методы.

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

Кроме того, приведенный выше совет следует использовать и для форм с одной кнопкой отправки, поскольку вы всегда должны использовать кнопку отправки по умолчанию.

Я знаю, что Интернет заполнен тоннами учебных пособий по обработчикам форм, и почти все они делают только проверку имени и значения кнопки отправки. Но они просто неправы!

Ответ 2

В HTML:

<input type="submit" id="btnSubmit" name="btnSubmit" value="Save Changes" />
<input type="submit" id="btnDelete" name="btnDelete" value="Delete" />

В PHP:

if (isset($_POST["btnSubmit"])){
  // "Save Changes" clicked
} else if (isset($_POST["btnDelete"])){
  // "Delete" clicked
}

Ответ 3

Все, что вам нужно, это дать атрибут имени каждой кнопке. И вам нужно обращаться к каждому нажатию кнопки из скрипта PHP. Но будьте осторожны, чтобы дать каждой кнопке уникальное имя. Потому что PHP-скрипт большую часть времени заботится только об имени

<input type="submit" name="Submit_this" id="This" />

Ответ 4

Вы спрашиваете в php или javascript.

Если он находится в php, укажите его имя и используйте метод post или get, после этого вы можете использовать опцию isset или это конкретное имя кнопки проверяется на это значение.

Если он находится в js, используйте getElementById для этого