Случилась тут небольшая задачка, как обработать две и более кнопок submit в HTML-форме, причем желательно без помощи JS и иных ухищрений, т.е. есть, например, такая форма:
Надо выяснить (на сервере), какую кнопку нажал пользователь.
На самом деле (ну если никто не поизвращался над браузером, т.е. клиентом) в отправленном серверу запросе POST
будут только параметры нажатой кнопки. Если задать каждой кнопке уникальное имя, то можно будет отследить, какая кнопка была нажата, и, соответственно, обработать это.
Создадим тестовую форму multibutton.html
:
<html> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> <title>Multibutton 'Send' Test</title> </head> <body> <center> <form action='multibutton.go.php' method='POST'> <b>Press a button</b></br> <input type='text' name='testtext' value='Test Text'></br> <input type='submit' name='button1' value='Button #1'> <input type='submit' name='button2' value='Button #2'> <input type='submit' name='button3' value='Button #3'> </form> </center> </body> </html>
И напишем скрипт-обработчик multibutton.go.php
:
<?php $buttonmessage="<center><b>Perssed button:</br>#"; //Проверка кнопок if (isset($_POST['button1'])) { $buttonmessage.="1"; } if (isset($_POST['button2'])) { $buttonmessage.="2"; } if (isset($_POST['button3'])) { $buttonmessage.="3"; } echo $buttonmessage."</br>"; echo "Test text value: '".$_POST['testtext']."'</b></br></br>"; echo "<b>----- Output $_POST array: ----</b></br><code><pre>"; print_r ($_POST); echo "</br></pre></code>"; echo "<b>-------------------------------</b></center>"; ?>
Если в массиве $_POST
будет найден элемент button1
— обрабатываем нажатие кнопки #1 (if (isset($_POST['button1']))
), аналогично поступаем с другими кнопками. Текстовое поле — исключительно для теста, можно вписывать любое значение, оно будет показано пользователю.
Для наглядности выводится содержимое массива $_POST
:
print_r ($_POST);
Получим следующее:
Нажата кнопка #1:
Нажата кнопка #2:
Нажата кнопка #3:
Можно объединить создание формы и вывод результата в единый скрипт: см. код на PasteBin