Формы html в php. PHP сценарии обработки HTML форм

Одно из главнейших достоинств PHP - то, как он работает с формами HTML. Здесь основным является то, что каждый элемент формы автоматически становится доступным вашим программам на PHP. Для подробной информации об использовании форм в PHP читайте раздел . Вот пример формы HTML:

Пример #1 Простейшая форма HTML

Ваше имя:

Ваш возраст:

В этой форме нет ничего особенного. Это обычная форма HTML без каких-либо специальных тегов. Когда пользователь заполнит форму и нажмет кнопку отправки, будет вызвана страница action.php . В этом файле может быть что-то вроде:

Пример #2 Выводим данные формы

Здравствуйте, .
Вам лет.

Пример вывода данной программы:

Здравствуйте, Сергей. Вам 30 лет.

Если не принимать во внимание куски кода с htmlspecialchars() и (int) , принцип работы данного кода должен быть прост и понятен. htmlspecialchars() обеспечивает правильную кодировку "особых" HTML-символов так, чтобы вредоносный HTML или Javascript не был вставлен на вашу страницу. Поле age, о котором нам известно, что оно должно быть число, мы можем просто преобразовать в integer , что автоматически избавит нас от нежелательных символов. PHP также может сделать это автоматически с помощью расширения filter . Переменные $_POST["name"] и $_POST["age"] автоматически установлены для вас средствами PHP. Ранее мы использовали суперглобальную переменную $_SERVER , здесь же мы точно так же используем суперглобальную переменную $_POST , которая содержит все POST-данные. Заметим, что метод отправки (method) нашей формы - POST. Если бы мы использовали метод GET , то информация нашей формы была бы в суперглобальной переменной $_GET . Кроме этого, можно использовать переменную $_REQUEST , если источник данных не имеет значения. Эта переменная содержит смесь данных GET, POST, COOKIE.

15 years ago

According to the HTTP specification, you should use the POST method when you"re using the form to change the state of something on the server end. For example, if a page has a form to allow users to add their own comments, like this page here, the form should use POST. If you click "Reload" or "Refresh" on a page that you reached through a POST, it"s almost always an error -- you shouldn"t be posting the same comment twice -- which is why these pages aren"t bookmarked or cached.

You should use the GET method when your form is, well, getting something off the server and not actually changing anything. For example, the form for a search engine should use GET, since searching a Web site should not be changing anything that the client might care about, and bookmarking or caching the results of a search-engine query is just as useful as bookmarking or caching a static HTML page.

2 years ago

Worth clarifying:

POST is not more secure than GET.

The reasons for choosing GET vs POST involve various factors such as intent of the request (are you "submitting" information?), the size of the request (there are limits to how long a URL can be, and GET parameters are sent in the URL), and how easily you want the Action to be shareable -- Example, Google Searches are GET because it makes it easy to copy and share the search query with someone else simply by sharing the URL.

Security is only a consideration here due to the fact that a GET is easier to share than a POST. Example: you don"t want a password to be sent by GET, because the user might share the resulting URL and inadvertently expose their password.

However, a GET and a POST are equally easy to intercept by a well-placed malicious person if you don"t deploy TLS/SSL to protect the network connection itself.

All Forms sent over HTTP (usually port 80) are insecure, and today (2017), there aren"t many good reasons for a public website to not be using HTTPS (which is basically HTTP + Transport Layer Security).

As a bonus, if you use TLS you minimise the risk of your users getting code (ADs) injected into your traffic that wasn"t put there by you.

У Вас в браузере заблокирован 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.3
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:

Пример 5

"; ?>
" method="post">

Можно обрабатывать формы, не заботясь о фактических именах полей.

Для этого можно использовать (в зависимости от метода передачи) ассоциативный массив $HTTP_GET_VARS или $HTTP_POST_VARS . Эти массивы содержат пары имя/значение для каждого элемента переданной формы. Если Вам все равно, Вы можете использовать ассоциативный массив $_REQUEST .

Пример 6

Обработка произвольного ввода независимо от метода передачи $value) echo "$key == $value
"; ?>

Пример 7. Обработка нажатия на кнопку с использованием оператора "@".

">

С помощью функции header() , послав браузеру заголовок "Location" , можно перенаправить пользователя на новую страницу.

Например:

Передача файла на сервер. Залить файл. 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

Зачастую на 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. Ввод данных вручную:

II. Ввод данных через цикл:

Как видно, второй пример с циклом, более компактный. Думаю, не стоит приводить скрипт обработчика данной формы, потому что он обрабатывается точно так же как текстовое поле, т.е. значения списка можно извлечь из суперглобального массива $_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 "Выберите значение" ;
?>




Есть еще вопросы или что-то непонятно - добро пожаловать на наш

или как отправить сообщение на e-mail посредством HTML формы

