Форма и обработчик в одном файле php

Работа с формами в PHP

Формы

Формы — это часть языка HTML. Формы нужны для передачи данных от клиента на сервер. Чаще всего формы используются для регистрации пользователей, заполнения анкет, оформления заказа в интернет магазине, и так далее.
Через формы можно отправлять как простую текстовую информацию, так и файлы.
Большую часть времени программирования на PHP вы будете так или иначе работать с формами и данными из них.

HTML описывает то, из каких элементов состоит форма, и как она выглядит. Но без принимающей стороны, то есть сервера, который принимает эти данные и обрабатывает их нужным образом, создавать формы нет никакого смысла.

PHP содержит множество средств для работы с формами. Это позволяет очень просто решать типичные задачи, которые часто возникают в веб-программировании:

Практически любой современный сайт содержит как минимум несколько разных HTML-форм.

Отправка формы

Рассмотрим один типичный пример — форма обратной связи. Для связи пользователей с авторами сайта, как правило, используются формы обратной связи, где человек указывает имя, почту для обратной связи и текст своего сообщения.
Такая форма в HTML может выглядеть следующим образом:

Это очень простая форма, состоящая из трёх полей и одной кнопки отправки.

Почти весь приведённый код описывает внешний вид и содержание формы, но следует обратить внимание на два атрибута тега

Тут есть два важных отличия от первого примера:

PHP автоматически сохраняет все загруженные файлы во временную папку на сервере. Но хранить там файлы нельзя, потому что эта директория периодически очищается, и ссылку на такой файл нельзя дать на сайте. Решение здесь только одно — переместить загруженный файл в другую папку. Перемещение файла всегда выполняют сразу после загрузки.

Перемещение загруженного файла

Код для перемещения файла в новую папку:

Функция move_uploaded_file() выполняет два действия:

Валидация формы

Валидация формы — это проверка содержимого её полей. Задача такой проверки — убедиться, что необходимые поля заполнены, а значения в них соответствуют ожидаемому формату.
Так, например, при регистрации пользователя на сайте, он должен заполнить поля с адресом электронной почты и придумать себе пароль. Оба поля обязательны к заполнению, но значение из поля email также должно быть корректным email-адресом.
Помимо текстовых значений формы, можно проверять формат и размер загружаемых файлов.

Общий подход к валидации

При выполнения валидации любой формы порядок действий будет всегда одним:

Источник

Форма и обработчик в одном файле php PHP сценарии обработки HTML форм

Форма и обработчик в одном файле php3.03.16 Форма и обработчик в одном файле php03.03.16 Форма и обработчик в одном файле php 5 Форма и обработчик в одном файле php202928

1. Кнопки – Тег

Параметр TYPE
Определяет тип кнопки, который устанавливает ее поведение в форме. По внешнему виду кнопки разного типа никак не различаются, но у каждой такой кнопки свои функции. Значение по умолчанию: button.
Аргументы:
button – Обычная кнопка.
reset – Кнопка для очистки введенных данных формы и возвращения значений в первоначальное состояние.

Submit – Кнопка для отправки данных формы на сервер.
1.1. Кнопка (input type=button)
1.2. Кнопка с изображением (input type=image)

Кнопки с изображениями аналогичны по действию кнопке Submit, но представляют собой рисунок. Для этого задаем type=image и src=»http://coderhs.com/archive/image.gif».

Когда пользователь щелкнет где-нибудь на изображении, соответствующая форма будет передана на сервер с двумя дополнительными переменными – sub_x и sub_y. Они содержат координаты нажатия пользователя на изображение. Опытные программисты могут заметить, что на самом деле имена переменных, отправленных браузером, содержат точку, а не подчеркивание, но PHP автоматически конвертирует точку в подчеркивание.

1.3. Кнопка отправки формы (input type=submit)

Служит для отправки формы сценарию. При создании кнопки для отправки формы необходимо указать 2 атрибута: type=»submit» и value=»Текст кнопки». Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки «Сохранить», «Удалить», «Редактировать» и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.

