Зачастую на Web – сайтах можно встретить страницы с размещенными на них HTML - формами. Веб-формы – удобный способ получения информации от посетителей вашего сайта. Пример тому – , – которая обеспечивает обратную связь с посетителями и разработчиками сайта. Формы так же удобны и для разработчиков сайта при разработке CMS, которая позволяет поддерживать главное свойство сайта - актуальность. Данная статья посвящена основам создания HTML-форм, их обработке и способам передачи данных из экранных форм в PHP-сценарии.
1) Создание простой формы
Теги и задают начало и конец формы. Начинающий форму тег содержит два атрибута: action
и method
. Атрибут action содержит адрес URL сценария, который должен быть вызван для обработки сценария. Атрибут method
указывает браузеру, какой вид HTTP запроса необходимо использовать для отправки формы; возможны значения POST
и GET
.
Замечание
Главное отличие методов POST и GET заключается в способе передачи информации. В методе GET параметры передаются через адресную строку, т.е. по сути в HTTP-заголовке запроса, в то время как в методе POST параметры передаются через тело HTTP-запроса и никак не отражаются на виде адресной строки.
В данной html-форме присутствует элемент browse
, который открывает диалоговое окно для выбора файла для загрузки на сервер. При нажатии на кнопку "Передать файл"
, файл передается сценарию-обработчику.
Затем необходимо написать сценарий обработчик action.php
. Перед написание обработчика необходимо определиться в какой каталог мы будет копировать файл:
if(isset($_FILES
[
"myfile"
]))
// Если файл существует
{
$catalog
=
"../image/"
;
// Наш каталог
if (is_dir
($catalog
))
// Если такой каталог есть
{
$myfile
=
$_FILES
[
"myfile"
][
"tmp_name"
];
// Времменый файл
$myfile_name
=
$_FILES
[
"myfile"
][
"name"
];
// Имя файла
if(!
copy
($myfile
,
$catalog
)) echo
"Ошибка при копировании файла "
.
$myfile_name
// Если неудалось скопировать файл
}
else
mkdir
("../image/"
);
// Если такого каталога нет, то мы его создадим
}
?>
Замечание
Если вы доверяете пользователям закачивать на ваш сервер любые файлы, нужно быть предельно осторожным. Злоумышленники могут внедрить «нехороший» код в картинку или файл и отправить на сервер. В таких случаях нужно жестоко контролировать загрузку файлов.
Данный пример демонстрирует создание каталога и копирование файла в этот каталог на сервер.
Также хотел бы продемонстрировать пример с элементом checkbox
. Этот элемент немного отличается от других элементов тем, что если не один из элементов checkbox
’a не выбран, то суперглобальная переменная $_POST
вернет пустое значение:
if (!empty($_POST
[
"mycolor"
])) echo
$_POST
[
"mycolor"
];
// Если выбран хоть 1 элемент
else echo
"Выберите значение"
;
?>
Подготовлена
Чуйковым А.С.
ВВЕДЕНИЕ
1.
СОЗДАНИЕ HTML-ФОРМ
1.1.
Элементы форм
1.3.2.
Поле ввода пароля
1.3.3.
Скрытое текстовое поле
1.3.7.
Кнопка отправки формы
1.3.8.
Кнопка сброса
1.5.2.
Списки множественного выбора.
2.2.
Трансляция полей формы
2.3.
Трансляция переменных окружения
2.4.
Работа с cookies
2.4.1.
Пример приложения с cookies
2.5.
Обработка списков с множественным
выбором
2.6.
Обработка массивов
2.7.
Особенности обработки независимых
переключателей
2.8.
Диагностика создаваемых массивов
3.
КАКОЙ РЕЖИМ ВЫБРАТЬ: register_globals=off & on ?
3.1.
Первый пример уязвимости
3.2.
Второй пример уязвимости
3.3.
Порядок трансляции переменных
4.
ПРИЛОЖЕНИЯ, ХРАНЯЩИЕ ДАННЫЕ О РЕГИСТРАЦИИ
ПОЛЬЗОВАТЕЛЕЙ В БАЗЕ ДАННЫХ MySQL
5.
ЗАДАНИЕ НА САМОСТОЯТЕЛЬНУЮ РАЗРАБОТКУ
ЗАКЛЮЧЕНИЕ
ЛИТЕРАТУРА
Введение
Одно
из наиболее распространенных приложений
любого языка создания серверных сценариев
– обработка HTML - форм.
Web-программирование в большей части
представляет собой обработку различных
данных, введенных пользователем.
РНР облегчает
задачу обработки и разбора форм,
поступивших из браузера, так как в язык
на самом нижнем уровне встроены все
необходимые возможности. Поэтому
программисту не приходится даже и
задумываться над особенностями
протокола HTTP и размышлять, как же
происходит отправка и прием роsт-форм
или даже загрузка файлов.
1.
СОЗДАНИЕ HTML - ФОРМ
Работая
с формами можно вводить текст в поле
ввода, выбирать пункт меню, отмечать
флажком правильный ответ, нажимать
кнопку и т.д. При этом всегда ожидается
от документа осмысленная реакция.
1.1.
Элементы форм
Форма
в HTML-документе реализуется
тегом-контейнером FORM, в котором
задаются все управляющие элементы -
поля ввода, кнопки и т.д. Если управляющие
элементы указаны вне содержимого
тега FORM, то они не создают форму, а
используются для построения
пользовательского интерфейса
на WEB-странице, то есть для привнесения
в нее различных кнопок, флажков, полей
ввода. Обработка таких элементов
производится индивидуально в рамках
самого HTML-документа с помощью
включенных в него скриптов. А могут
вообще никак не обрабатываться. Например,
управляющий элемент TEXTAREA часто
используется для создания окна с полосой
прокрутки внутри документа для вывода
большого текста, который играет
второстепенную роль. Обычно так
отображаются тексты лицензионных
соглашений, тексты больших комментариев
или правила пользования данным WEB-ресурсом.
Имена элементам формы присваиваются
через их атрибут NAME. Каждый элемент
формы имеет начальное, используемое по
умолчанию, и конечное значения, которые
являются символьными строками. Начальные
значения элементов не меняются, благодаря
чему может осуществляться сброс значений,
указанных пользователем. Результатом
этого действия будет установка всех
управляющих элементов формы в своих
первоначальных используемых по умолчанию
значениях.
В HTML определены
следующие типы управляющих элементов:
● Кнопки -
задаются с помощью элементов BUTTON и INPUT.
Различают:
○ кнопки
отправки - при нажатии на них
отправляются формы серверу;
○ кнопки
сброса - при их нажатии устанавливают
управляющие элементы в первоначальные
значения;
○ прочие
кнопки - кнопки, для которых не
указано действие, выполняемое по
умолчанию при их нажатии.
● Зависимые
переключатели (переключатели с
зависимой фиксацией) - задаются
элементом INPUT и представляют собой
переключатели «вклвыкл». Если несколько
зависимых переключателей имеют одинаковые
имена, то они являются взаимоисключающими.
Это значит, что если одна из них ставится
в положение «вкл», то все остальные
автоматически - в положение «выкл».
Именно это и является преимуществом их
использования.
● Независимые
переключатели (переключатели с
независимой фиксацией) - задаются
элементом INPUT и представляют собой
переключатели «вклвыкл», но в отличие
от зависимых, независимые переключатели
могут принимать и изменять свое значение
независимо от остальных переключателей.
Даже если последние имеют такое же имя.
● Меню -
реализуется с помощью элементов SELECT,
OPTGROUP и OPTION. Меню предоставляют
список возможных вариантов выбора.
● Ввод
текста - реализуется элементами INPUT,
если вводится одна строка, и
элементами TEXTAREA - если несколько
строк. В обоих случаях введенный текст
становится текущим значением управляющего
элемента.
● Выбор
файлов - позволяет вместе с формой
отправлять выбранные файлы,
реализуется HTML-элементом INPUT.
● Скрытые
управляющие элементы - создаются
управляющим элементом INPUT.
1.2.
Тег FORM - контейнер форм
Форма
реализуется тегом-контейнером FORM.
Тег своими атрибутами указывает адрес
сценария, которому будет послана форма,
способ пересылки и характеристику
данных, содержащихся в форме. Начальный
и конечный теги FORM задают границы
формы. Их указание является обязательным.
Атрибуты
тега FORM:
● action -
единственный обязательный атрибут. В
качестве значения этого атрибута
указывают URL-адрес запрашиваемой CGI-программы.
Эта программа будет обрабатывать данные,
содержащиеся в форме. Допустимо
использовать запись MAILTO:URL, благодаря
которой форма будет послана по электронной
почте. Если атрибут ACTION все-таки
не указан, то содержимое формы будет
отправлено на URL-адрес, с которого
загружалась данная WEB-страница.
● method -
определяет метод HTTP, используемый
для пересылки данных формы от браузера
к серверу. Атрибут METHOD может
принимать два значения: get или post.
● enctype -
необязательный атрибут. Указывает тип
содержимого формы, используемый для
определения формата кодирования при
ее пересылке. В HTML определены два
возможных значения для атрибута ENCTYPE:
● APPLICATION/X-WWW-FORM-URLENCODED (используется
по умолчанию).
● MULTIPART/FORM-DATA.
1.3.
Тег INPUT и способы его использования
Тег INPUT позволяет
создавать внутри формы поля ввода строки
текста, имени файла, пароля и др.
У INPUT нет конечного тега. Атрибуты
и особенности использования INPUTзависят
от способа его использования.
1.3.1.
Однострочные поля ввода
Формат
тега INPUT для создания поля ввода
текстовой строки:
name=имя_параметра
Тег
создает поле ввода с максимально
допустимой длиной текста maxlen и
размером в size знакомест. Если задан
атрибут value, то в поле будет изначально
отображаться указанная строка. В
квадратных скобках помечены необязательные
атрибуты.
1.3.2.
Поле ввода пароля
Пароль
не должен отображаться на экране. Поле
для ввода пароля:
name=имя_параметра
Вводимая
информация в поле не отображается, а
заменяется «звездочками».
Не
рекомендуется устанавливать
значение value (значение по умолчанию)
из соображений безопасности. В окне
браузера данное значение не отображается,
но стоит просмотреть исходный HTML-код,
пароль будет виден «невооруженным
глазом».
1.3.3.
Скрытое текстовое поле
Для
передачи служебной информации (о которой
пользователь даже не должен подозревать)
используются скрытые поля. С помощью
таких полей, например, могут передаваться
параметры настройки:
value=значение
Такие
поля передаются серверу, но на Web-странице
не отображаются.
1.3.4.
Независимые переключатели
Пользователю,
заполняющему форму у себя в браузере,
дают возможность указать свои настройки
с помощью выбора определенных значений.
При этом приводятся сами эти значения,
а рядом с ними помещается небольшое
квадратное поле, в котором можно
установить, либо убрать галочку. При
этом значение, соответственно, будет
либо выбрано, либо нет:
value=значение
Если
переключатель был включен на момент
нажатия кнопки отправки данных, то
сценарию будет передан параметр имя=значение.
Если же флажок выключен, то сценарию
вообще ничего не будет передано - как
будто нашего переключателя вообще нет.
Переключатель
может быть по умолчанию либо включен,
либо выключен. Чтобы переключатель был
по умолчанию включен, необходимо для
него указать атрибут checked.
Переключатель checkbox называется
независимым, так как его состояние не
зависит от состояния других
переключателей checkbox. В одной форме
может быть одновременно выбрано несколько
переключателей
Листинг
input.html. Тег input и способы его использования