Вы имеете свой собственный web-сайт и хотите получать от своих пользователей письма или сообщения, вопросы, советы или просто пожелания по электронной почте, тогда этот урок для вас!

Как отправить сообщение по e-mail

Нам нужны следующие файлы:

  1. form.html - страница с формой.
  2. form_processing.php - файл со скриптом, обрабатывающим HTML форму .

Рассмотрим код form.html:

Обработка HTML формы с помощью PHP



Ваше имя:


E-mail:


Тема:


Сообщение:





HTML форма содержит поля для ввода имени, почтового адреса пользователя, темы сообщения, текста сообщения и кнопку «Отправить», при нажатии на которую, информация отправляется на обработку к PHP скрипту в файл form_processing.php .

Метод гипертекстового транспортного протокола имеет два значения: get (по умолчанию) и post . Чаще используется метод post , так как позволяет передавать большие объемы данных. Все значения, передающиеся к обрабатывающему скрипту посредством метода post , сохраняются в ассоциативном массиве $_POST (этот массив изначально встроен в php интерпретатор), который состоит из переменных $_POST , где name - фактическое имя поля ввода - значение атрибута name="" :

Создадим файл-обработчик form_processing.php:

/* Осуществляем проверку вводимых данных и их защиту от враждебных
скриптов */
$your_name = htmlspecialchars ($_POST [ "your_name" ]);
$email = htmlspecialchars ($_POST [ "email" ]);
$tema = htmlspecialchars ($_POST [ "tema" ]);
$message = htmlspecialchars ($_POST [ "messages" ]);
/* Устанавливаем e-mail адресата */
$myemail = "[email protected]" ;
/* Проверяем заполнены ли обязательные поля ввода, используя check_input
функцию */
$your_name = check_input ($_POST [ "your_name" ], "Введите ваше имя!" );
$tema = check_input ($_POST [ "tema" ], "Укажите тему сообщения!" );
$email = check_input ($_POST [ "email" ], "Введите ваш e-mail!" );
$message = check_input ($_POST [ "message" ], "Вы забыли написать сообщение!" );
/* Проверяем правильно ли записан e-mail */
if (! preg_match ("/([\w\-]+\@[\w\-]+\.[\w\-]+)/" , $email ))
{
show_error ("
Е-mail адрес не существует"
);
}
/* Создаем новую переменную, присвоив ей значение */
$message_to_myemail = "Здравствуйте!
Вашей контактной формой было отправлено сообщение!
Имя отправителя: $your_name
E-mail: $email
Текст сообщения: $message
Конец"
;
/* Отправляем сообщение, используя mail() функцию */
$from = "From: $yourname <$email> \r\n Reply-To: $email \r\n" ;
mail ($myemail , $tema , $message_to_myemail , $from );
?>

Ваше сообщение было успешно отправлено!


На Главную >>>


/* Если при заполнении формы были допущены ошибки сработает
следующий код: */
function check_input ($data , $problem = "" )
{
$data = trim ($data );
$data = stripslashes ($data );
$data = htmlspecialchars ($data );
if ($problem && strlen ($data ) == 0 )
{
show_error ($problem );
}
return $data ;
}
function show_error ($myError )
{
?>


Пожалуйста исправьте следующую ошибку:





exit();
}
?>

Участок кода:

— выведет указанный текст, если поля HTML формы были заполнены правильно. index.php - главная страница вашего сайта.

Участок кода:

— укажет характер допущенной ошибки.

Значение переменной:

$from = "From: $yourname <$email> \r\n Reply-To: $email \r\n" ;
?>

— автоматически отобразит e-mail пользователя в нужной строке, когда вы будете писать ответ.

В этом уроке 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 шт. товара.
  • Количество заказанных товаров.
  • Общую стоимость заказа без доставки, налога на продажи и скидок.
  • Стоимость доставки.
  • Величину налога с продажи.
  • Скидку в процентах и рублях.
  • Стоимость заказа с учетом доставки, налога с продаж и скидки.
  • Адрес доставки.

Условия задачи:

  1. Стоимость товаров:
    • ручки - 10 руб.
    • книги - 100 руб.
    • сувенира - 1000 руб.
    • компьютера - 10000 руб.
  2. Налог с продаж - 18%. Налог прибавляется к общей стоимости всех товаров с учетом скидки.
  3. Стоимость доставки - 500 руб. Стоимость доставки прибавляется к общей стоимости всех товаров в учетом скидки и налога с продаж.
  4. Скидки:
    • При заказе ручек или книг меньше 5 шт. скидка - 5%, от 5 до 10 шт. - 10%, выше 10 шт. - 20%;
    • При заказе сувениров или компьютеров от 10 до 20 шт. скидка - 10%, от 20 до 30 шт. - 20%, выше 30 шт. - 40%.