1.4. Массив кнопок (submit) для выбора варианта действий
2. Кнопка сброса формы (Reset)

При нажатии на кнопку сброса (reset), все элементы формы будут установлены в то состояние, которое было задано в атрибутах по умолчанию, причем отправка формы не производиться.

3. Флажок (checkbox)

Флажки checkbox предлагают пользователю ряд вариантов, и разрешает произвольный выбор (ни одного, одного или нескольких из них).

4. Переключатель(radio)

Переключатели radio предлагают пользователю ряд вариантов, но разрешает выбрать только один из них.
Пример 1.

5. Текстовое поле (text)

При создании обычного текстового поля размером size и максимальной допустимой длины maxlength символов, атрибут type принимает значение text. Если указан параметр value, то поле будет отображать указанный в переменной value. При создании поля не забывайте указывать имя поля, т.к. этот атрибут является обязательным.

6. Поле для ввода пароля (password)

Полностью аналогичен текстовому полю, за исключением того, что символы, набираемые пользователем, не будут отображаться на экране.

7. Скрытое текстовое поле (hidden)

Позволяет передавать сценарию какую то служебную информацию, не отображая её на странице.

8. Выпадающий список (select)

Если необходимо создать выпадающий с предсказуемой последовательностью. Например, список с годами с 2000 по 2050. То используется следующий прием.

9. Многострочное поле ввода текста (textarea)

создает пустое поле шириной в 20 символов и состоящее из 2 строк.

Для того, чтобы в многострочном текстовом поле соблюдалось html-форматирование (перенос строк по средством тега
или
), то используйте функцию nl2br():

10. Кнопка для загрузки файлов (browse)

Служит для реализации загрузки файлов на сервер. При создании текстового поля также необходимо указать тип поля type как «file».

Способы общения браузера с сервером
Метод GET
Метод POST
Загрузка файлов методом POST
Как определить метод запроса?
Какой способ следует применять?

Пример, для демонстрации отправки данных методом POST и GET одновременно и получения ответа от сервера.

В этом примере файл file.php получил переменные:

GET var=»23″ и var2=»54″
POST var3=»test» и var4=»еще тест»

Как перейти на другую страницу сайта из тела программы?

На предыдущую с обновлением:

Через генерацию JavaScript-кода:

На предыдущую с обновлением:

На предыдущую без обновления:

Перезагрузить текущую страницу:

На предыдущую страницу с обновлением:

На текущую страницу с обновлением и генерацией полного url-адреса:

Самое главное, что надо помнить: сервер по своей инициативе обратиться к клиенту не может. Мы можем только по факту запроса выдать что-то браузеру – либо страницу, либо команду запросить другой ресурс.

Примеры необычного использования форм

Пример 1. Задание номера карточки.

Здесь отсутствует кнопка передачи данных, т.к. форма, состоящая из одного поля, передается автоматически при нажатии клавиши Enter.

Пример 2. Навигация по массиву (списку) по средством формы.

В этом примере осуществляется перемещение по списку (массиву) элементов с отражением его номера (ключа) и значения элемента в массиве с помощью кнопок и скрытой строки с передачей навигационного параметра.

Проверка корректности данных или допустимости вводимых данных

1. Проверку на длину:

2. Проверку корректности адреса электронной почты

Такая проверка осуществляется зачастую с помощью регулярных выражений. Как известно, у адреса две составляющие – имя пользователя и имя домена, которые разделены знаком @. В имени пользователя могут присутствовать заглавные и прописные буквы цифры, знаки подчеркивания и минуса, точки. Для проверки разделителя между именем пользователя и именем домена, в выражение требуется добавить + @.
Также не забывайте, что электронный ящик может находиться на поддомене xxx@xxx.xxx.com, или даже на домене четвертого, пятого уровня (как вариант, реально эта ситуация крайне редка, но отбрасывать эти адреса не стоит). Поэтому, в регулярном выражении не забывайте использовать точку (экранированную «\.«) для указания того, что часть адреса после «@» может содержать точку, как разделитель доменных имен.
Таким образом, регулярное выражение, проверяющее имя пользователя и наличие разделителя имеет следующий вид:

Для проверки доменного имени первого уровня учитываем, что его длина уже составляет не только 2 символа (.ru) или 3 символа (.com), но и 4 символа – .info, и даже 6 символов. Поэтому добавляем такое выражение:

Объединяя эти шаги, получаем следующее регулярное выражение для проверки адресов электронной почты:

Проверка осуществляется по этому шаблону с применением функции preg_match():

Эта пользовательская функция check_email возвращает true, если переданное значение переменной $email соответствует шаблону и false в противном случае.
В итоге проверка на корректность будет выглядеть так:

Соответственно в файле form.php перед формой прописываем следующее:

Соответственно, если ошибка была, то она будет напечатана пользователю перед формой. Таким же методом можно сохранять данные в заполненных полях формы, чтобы пользователь по несколько раз не вводил одно и то же.

Другие проверки на корректность введенных данных
Фильтрация данных

Прежде всего, следует фильтровать данные, которые передает пользователь осознанно – в основном, это данные различных форм. Это может быть пара логин-пароль для входа, пункт голосования и т.п. Например, такая форма

Если вы знакомы с регулярными выражениями, то предыдущий пример можно записать гораздо короче:

Этот фрагмент кода будет проверять введенный логин на соответствие регулярному выражению ‘/[0-9a-z_]/i‘, которое означает: все цифры + все латинские буквы в любом регистре + знак подчеркивания. Если логин содержит другие символы, то будет показано сообщение об ошибке.

Проверка на пустоту поля

Проверка того, что пользователь ввел данные, может осуществляться, к примеру, с помощью функции isset:

Для этой же цели можно использовать функцию empty:

На практике удобно сначала проверить, не пустой ли action формы, а потом уже проверять различные его составляющие: поле имя, e-mail и т. д. К примеру:

Таблица сравнения типов в php

Источник

Обработка форм в PHP

Что такое форма

и пр., которые заполняются пользователем, отправляются на сервер и обрабатываются с помощью PHP.

Простой пример формы:

В этой форме есть 2 поля для заполнения (input и textarea), а также кнопка отправки формы.

Итак, давайте разбираться, что тут вообще происходит.

Форма и обработчик в одном файле php

Обработка формы с GET-параметрами

Формы можно передавать с помощью методов GET и POST. Указывается метод с помощью атрибута method тега form :

Если метод не указан, то по-умолчанию форма отправляется методом GET.

Формы, отправляемые методом GET, передают данные через URL-адрес.

В отличие от обычных переменных, этот массив виден в любой области видимости, в т.ч. внутри функций. Внутри этого массива хранятся GET-параметры текущего запроса в виде ассоциативного массива.

Получить доступ к этим параметрам можно так:

Поэтому важно указывать атрибут name каждому элементу формы, иначе этот элемент не отправится на сервер.

Итак, создадим простенькую форму и добавим ей PHP-обработчик:

Теперь при отправке заполненной формы PHP выведет на экран то, что мы в эту форму написали.

Метод POST

По этой причине для отправки форм, которые могут содержать конфиденциальную информацию, нужно всегда использовать метод POST. При использовании метода POST данные передаются в теле http-запроса, а не в URL.

Метод GET в формах чаще всего используется для поиска чего-либо (товаров, статей и т.д.).

Некоторые разработчики считают, что данные, передаваемые методом POST, имеют какую-то особую защиту, которая не позволяет злоумышленнику украсть или подменить их.

Это не так. Никакой дополнительной защиты у метода POST нет. Для защиты http-запросов нужно использовать https.

Изменение обработчика формы

