Пятница , 28 Июль 2017
Как новичку заработать в интернете?
ДомойПубликацииобработка нескольких форм в 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['login1'];
        else echo 'введите логин';
    } else {
        echo 'ошибка';
    }
}

несмотря на то, что код получения логина одинаков, следует понимать, что в первом случае он поступил из формы № 1, а вот втором — из № 2. при активации формы браузер передаёт элементы только этой самой формы. другие формы обработаны не будут.

ну и конечно же, ничего не мешает давать элементам разных форм одинаковые имена. в данном примере вполне можно заменить имена login1 и login2 на login (и в html коде, и в скрипте-обработчике form.php).



Рейтинг: 0

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

1 601
не в сети 10 часов

x64 (aka andi)

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

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

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

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

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

    Рейтинг: 0

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

Ваш email не будет опубликован.Необходимы поля отмечены *

*

Добавьте изображение (jpg/gif/png)

Авторизация

Регистрация

Пароль не введен

Генерация пароля