Как узнать, какая кнопка была нажата при отправке формы PHP? - PullRequest
72 голосов
/ 21 апреля 2010

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

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

Ответы [ 3 ]

133 голосов
/ 21 апреля 2010

С 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. Или есть фокус на кнопке отправки (они вкладываются в нее), а затем нажимается клавиша ввода.

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

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

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

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

10 голосов
/ 21 апреля 2010

В 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
}
0 голосов
/ 21 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...