При желании вы можете отправлять форму не на текущий URL, а на какой-нибудь другой. Для этого достаточно указать путь к скрипту в атрибуте action :

Источник

Тема №3. Создание формы и РНР-сценария в одном файле

Цель работы:Получение навыков и понимание взаимосвязанной работы формы и ее обработки.

Все данные, которые Вы хотите получить из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.

Задание 1: Получение данных из текстового поля

Вам необходимо получить данные из текстового поля и многострочного поля ввода и передать их сценарию.

Решение: Необходимо создать HTML форму и PHP – сценарий для обработки формы.

Создадим два файла: form.html и action.php. В файле form.html будет содержаться html-форма с текстовым полем mytext и текстовой областью msg:

В этой html-форме нас интересует три элемента: action, который указывает путь к обработчику формы (action.php), имя текстового поля (mytext) и имя многострочного поля вода (msg). Также в форме присутствует кнопка(Submit), при нажатии на которую, происходит передача данных.

После того как html-форма готова, необходимо создать обработчик формы action.php:

После того как мы введем любые значение в текстовые поля и нажмем на кнопку «Отправить данные» html-форма отправит значения сценарию action.php.

Если вы хотите, чтобы в многострочном текстовом поле соблюдалось html-форматирование, то используйте функцию nl2br():

Задание 1.: Разработать приложение, в котором:

Создается форма ввода (см. рис. 3.11.) помощью программы Lab3.php (см. рис. 3.12.) для введения пользователем данных:

· Адреса электронной почты;

Информация указанных данных должна быть охвачена рамкой (fieldset).

Введенные данные обабатываются этим же PHP-сценарием Lab3.php (при нажатии кнопки “OK” или Enter на поле ввода). В программе показана реализация ограничения, требующего обязательного ввода значения поля Фамилия. Если поле Фамилия будет означено и нажата кнопка “OK”, то необходимо вызвать программу Lab3_1.php, в которую необходимо передать зашифрованную информацию.

Lab3_1.php должна отобразить данные в окне браузера.

Форма и обработчик в одном файле php

Рис. 3.11. Форма созданная с помощью программы Lab3.php с введенными данными.

Исходный код программы Lab3.php создающий форму средствами PHP:

Lab3 Anketa

Анкета

Ввод исходных данных (заголовок рамки)

Форма и обработчик в одном файле php

print(«Click here здесь и будет вызвана Lab3_1.php с параметром Name=
$Name, ввели имя=».$iFirstName);

//Действие каждого из 6-и ниже стоящих операторов

//эквивалентно действию вышестоящего оператора

Источник

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

Форма и обработчик в одном файле php

Написать простейшую форму с её последующей обработкой сможет, пожалуй, каждый. Но начинающие php-программисты (а иногда и более опытные) встают в тупик: а что делать, если форм на странице 2 и обрабатываются они одним и тем же скриптом? На самом деле, здесь нет ничего сложного. Достаточно знать один момент: как именно браузер отрабатывает эти ситуации.

Допустим, на странице есть 2 формы. Одна отвечает за регистрацию, другая — за авторизацию. В этом случае не будет ничего удивительного, если обрабатывать их будет один файл. Для однозначного и быстрого (в самом деле, если форм будет ещё больше и их данные пересекаются глупо просматривать ворох параметров и создавать чуть ли не искусственный интеллект, пытаясь определить, что же вообще требуется) Определения того, какая из форм была инициирована пользователем, достаточно соблюсти 2 момента.

Как известно, за отправку формы отвечает элемент input с типом submit. Если данному элементу присвоить имя (name), сможем по этому имени определить, какая же из форм вызвана. Код будет примерно таким:

Формы практически полностью идентичны. Отличаются они только именами тегов input. В скрипте form.php остаётся только обработать эти ситуации. Исполняем:

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

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

Дополнение
Для некоторых тема оказалась не раскрыта. Что же, накидал небольшой php-файлик с примером определения отправляемой формы. Надеюсь, живой пример окажется более нагляден.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *