Написать простейшую форму с её последующей обработкой сможет, пожалуй, каждый. Но начинающие php-программисты (а иногда и более опытные) встают в тупик: а что делать, если форм на странице 2 и обрабатываются они одним и тем же скриптом? На самом деле, здесь нет ничего сложного. Достаточно знать один момент: как именно браузер отрабатывает эти ситуации.
Допустим, на странице есть 2 формы. Одна отвечает за регистрацию, другая — за авторизацию. В этом случае не будет ничего удивительного, если обрабатывать их будет один файл. Для однозначного и быстрого (в самом деле, если форм будет ещё больше и их данные пересекаются глупо просматривать ворох параметров и создавать чуть ли не искусственный интеллект, пытаясь определить, что же вообще требуется) Определения того, какая из форм была инициирована пользователем, достаточно соблюсти 2 момента.
Как известно, за отправку формы отвечает элемент input с типом submit. Если данному элементу присвоить имя (name), сможем по этому имени определить, какая же из форм вызвана. Код будет примерно таким:
форма № 1
<form action="/form.php" method="post">
<p>
Введите имя: <input type="text" name="login1" value=""><br>
<input type="submit" name="submit1" value="ok">
</p>
форма № 2
<form action="/form.php" method="post">
<p>
Введите имя: <input type="text" name="login2" value=""><br>
<input type="submit" name="submit2" value="ok">
</p>
Формы практически полностью идентичны. Отличаются они только именами тегов input. В скрипте form.php остаётся только обработать эти ситуации. Исполняем:
// параметры проверяются только если одна из форм активирована
if ( ! empty($_POST)) {
if (isset($_POST['submit1'])) {
// получение переданного имени
if (isset($_POST['login'])) $login = $_POST['login1'];
else echo 'введите логин';
} else if (isset($_POST['submit2'])) {
// получение переданного имени
if (isset($_POST['login'])) $login = $_POST['login2'];
else echo 'введите логин';
} else {
echo 'ошибка';
}
}
Несмотря на то, что код получения логина одинаков, следует понимать, что в первом случае он поступил из формы № 1, а вот втором — из № 2. При активации формы браузер передаёт элементы только этой самой формы. Другие формы обработаны не будут.
Ну и конечно же, ничего не мешает давать элементам разных форм одинаковые имена. В данном примере вполне можно заменить имена login1 и login2 на login (и в html коде, и в скрипте-обработчике form.php).
Дополнение
Для некоторых тема оказалась не раскрыта. Что же, накидал небольшой php-файлик с примером определения отправляемой формы. Надеюсь, живой пример окажется более нагляден.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Спасибо! Я был уверен, что разгадка размещения нескольких форм на одной странице заключается именно в <input type="submit" name="submit"…
Вы очень доступно всё объяснили.
Очень спасибо.
Как то даже и не задумывался о name для submit.. Век живи и дураком помрешь!
Яков, здравствуйте.
Согласен, не особо очевидно (:
Да и с одинаковыми именами работает.
У меня в базе товаров для каждого товара своя мини-форма для изменения цены.
Для того, чтобы скрипт ‘понял’ цену какого товара мы меняем — есть инпут ‘hidden’ с id товара, вот и всё
Здравствуйте.
Вы правы, работает, но суть та же: передать на сервер какой-то идентификатор для корректной обработки (:
Здравствуйте
Я не сильна в кодировании
где то можно скачать рабочие файлы с обработчиком двух форм?
Здравствуйте.
Подкрепил статью файликом:
/examples/ext/example-2form.zip
Надеюсь, с его помощью Вы сможете понять суть.