Суббота , 20 Апрель 2024
ДомойПубликацииобработка нескольких форм в php

обработка нескольких форм в php

php

Написать простейшую форму с её последующей обработкой сможет, пожалуй, каждый. Но начинающие 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-файлик с примером определения отправляемой формы. Надеюсь, живой пример окажется более нагляден.

Рейтинг: 0

Автор публикации

2 070
не в сети 12 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (1 голосов, в среднем: 5,00 из 5)
Загрузка...

7 комментариев

  1. Спасибо! Я был уверен, что разгадка размещения нескольких форм на одной странице заключается именно в <input type="submit" name="submit"…
    Вы очень доступно всё объяснили.

    Рейтинг: 0
  2. Очень спасибо.
    Как то даже и не задумывался о name для submit.. Век живи и дураком помрешь!

    Рейтинг: 0
  3. Да и с одинаковыми именами работает.
    У меня в базе товаров для каждого товара своя мини-форма для изменения цены.
    Для того, чтобы скрипт ‘понял’ цену какого товара мы меняем — есть инпут ‘hidden’ с id товара, вот и всё smile

    Рейтинг: 0
  4. Здравствуйте
    Я не сильна в кодировании
    где то можно скачать рабочие файлы с обработчиком двух форм?

    Рейтинг: 1

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять