HTML формы — сложные элементы интерфейса. Они включают в себя разные функциональные элементы: поля ввода и
. Каждому разделу можно присвоить название с помощью элемента .
Контактная информация
Имя
E-mail
Рис. 1. Группировка полей формы
Чтобы сделать форму более понятной для пользователей, в поля формы добавляют текст, содержащий пример вводимых данных. Такой текст называется подстановочным и создаётся с помощью атрибута placeholder .
Обязательные для заполнения поля также необходимо выделять. До появления HTML5 использовался символ звездочки * , установленный возле названия поля. В новой спецификации появился специальный атрибут required , который позволяет отметить обязательное поле на уровне разметки. Этот атрибут дает указание браузеру (при условии, что тот поддерживает HTML5), указание не отправлять данные после нажатия пользователем кнопки отправить, пока указанные поля не заполнены.
Для изменения внешний вид текстового поля при получении фокуса, используется псевдокласс focus . Например, можно сделать фон текущего поля более темным или добавить цветную рамку, чтобы оно выделялось среди остальных:
Input:focus {
background: #eaeaea;
}
Ещё один полезный html5-атрибут — атрибут autofocus . Он позволяет автоматически установить фокус на нужном начальном поле для элементов и (только в один элемент каждой формы).
Пример создания формы регистрации
HTML разметка
Примечание
action="form.php" — ссылка на файл обработчика формы. Создайте файл в кодировке UTF-8, закачайте его на сервер и замените action="form.php" на путь к файлу на вашем сервере.
Рис. 2. Внешний вид формы по умолчанию
Как видно из рисунка, каждый элемент формы имеет стили браузера по умолчанию. Очистим стили и оформим элементы формы.
Form-wrap {
width: 550px;
background: #ffd500;
border-radius: 20px;
}
.form-wrap *{transition: .1s linear}
.profile {
width: 240px;
float: left;
text-align: center;
padding: 30px;
}
form {
background: white;
float: left;
width: calc(100% - 240px);
padding: 30px;
border-radius: 0 20px 20px 0;
color: #7b7b7b;
}
.form-wrap:after, form div:after {
content: "";
display: table;
clear: both;
}
form div {
margin-bottom: 15px;
position: relative;
}
h1 {
font-size: 24px;
font-weight: 400;
position: relative;
margin-top: 50px;
}
h1:after {
content: "\f138";
font-size: 40px;
font-family: FontAwesome;
position: absolute;
top: 50px;
left: 50%;
transform: translateX(-50%);
}
/********************** стилизация элементов формы **********************/
label, span {
display: block;
font-size: 14px;
margin-bottom: 8px;
}
input, input {
border-width: 0;
outline: none;
margin: 0;
width: 100%;
padding: 10px 15px;
background: #e6e6e6;
}
input:focus, input:focus {
box-shadow: inset 0 0 0 2px rgba(0,0,0,.2);
}
.radio label {
position: relative;
padding-left: 50px;
cursor: pointer;
width: 50%;
float: left;
line-height: 40px;
}
.radio input {
position: absolute;
opacity: 0;
}
.radio-control {
position: absolute;
top: 0;
left: 0;
height: 40px;
width: 40px;
background: #e6e6e6;
border-radius: 50%;
text-align: center;
}
.male:before {
content: "\f222";
font-family: FontAwesome;
font-weight: bold;
}
.female:before {
content: "\f221";
font-family: FontAwesome;
font-weight: bold;
}
.radio label:hover input ~ .radio-control,
.radiol input:focus ~ .radio-control {
box-shadow: inset 0 0 0 2px rgba(0,0,0,.2);
}
.radio input:checked ~ .radio-control {
color: red;
}
select {
width: 100%;
cursor: pointer;
padding: 10px 15px;
outline: 0;
border: 0;
background: #e6e6e6;
color: #7b7b7b;
-webkit-appearance: none; /*убираем галочку в webkit-браузерах*/
-moz-appearance: none; /*убираем галочку в Mozilla Firefox*/
}
select::-ms-expand {
display: none; /*убираем галочку в IE*/
}
.select-arrow {
position: absolute;
top: 38px;
right: 15px;
width: 0;
height: 0;
pointer-events: none; /*активизируем показ списка при нажатии на стрелку*/
border-style: solid;
border-width: 8px 5px 0 5px;
border-color: #7b7b7b transparent transparent transparent;
}
button {
padding: 10px 0;
border-width: 0;
display: block;
width: 120px;
margin: 25px auto 0;
background: #60e6c5;
color: white;
font-size: 14px;
outline: none;
text-transform: uppercase;
}
/********************** добавляем форме адаптивность **********************/
@media (max-width: 600px) {
.form-wrap {margin: 20px auto; max-width: 550px; width:100%;}
.profile, form {float: none; width: 100%;}
h1 {margin-top: auto; padding-bottom: 50px;}
form {border-radius: 0 0 20px 20px;}
}
Файл form.php
" . "\r\n";
$headers .= "Bcc: ваш_email". "\r\n";
if(!empty($name) && !empty($sex) && !empty($email) && !empty($country) && filter_var($email, FILTER_VALIDATE_EMAIL)){
mail($email, $subject, $msg, $headers);
echo "Спасибо! Вы успешно зарегистрировались.";
}
?>
Примечание
В переменной $subject укажите текст, который будет отображаться как заголовок письма;
Ваше_имя — здесь вы можете указать имя, которое будет отображаться в поле «от кого письмо» ;
url_вашего_сайта замените на адрес сайта с формой регистрации;
ваш_email замените на ваш адрес электронной почты;
$headers .= "Bcc: ваш_email". "\r\n"; отправляет скрытую копию на ваш адрес электронной почты.
В этом уроке PHP рассматриваются базовые понятия языка: обработка форм с отправкой запроса в веб-страницы, основные управляющие конструкции php при обработке форм, запись данных из формы PHP в файл, функция даты в PHP date().
1. Напомним, что все файлы php
тестируются только при запущенном Денвере
и только из адресной строки браузера. Запускать файлы php двойным щелчком нельзя!
2. Запустите Денвер.
Упражнение 1. Обработка простой формы
В данном уроке PHP рассмотрим обработку формы на HTML-странице, создание переменных PHP для полей формы.
1. Создайте форму, как на рис. 3.1. Подразумевается, что при нажатии на кнопку Отправить заказ данные из формы будут переданы администратору, а клиент на экране увидит ответ Заказ обработан
. Если Вы затрудняетесь в написании формы, тогда реализуйте код, приведенный ниже рисунка, и сохраните его в папке php_2
под именем forma_bob.html
Напоминаем, что адрес обработчика формы записывается в атрибуте action
тега form
.
Рисунок 3.1
2. Для того, чтобы пользователь получил ответ после отправки данных, необходимо создать обработчик формы на языке php. Создайте код, приведенный ниже, и сохраните его в папке php_2
под именем zakaz.php
3. Проверьте работоспособность обработчика. Для этого запустите файл forma_bob.html
через браузер, набрав в адресной строке браузера адрес http://localhost/php_2/forma_bob.html
4. В поля формы введите любые цифры и нажмите кнопку Отправить заказ
. Результат на рис. 3.2.
Рисунок 3.2
Переменные формы
Весь смысл использования формы заказа заключается в получении информации о заказе клиента, которую он ввел с клавиатуры. Внутри PHP-сценария к каждому из полей формы можно получить доступ как к переменной, имеющей то же имя, что и у поля формы. В языке PHP переменные легко распознать, так как они начинаются со знака доллара $
.
Вы можете получить доступ к содержимому поля tireqty
следующими способами:
$tireqty
//короткий стиль
$_POST[‘tireqty’]
//средний стиль
$HTTP_POST_VARS[‘tireqty’]
//длинный стиль
Мы будем использовать длинный стиль для ссылок на переменные формы, но для простоты использования строить короткие версии применения. Это удобный и безопасный способ манипулирования данными, который эффективно работает во всех системах, независимо от выбранных версий и настроек.
Копируя содержимое одной переменной в другую, мы применяем операцию присваивания, для обозначения которой в языке PHP используется знак равенства (=
). Приводимая ниже строка кода создает новую переменную с именем $tireqty
и переносит содержимое $_POST[‘tireqty’]
в эту новую переменную:
$tireqty=$_POST[‘tireqty’]
Так как этот сценарий не генерирует никаких выходных данных, нет никакой разницы, будет он помещен выше или ниже дескриптора
. Обычно этот блок размещается в начале сценария.
5. В файле zakaz.php
измените код следующим образом и проверьте работоспособность формы. Результат на рис. 3.3. Цифры могут отличаться в зависимости от того, какие данные Вы ввели.
Рисунок 3.3
Упражнение 2. Создание калькулятора для формы «Автозапчасти от Боба»
В этом уроке PHP рассмотрим основные арифметические функции PHP для расчетов.
1. Файл forma_bob.html
сохраните под именем forma_bob_2.html
2. Файл zakaz.php
сохраните под именем zakaz_2.php
3. В файле forma_bob_2.html
форму «Автозапчасти от Боба» измените так, чтобы она имела вид, как на рис. 3.4. Не забудьте изменить имя обработчика на zakaz_2.php
. Если затрудняетесь, то можете реализовать код, приведенный ниже.
Рисунок 3.4
4. Создайте новую обработку для формы в файле zakaz_2.php
, используя знания, полученные из предыдущих уроков. Обработка должна содержать следующие выходные данные и условия:
1. Стоимость каждого товара определяется константой. Константа на PHP задается функцией define. Пример define("POKRPRICE",10); Первый параметр функции - это имя константы, которое пишется прописными буквами, второй параметр - значение константы.
2. Логическая операция ИЛИ
обозначается ||
3. Логическая операция И
обозначается &&
.
4. Операции сравнения: больше >
, меньше <
, больше или равно >=
, меньше или равно <=
5. Функция, которая считывает время с компьютера date("H:i, j F")
6. Функция, которая форматирует количество знаков после запятой number_format
. Пример number_format($sumnalog,2)
. Первый параметр - переменная, у которой форматируем знаки, второй параметр - количество знаков после запятой.
7. Если Вы затрудняетесь с созданием обработки формы, может воспользоваться кодом, приведенным ниже (рис. 3.8):
Рисунок 3.8
Упражнение 3. Запись данных из формы в текстовый файл
В нашем уроке PHP также рассматриваем запись данных из формы в текстовый файл и функцию даты date() при обработке формы.
1. В файле-обработчике формы «Автозапчасти об Боба» после последней закрывающей фигурной скобки добавьте код.
Рисунок 3.9
2. Проверьте работу программы. Текстовый файл orders.txt
создается автоматически, просмотрите его содержимое.
КОНТРОЛЬНОЕ ЗАДАНИЕ
После изучения данного урока PHP предлагается выполнить контрольное задание для закрепления полученных знаний.
Рисунок 3.10
1. Создать форму, как на рис. 3.10.
2. Создать обработку формы, которая будет выводить результаты заказа, как на рис. 3.11 (результаты будут отличаться в зависимости от введенных в форму данных.
3. Результаты заказа должны записываться в отдельный текстовый файл.
Список заказа должен отражать следующее:
Вид товара.
Стоимость 1 шт. товара.
Количество заказанных товаров.
Общую стоимость заказа без доставки, налога на продажи и скидок.
Стоимость доставки.
Величину налога с продажи.
Скидку в процентах и рублях.
Стоимость заказа с учетом доставки, налога с продаж и скидки.
Адрес доставки.
Условия задачи:
Стоимость товаров:
ручки - 10 руб.
книги - 100 руб.
сувенира - 1000 руб.
компьютера - 10000 руб.
Налог с продаж - 18%. Налог прибавляется к общей стоимости всех товаров с учетом скидки.
Стоимость доставки - 500 руб. Стоимость доставки прибавляется к общей стоимости всех товаров в учетом скидки и налога с продаж.
Скидки:
При заказе ручек или книг меньше 5 шт. скидка - 5%, от 5 до 10 шт. - 10%, выше 10 шт. - 20%;
При заказе сувениров или компьютеров от 10 до 20 шт. скидка - 10%, от 20 до 30 шт. - 20%, выше 30 шт. - 40%.
Сегодня будем работать над созданием красивой HTML формы обратной связи для сайта, работающей на PHP и имеющею встроенную защиту от спама. Никаких особых знаний вам не потребуется, достаточно будет основ html и элементарной логики. Я дам готовые файлы, которые вы сможете вставить на сайт без изменений или скорректировать под свои нужды.
Недавно я делал статью о том, как сделать с помощью плагина Contact Form 7. Также просто можно сделать форму обратной связи на Joomla и других популярных CMS.
Но, что делать сайтам, которые не используют популярные CMS? – Остается делать все руками.
Кроме того, использование обратной связи без плагинов возможно и для WordPress. Лишние плагины создают немалую нагрузку на сервера и отказ от них позволяет ускорить работу сайта.
Заказать установку и настройку готовой формы за 500 рублей можно здесь
(это для тех кому лень руками поработать или навыка недостаточно).
Принцип работы формы обратной связи на html Наша форма будет иметь 5 полей для ввода данных – имя, электронный адрес, телефон, адрес сайта, текст сообщения (вы сможете удалить или изменить их самостоятельно).
Все поля, кроме адреса веб сайта будут обязательны для заполнения (это вы тоже сможете настроить самостоятельно).
Для полей с email адресом и сайтом будет проводиться обязательная проверка правильности ввода данных.
Конечная форма связи будет иметь вот такой вид:
Для работы контактной формы, созданной на html, требуется 3 элемента.
Первый отвечает за структуру самой формы, за тип и количество полей ввода данных. Это обычный html код.
Второй отвечает за обработку данных, которые пользователь вводит в поля формы. Он определяет, что, куда и в каком виде пересылать, после того, как будет нажата кнопка отправки сообщения. Для реализации используется специальный PHP скрипт.
Третий отвечает за внешний вид. Устанавливает размеры и расположение полей ввода данных, добавляет различные цвета и эффекты. Это все задается CSS стилями.
Демо версия формы
Настройку каждого из этих элементов мы с вами разберем по шагам.
Создание HTML макета Чтобы не делать статью слишком длинной и не добавлять отдельно каждый элемент, я приведу полный html код, а ниже опишу каждый блок и возможные изменения.
Для обозначения форм в html используется тег
, внутри которого заполняются необходимые параметры.
Имя:
Email:
Правильный формат "name@something.com"
Телефон:
Правильный формат "+7-123-4567890"
Сайт:
Правильный формат "http://someaddress.com"
Текст сообщения:
Отправить сообщение
Имя:
"Введите ваше имя"
required />
Email:
"Введите электронный адрес"
required />
Телефон:
"Введите номер телефона"
required />
Правильный формат "+7-123-4567890"
Сайт:
"Введите адрес вашего сайта"
pattern
=
"(http|https)://.+"
/>
Правильный формат "http://someaddress.com"
Текст сообщения:
Отправить сообщение
Начнем с первой строки.
class=”contact_form”
– указываем класс, для того, чтобы в будущем задать CSS стили.
action=”contact-form.php”
– указываем название файла со скриптом, который будет обрабатывать данные формы и осуществлять отправку сообщения. Если файл лежит в той же папке, что и страница с формой, то достаточно указать только название файла, если в другой, то нужно будет указать и путь к файлу.
Дальше идут 4 блока
Отвечающих за вывод полей для ввода данных, по названиям понятно, какой за что отвечает. Сами поля выводятся с помощью тегов , внутри которого задаются следующие характеристики:
Type
– отвечает за тип вводимых данных, text – обычный текст, email – электронный адрес, такие поля автоматически проверяются на правильность (должна присутствовать @), tel – телефон, url – адрес сайта.
Name
– собственное название самого элемента, оно необходимо, что скрипт знал как использовать данные каждого поля. Если вы сделаете несколько полей одного типа, то вам необходимо каждому полю присвоить свое name.
Placeholder
– это подсказка, находящаяся внутри поля, текст, замещающий пустое поле элемента. Ее можно изменить или удалить, на работу формы она не влияет.
Required
– этот параметр указывает на то, что поле обязательно для заполнения. Вы можете самостоятельно решить, какие элементы обязательны, а какие нет.
pattern=”(http|https)://.+”
– эта конструкция служит для проверки корректности поля веб сайт, указывает на то, что адрес обязательно должен содержать http://текст
или https://текст
, в противном случае будет ошибка.
Для некоторых полей задана всплывающая подсказка, которая появляется при выборе элемента. Ее задет , где form_hint является классом элемента (его свойства прописываются в CSS). Текст во всплывающей подсказке для каждого поля контактной формы можно задать любой. Если такая фишка вам не нужна – просто удалите весь тег .
Поля для ввода самого сообщения размечается тегом , в котором cols задает количество символов поля в ширину, а rows число строк.
Защита от спама
– невидимое поле с именем name=bezspama. У него стоит стиль display:none – это значит поле невидимо людям, но боты его будут заполнять на автомате.
И завершающий элемент любой формы – кнопка отправки сообщения, она задается тегом , имеющим свой класс для настройки внешнего вида и тип “submit”.
Для добавления или удаления полей, достаточно убрать ненужные или вставить новые по аналогии с существующими, прописав для них все свойства и имена.
Оформление CSS стилями Если вы посмотрите в браузере на то, что получилось, то увидите нечто корявое и непривлекательное. Для того, чтобы у нас получилась красивая форма обратной связи, придется поработать над ее стилями (html будет недостаточно).
Если вы владеете CSS, то задать оформление для всех элементов формы сможете без проблем, тут даже не потребуется моя помощь.
Если же вы не знакомы со стилями, то я просто дам вам готовый файл, в котором уже все прописано таким образом, что ваша форма будет идентична той, что в примере.
Подключить стили можно двумя способами:
Скопировать содержимое файла в файл style.css, который уже есть на вашем сайте (добавьте в самый конец) Поместить файл, который я дал, на ваш хостинг и подключить его.
Подключаются файлы стилей следующим кодом , размещаемым внутри
. Если файл со стилями (styles.css) находится не в одной папке с html страницей, то пропишите полный путь до него.В файле со стилями, который я дал, каждый элемент подписан, поэтому, вы можете вносить в него любые изменения – менять цвета, размеры, форму, эффекты. Владея самыми базовыми знаниями, вы сможете легко его править.
Настройка PHP кода (добавлена защита от спама) Как и в случае со стилями, я дам вам готовый код, обрабатывающий HTML форму обратной связи и защищающий от спама. Этот файл адаптирован для конкретной конфигурации и, если вы захотите задать новые поля или удалить существующие, в него придется вносить изменения. Поэтому, я расскажу вам, как он работает, чтобы вы поняли, что нужно менять.
Для сайтов, использующих кодировку windows-1251 и версию php 5.4+, в код нужно будет внести дополнение, связанное с функцией htmlspecialchars. Покажу его ниже. Иначе, вместо кириллицы будут приходить пустые поля.
Помните, в свойствах формы (в html файле) мы указывали параметр action=”contact-form.php”. Вам нужно создать файл с названием contact-form.php и поместить в него находящийся ниже код.
\r\n Reply-To: $email \r\n";
if (mail($address, $sub, $mes, $from)) {
header("Refresh: 5; URL=https://сайт");
echo "
";}
else {
header("Refresh: 5; URL=https://сайт");
echo "
";}
}
exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */
?>
/* Задаем переменные */
$name
=
htmlspecialchars
($_POST
[
"name"
]
)
;
$email
=
htmlspecialchars
($_POST
[
"email"
]
)
;
$tel
=
htmlspecialchars
($_POST
[
"tel"
]
)
;
$website
=
htmlspecialchars
($_POST
[
"website"
]
)
;
$message
=
htmlspecialchars
($_POST
[
"message"
]
)
;
$bezspama
=
htmlspecialchars
($_POST
[
"bezspama"
]
)
;
/* Ваш адрес и тема сообщения */
$sub
=
"Сообщение с сайта ХХХ"
;
/* Формат письма */
$mes
=
"Сообщение с сайта ХХХ.\n
Имя отправителя: $name
Электронный адрес отправителя: $email
Телефон отправителя: $tel
Сайт отправителя: $website
Текст сообщения:
$message"
;
if
(empty
($bezspama
)
)
/* Оценка поля bezspama - должно быть пустым*/
/* Отправляем сообщение, используя mail() функцию */
$from
=
"From: $name <$email> \r\n Reply-To: $email \r\n"
;
if
(mail
($address
,
$sub
,
$mes
,
$from
)
)
{
header
()
;
echo
"
Письмо отправлено, через 5 секунд вы вернетесь на страницу XXX"
;
}
else
{
header
("Refresh: 5; URL=https://сайт"
)
;
echo
"
Письмо не отправлено, через 5 секунд вы вернетесь на страницу YYY"
;
}
exit
;
/* Выход без сообщения, если поле bezspama заполнено спам ботами */
Первым делом нам необходимо задать переменные, которые будут обрабатываться php кодом. Для того, чтобы не запутаться, присваиваем им такие же имена, как были в самой форме, только начинаются все переменные со знака $. Сама команда присвоения значения имеет такой вид:
$название = htmlspecialchars($_POST["название"]);
$
название=
htmlspecialchars
($
_POST
[
"название"
]
)
;
Если вы добавляли какие-то дополнительные поля данных, то в блоке переменных допишите их имена.
Не все переменные мы берем из формы. Как минимум, адрес электронной почты, на который придет письмо (ваш адрес) указывается отдельно. В данном случае это переменная $address – впишите в ее значение свой электронный ящик.
Также, в данном примере явным образом задано значение переменной $sub – она будет выдавать тему письма. Можно добавить тему сообщения в HTML форму в виде текстового поля (наподобие name), и брать значение этой переменной оттуда.
В блоке формат письма настраивается то сообщение, которое получите вы. Он может отличаться от того, что было написано в поле textarea под названием message. Я просто сделал еще одну переменную $mes и включил в нее дополнительный текст и важные данные отправителя (имя, почту, телефон, сайт). Эту часть вы можете сконфигурировать так, как вам удобно.
Чтобы получаемые вами письма подписывались именем отправителя, и в них включался их обратный адрес, а не адрес сервера, на котором находится ваш php файл, мы задаем новую переменную $from, в нее включаем имя и электронный ящик отправителя письма.
Затем функция mail осуществляет отправку письма по заданным параметрам. В случае успешной отправки появляется сообщение о том, что письмо отправлено, а через 5 секунд пользователя перебрасывает на страницу вашего сайта (адрес страницы и время задержки вы можете изменить). Если письмо отправить не удалось, появляется сообщение, что письмо не отправлено и через 5 секунд идет переход на страницу сайта, аналогичным образом вы можете задать адрес страницы и время.
Вставка формы на страницу сайта Для того, чтобы вставить созданную вами форму обратной связи, вам нужно скопировать html код формы и вставить его в ту часть кода страницы, где вы хотите вывести обратную связь для сайта.
Еще раз хочу напомнить, если файл с PHP программой находятся не в той же папке, что и страница, на которой размещен html код, то в коде самой формы нужно прописать полный путь к нему, иначе, работать не будет, так как форма не найдет файл обработчик.
Скачать файлы контактной формы
Активный анти спам с вводом данных в поле Спамеры действуют с помощью различных программных средств и некоторые боты умеют обходить защиту с пустым полем, которая встроена в базовую версию. Если они вас начинают донимать, то можно применить вместо или дополнительно простую защиту со вводом данных в специальное поле. Например, сделать математическое выражение с просьбой ввести ответ или задать какой-либо простой вопрос. Больших изменений в форме это не потребует.
Я покажу как изменить код формы и PHP обработчик для использования этого метода антиспама. При желании вы можете не менять защиту с пустым полем, а добавить соответствующие строки в код и у вас будет работать одновременно 2 метода – по идее, должно быть более эффективно.
Первым делом нам необходимо добавить поле для ввода и вопрос в HTML код. В качестве основы у нас уже есть строка 25 (input
name
=
“bezspama”
). Это поле невидимо. Мы превращаем его в обычное. Для этого всю строку меняем на вот такой блок:
2+2*2=:
Вместо математического выражения 2+2*2 можете ввести любые данные – это визуальный вопрос для пользователя. Из поля input мы убрали стиль display:none
и добавили обязательность заполнения.
Следующим шагом меняем данные в PHP обработчике, чтобы он делал проверку уже не на пустоту этого поля, а на правильность введенных данных. Проверка у нас делалась в строке 25 выражением empty
($bezspama
)
. Мы меняем это выражение и будем делать проверку равенства заполненного поля заранее заданному числу. В моем примере, математическое выражение равно 6, поэтому вся строка будет выглядеть вот так.
Зачастую на Web – сайтах можно встретить страницы с
размещенными на них HTML - формами. Веб-формы – удобный способ получения
информации от посетителей вашего сайта. Пример тому – гостевая
книга , – которая обеспечивает обратную связь с посетителями и
разработчиками сайта. Формы так же удобны и для разработчиков сайта при
разработке CMS, которая позволяет поддерживать главное свойство сайта -
актуальность. Данная статья посвящена основам создания HTML-форм, их
обработке и способам передачи данных из экранных форм в
PHP-сценарии.
1) Создание простой формы
Теги
и
задают
начало и конец формы. Начинающий форму тег
содержит
два атрибута: action
и method
. Атрибут action содержит адрес
URL сценария, который должен быть вызван для обработки сценария. Атрибут method
указывает браузеру, какой вид HTTP запроса необходимо
использовать для отправки формы; возможны значения POST
и GET
.
Замечание
Главное отличие методов POST и GET заключается в способе
передачи информации. В методе GET параметры передаются через адресную
строку, т.е. по сути в HTTP-заголовке запроса, в то время как в методе
POST параметры передаются через тело HTTP-запроса и никак не отражаются на
виде адресной строки.
$text
=
nl2br
($_POST
[
"mytext"
]); ?>
Задача:
Пусть необходимо создать выпадающий список
с годами с 2000 по 2050.Решение:
Необходимо создать HTML форму
c элементом SELECT и PHP – сценарий для обработки
формы.
Обсуждение:
Для начала создадим два файла: form.html
и action.php
. В файле form.html
будет содержаться html-форма с
выпадающим списком. Причем значения в списке можно указать двумя
способами:
I. Ввод данных вручную:
2000
2001
2002
……………………………………………
2050
II. Ввод данных через цикл:
$year
=
2000
;
for ($i
=
0
;
$i
<=
50
;
$i
++)
// Цикл от 0 до 50 { $new_years
=
$year
+
$i
;
// Формируем новое значение echo
""
.
$new_years
.
" "
;
//Формируем новую строчку } ?>
Как видно, второй пример с циклом, более компактный.
Думаю, не стоит приводить скрипт обработчика данной формы, потому что он
обрабатывается точно так же как текстовое поле, т.е. значения списка можно
извлечь из суперглобального массива $_POST
.
Описание:
Создадим HTML-форму для отправки файла на сервер.
В данной 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
"Выберите
значение"
; ?>
Есть еще вопросы или что-то непонятно - добро пожаловать на наш
У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!
Работа с формами
Для передачи данных от пользователя Web-страницы на сервер используются
HTML-формы. Для работы с формами в PHP предусмотрен ряд специальных средств.
Предварительно определенные переменные
В PHP существует ряд предварительно определенных переменных, которые
не меняются при выполнении всех приложений в конкретной среде. Их также
называют переменными окружения или переменными среды. Они отражают установки
среды Web-сервера Apache, а также информацию о запросе данного браузера. Есть
возможность получить значения URL, строки запроса и других элементов
HTTP-запроса.
Все предварительно определенные переменные содержатся в ассоциативном
массиве $GLOBALS
. Кроме переменных окружения этот массив содержит
также глобальные переменные, определенные в программе.
Пример 1
Просмотр массива $GLOBALS
$value)
echo "\$GLOBALS[\"$key\"] == $value ";
?>
В результате на экране появится список всех глобальных переменных,
включая переменные окружения. Наиболее часто используемые из них:
Переменная
Описание
Cодержание
$_SERVER["HTTP_USER_AGENT"]
Название и версия клиента
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
$_SERVER["REMOTE_ADDR"]
IP-адрес
144.76.94.14
getenv("HTTP_X_FORWARDED_FOR")
Внутренний IP-адрес клиента
$_SERVER["REQUEST_METHOD"]
Метод запроса (GET
или POST
)
GET
$_SERVER["QUERY_STRING"]
При запросе GET
закодированные данные, передаваемые вместе с URL
$_SERVER["REQUEST_URL"]
Полный адрес клиента, включая строку запроса
$_SERVER["HTTP_REFERER"]
Адрес страницы, с которой был сделан запрос
$_SERVER["PHP_SELF"]
Путь к выполняемой программе
/index.php
$_SERVER["SERVER_NAME"]
Домен
сайт
$_SERVER["REQUEST_URI"]
Путь
/php/php_form.php
Обработка ввода пользователя
PHP-программу обработки ввода можно отделить от HTML-текста, содержащего
формы ввода, а можно расположить на одной странице.
Пример 2
Пример обработки ввода
" method="post">
Номер карточки:
Здесь отсутствует кнопка передачи данных, т.к. форма, состоящая из одного
поля, передается автоматически при нажатии клавиши .
При обработки элемента с многозначным выбором для доступа ко всем выбранным
значениям нужно к имени элемента добавить пару квадратных скобок. Для выбора нескольких эллементов следует удерживать клавишу Ctrl.
Пример 3.1
Список
Чай
Кофе
Молоко
Ветчина
Сыр
РЕЗУЛЬТАТ ПРИМЕРА 3.1:
Чай
Кофе
Молоко
Ветчина
Сыр
Пример 3.2
Обработка списка из файла ex1.htm
";
foreach ($Item as $value) echo "$value";
echo " ";
?>
Пример 4. Прием значений от checkbox-флажков
$v) {
if($v) echo "Вы знаете язык программирования $k! ";
else echo "Вы не знаете языка программирования $k. ";
}
}
?>
" method="post">
Какие языки программирования вы знаете?
PHP
Perl
РЕЗУЛЬТАТ ПРИМЕРА 4:
Какие языки программирования вы знаете?
PHP
Perl
Пример 5
";
?>
" method="post">
< ?=@htmlspecialchars($_REQUEST["text"])?>
Можно обрабатывать формы, не заботясь о фактических именах полей.
Для этого можно использовать (в зависимости от метода передачи)
ассоциативный массив $HTTP_GET_VARS
или $HTTP_POST_VARS
.
Эти массивы содержат пары имя/значение для каждого элемента переданной формы. Если Вам все равно,
Вы можете использовать ассоциативный массив $_REQUEST
.
Пример 6
Обработка произвольного ввода
независимо от метода передачи
$value)
echo "$key == $value ";
?>
Пример 7. Обработка нажатия на кнопку с использованием оператора "@".
">
С помощью функции header()
, послав браузеру заголовок
"Location"
, можно перенаправить пользователя на новую страницу.
Например:
header("Location: ex2.php"); ?>
Передача файла на сервер. Залить файл. UpLoad
PHP позволяет передавать на сервер файлы. HTML-форма, предназначенная для
передачи файла, должна содержать аргумент enctype="multipart/form-data"
.
Кроме того в форме перед полем для копирования файла должно находиться
скрытое поле с именем max_file_size
. В это скрытое поле должен
быть записан максимальный размер передаваемого файла (обычно не больше 2 Мбайт).
Само поле для передачи файла - обычный элемент INPUT
с аргументом type="file"
.
Например:
" method="post">
После того, как файл передан на сервер, он получает уникальное имя и
сохраняется в каталоге для временных файлов. Полный путь к файлу записывается в
глобальную переменную, имя которой совпадает с именем поля для передачи этого
файла. Кроме этого PHP сохраняет еще некоторую дополнительную информацию о
переданном файле в других глобальных переменных:
Пример 8
Обработка переданного файла
";
echo "имя: ".$_FILES["userfile"]["name"]." ";
echo "размер: ".$_FILES["userfile"]["size"]." ";
echo "тип: ".$_FILES["userfile"]["type"]." ";
}
?>
" method="post">
Примеры загрузки файлов на сервер
Если возникнут проблеммы с перекодировкой сервером загруженного файла, символ с кодом 0х00
заменен на пробел
(символ с кодом 0х20
),
допишите в файл httpd.conf
из каталога Апача (/usr/local/apache) следующие строки.
CharsetRecodeMultipartForms Off