Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали о том, что такое сериализация в php . В данной статье я бы хотел рассказать о том, как работать с формами в PHP
. Язык PHP предназначен для программирования web-сценариев, и обработка форм занимает, пожалуй, самое главное место в этом процессе. Сейчас уже и не встретить сайтов, на которых не было бы, к примеру, регистрации или формы обратной связи , или опросника. Форумы, интернет-магазины, добавление комментария, отправка сообщения в социальной сети — всё это обработка данных, помещенных в поля формы. Давайте на примере разберемся, как обрабатывать формы на PHP
.
Будем реализовывать простую задачу : необходимо создать 2 поля (имя и фамилия), передать эти данные скрипту action.php
, в результате должно выйти приветствие "Добро пожаловать, фамилия имя"
. Кто забыл, как создаются формы, и какие там есть поля, можно посмотреть . Создадим файл test.html
:
Обращаю ваше внимание, что файл action.php
(в нашем случае) должен находиться в одной папке с файлом test.html
. Тут можно указывать как относительные, так и абсолютные пути . Будьте внимательны, многие ошибки связаны с неправильным указанием пути до скрипта-обработчика формы.
Если мы сейчас откроем файл test.html
, заполним поля формы и нажмём на кнопку, то попадём в файл action.php
, где будет выведено сообщение. В данном случае браузер обращается к скрипту action.php
и передает ему, через знак "?"
все значения атрибутов name
, расположенных внутри тегов
, разделенных символом &
. Обратите внимание, что подставляется вместо $_SERVER
.
Метод GET является открытым, метод POST является закрытым, т.е. они отличаются способом передачи параметров. Пример:
Также, помимо массива $_REQUEST, PHP создаёт массивы $_GET и $_POST
. Давайте теперь реализуем нашу задачу, на основе полученных знаний:
Если мы сейчас заполним форму и нажмём на кнопку, то увидим, что скрипт action.php
приветствует нас по фамилии и имени. Всё работает корректно.
Здесь всё хорошо, но если мы изменим название скрипта, то нужно будет вносить изменения в файл test.html
. Давайте модифицируем файл action.php, так, чтобы, обращаясь к нему либо выводилась форма, когда мы ничего не отправили, либо приветствие, когда мы нажали кнопку:
Теперь мы не зависим от имени скрипта, т.к. задаем его через переменную окружения $_SERVER["SCRIPT_NAME"]
. Конструкция =$_SERVER["SCRIPT_NAME"]?>
равнозначна конструкции .
Помимо переменной окружения SCRIPT_NAME
существует множество других.
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"; отправляет скрытую копию на ваш адрес электронной почты.
У Вас в браузере заблокирован 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.78.4
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
Львиная доля задач в PHP
связана с обработкой данных, полученных от пользователя. И в большинстве случаев, эти данные получены из формы, поэтому обработка форм в PHP
является важнейшим моментом при создании сайта
, о котором я и расскажу в этой статье.
Для начала давайте создадим форму на HTML
:
Форма Ваш логин: Ваш пароль: Это пример классической формы авторизации пользователя
, которую, уверен, многие из Вас многократно заполняли на самых разных сайтах. Давайте теперь обсудим один важный момент: как отправляются данные? Существует два метода (мы с Вами будем только два рассматривать) - это GET
и POST
. Главное их отличие - это вид отправки: открытый (GET
) и закрытый (POST
). Самый лучший способ понять, в чём разница - это открыть данный HTML-код
в браузере и нажать кнопку "Войти
". Посмотрите на адресную строку, а потом поставьте другой метод, снова пройдите и вновь посмотрите на адресную строку. Отличие будет бросаться в глаза мгновенно.
Соответственно, в PHP
существуют два массива: $_GET
и $_POST
, которые содержат данные, полученные каждым из этих методов. Также есть массив $_REQUEST
, который содержит данные $_GET
и $_POST
одновременно. Я Вам советую использовать метод POST
и массив $_POST
, хотя, безусловно, зависит от ситуации, но в большинстве случаев делают именно так.
Теперь давайте обработаем данные. Давайте реализуем простой скрипт (в файле "req.php
"):
$login = $_POST["login"]; $pass = $_POST["pass"]; if (($login == "Admin") && ($pass == "AdminPass")) echo "Привет, Admin!"; else echo "Доступ закрыт"; ?>
В данном скрипте мы получаем данные, полученные из формы методом POST
(из массива $_POST
, хотя с таким же успехом могли получить эти данные из $_REQUEST
). Дальше проверяем логин и пароль и выводим: "Привет, Admin!" или "Доступ закрыт". Разумеется, чтобы создать систему авторизации пользователей на сайте, необходимо ещё узнать о cookie
или о сессиях
(в принципе, тоже cookie
), но о них мы поговорим несколько позднее, потому что у нас впереди ещё очень много важных тем.
«PHP Form — работа с формами в PHP» – восьмой урок учебника PHP. В этом уроке мы поговорим про обработку форм средствами PHP.
Работа с формами
PHP позволяет обрабатывать данные, которые пользователь ввел в поля формы. После активации кнопки submit
данные отправляются на страницу – обработчик, указанную в поле action
элемента
. На странице – обработчике располагается PHP скрипт, который выполняет определенные операции над полученными данными, например формирует и отсылает письмо по указанным пользователем реквизитам.
Передача данных обработчику.
Данные из формы передаются на сервер как последовательность пар имя/значение
. Это значит, что имя каждого элемента формы (появляющееся в атрибуте NAME
тега) связывается со значением этого элемента (введенным или выбранным пользователем). Формат имя/значение
, используемый для передачи, имеет вид имя=значение
.
Все данные, передаваемые из формы в программу–обработчик располагаются в следующих суперглобальных массивах:$_GET
, $_POST
, и $_REQUEST
.
$_GET
- содержит все значения, передаваемые методом GET
.
$_POST
–содержит все значения, передаваемые методом POST
.
$_REQUEST
–содержит все значения, передаваемые методами POST
и GET
.
Фамилия:
Город:
Сообщение:
После нажатия на кнопку
submit
данной формы все данные передаются обработчику
process.php
. Так как в этой форме используется метод
POST
, то все переменные будут расположены внутри массива
$_POST
.
Теперь создадим обработчик:
echo «Имя: » . $_POST[«FName»] . « »;
echo «Фамилия: » . $_POST[«LName»] . « »;
echo «Город: » . $_POST[«City»] . « »;
echo « »;
echo «Ваше сообщение: » . $_POST[«Message»];
?>
Расположим этот файл внутри директории со страницей формы. Теперь при использовании формы данные передадутся обработчику, который выведет на экран сообщение, содержащее пользовательские данные.
Массив $_Request
Использование суперглобального массива
$_Request
очень удобно, особенно когда не известно, каким методом были переданы данные.
Благодаря циклу foreach
можно перебрать значения массива $_Request
.
В данном примере мы выводим на экран все значения массива $_Request
. Сделано это может быть для проверки правильности ввода данных пользователем. То есть пользователь вводит данные в форму, нажимает отправить, но вместо обработки данных у него на экране высвечивается сообщение с введенными им данными и надписью подтвердить или отказаться. Данная идея применена на многих сайтах, да и вообще во многих программах.
В данном уроке мы научились использовать PHP для обработки форм. Как вы можете видеть PHP является мощным инструментом обработки форм, позволяя производить самые разнообразные манипуляции над пользовательскими данными, такие, как сохранение данных о пользователе в базе данных для последующей авторизации, отправке сообщения на почту пользователя и многое другое.
В следующем уроке мы научимся проверять введенные пользователем данные перед непосредственной обработкой.