METANIT.COM

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

Для сбора данных формы используются суперглобальные переменные PHP $_GET и $_POST .

Формы

Формы используют для передачи информации от клиента на сервер. Формы широко используются для регистрации пользователей, отправки комментариев на форумах и социальных сетях, оформления заказов в интернет-магазине и т.д.

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

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

Подробно ознакомиться с HTML-формами можно здесь.

В приведенном ниже примере отображается простая HTML-форма с двумя полями ввода и кнопкой отправки:

Пример

Обработка данных формы

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

Теперь, когда мы создали форму, нам нужно понять, как обрабатывать данные, введенные пользователем в нашем серверном PHP-скрипте. Существует два механизма передачи данных из HTML-формы на сервер: GET и POST . В нашем примере выше мы указали POST , но в любом случае задача чтения этих данных в нашем PHP-скрипте одинаково проста.

Читайте также:  Javascript set if defined

PHP помещает данные из формы в ассоциативный массив (информацию о массивах PHP смотрите в разделе «Массивы PHP» ), к которому можно получить доступ из сценария PHP на стороне сервера. Для методов POST и GET имена переменных массива соответственно $_POST и $_GET .

Чтобы показать пользователю заполненную в форме информацию, мы можем просто отобразить переменные. PHP-обработчик «action_form.php» можно записать так:

Результат обработки данных будет примерно таким:

Вы ввели следующие данные: Имя: Иван Фамилия: Иванов

Такого же результата можно достичь с помощью метода HTTP GET заменив в форме method=»POST» на method=»GET», а в обработчике $_POST на $_GET .

Пример

Php-обработчик «send.php» выглядит так:

В вышеуказанном коде не хватает очень важного: Вам необходимо проверить данные формы, чтобы защитить скрипт от вредоносного кода.

Примечание: Помните о БЕЗОПАСНОСТИ при обработке форм PHP! Правильная проверка вводимой пользователями данных необходима для защиты формы от хакеров и спамеров!

Методы GET и POST

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

Методы GET и POST создают ассоциативный массив (например, array (key1 => value1, key2 => value2, key3 => value3, . )). Массив содержит пары ключ/значение , где ключи — это имена элементов управления формы, а значения — входные данные от пользователя.

И GET и POST рассматриваются как переменные $_GET и $_POST . Это суперглобальные объекты, а это значит, что они всегда доступны, независимо от области видимости — и мы можем получить к ним доступ из любой функции, класса или файла.

$_GET — это массив переменных, переданных текущему скрипту через параметры URL.

$_POST — это массив переменных, переданный текущему скрипту с помощью метода HTTP POST.

Метод GET

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

index.html?page=title&name=Nicol

Здесь первая часть строки до символа (?) — это полный путь к файлу, а остальная часть — передаваемые данные. Данные разделяются на блоки «имя=значение» посредством (&) . В данном случае мы получили 2 глобальных переменных $_GET[‘page’] и $_GET[‘name’] , их содержимым являются «title» и «armed» соответственно. Поскольку переменные отображаются в URL-адресе, страницу можно добавить в закладки. В некоторых случаях это может быть полезно.

GET также имеет ограничения на объем отправляемой информации. Метод GET предназначен для отправки только до 1024 символов.

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

GET может использоваться для отправки не конфиденциальных данных.

Примечание: Не используйте метод GET для отправки на сервер паролей или другой конфиденциальной информации!

Метод POST

Метод POST передает информацию через HTTP-заголовки. Информация кодируется и помещается в заголовок QUERY_STRING .

Информация, отправляемая методом POST, проходят через HTTP-заголовок, поэтому уровень безопасности зависит от протокола HTTP. Используя Secure HTTP, можно обеспечить защиту важной информации.

Метод POST, в отличие от GET, не устанавливает ограничения, а значит, если вы передаёте объёмную информацию, то лучше пользоваться именно им.

Так же к преимуществам метода POST стоит отнести возможность передавать файлы на сервер.

Источник

Php объект в формы

Одним из основных способов передачи данных веб-сайту является обработка форм. Формы представляют специальные элементы разметки HTML, которые содержат в себе различные элементы ввода — текстовые поля, кнопки и т.д. И с помощью данных форм мы можем ввести некоторые данные и отправить их на сервер. А сервер уже обрабатывает эти данные.

Создание форм состоит из следующих аспектов:

  • Создание элемента в разметке HTML
  • Добавление в этот элемент одно или несколько поле ввода
  • Установка метода передачи данных. Чаще всего используются методы GET или POST
  • Установка адреса, на который будут отправляться введенные данные

POST-запросы

Итак, создадим новую форму. Для этого определим новый файл form.php , в которое поместим следующее содержимое:

     

Форма ввода данных

Имя:

Возраст:

Атрибут action=»user.php» элемента form указывает, что данные формы будет обрабатывать скрипт user.php , который будет находиться с файлом form.php в одной папке. А атрибут method=»POST» указывает, что в качестве метода передачи данных будет применяться метод POST.

Теперь определим файл user.php , который будет иметь следующее содержание:

 if(isset($_POST["age"])) < $age = $_POST["age"]; >echo "Имя: $name 
Возраст: $age"; ?>

Для обработки запросов типа POST в PHP используется встроенная глобальная переменная $_POST . Она представляет ассоциативный массив данных, переданных с помощью метода POST. Используя ключи, мы можем получить отправленные значения. Ключами в этом массиве являются значения атрибутов name у полей ввода формы.

Например, так как атрибут name поля ввода возраста имеет значение age ( ), то в массиве $_POST значение этого поля будет представлять ключ «age»: $_POST[«age»]

И поскольку возможны ситуации, когда поле ввода будет не установлено, то в этом случае желательно перед обработкой данных проверять их наличие с помощью функции isset() . И если переменная установлена, то функция isset() возвратит значение true .

Теперь мы можем обратиться к скрипту form.php и ввести в форму какие-нибудь данные:

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

И по нажатию кнопки введенные данные методом POST будут отправлены скрипту user.php :

массив <img decoding=

Форма ввода данных

Имя:

Возраст:

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

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

Стоит отметить, что в принципе мы можем отправлять формы и запросом GET, в этом случае для получения тех же значений формы применяется массив $_GET , который был рассмотрен в прошлой теме:

      if(isset($_GET["age"])) < $age = $_GET["age"]; >echo "Имя: $name 
Возраст: $age"; ?>

Форма ввода данных

Имя:

Возраст:

Источник

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

Для передачи данных от пользователя Web-страницы на сервер используются HTML-формы. Для работы с формами в PHP предусмотрен ряд специальных средств.

Предварительно определенные переменные

В PHP существует ряд предварительно определенных переменных, которые не меняются при выполнении всех приложений в конкретной среде. Их также называют переменными окружения или переменными среды. Они отражают установки среды Web-сервера Apache, а также информацию о запросе данного браузера. Есть возможность получить значения URL, строки запроса и других элементов HTTP-запроса.

Все предварительно определенные переменные содержатся в ассоциативном массиве $GLOBALS . Кроме переменных окружения этот массив содержит также глобальные переменные, определенные в программе.

Пример 1

    $value ) echo "\$GLOBALS[\"$key\"] == $value
"; ?>

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

Переменная Описание Содержание
$_SERVER[‘HTTP_USER_AGENT’] Название и версия клиента Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
$_SERVER[‘REMOTE_ADDR’] IP-адрес 95.143.190.109
getenv(‘HTTP_X_FORWARDED_FOR’) Внутренний IP-адрес клиента
$_SERVER[‘REQUEST_METHOD’] Метод запроса ( GET или POST ) GET
$_SERVER[‘QUERY_STRING’] При запросе GET закодированные данные, передаваемые вместе с URL
$_SERVER[‘REQUEST_URL’] Полный адрес клиента, включая строку запроса
$_SERVER[‘HTTP_REFERER’] Адрес страницы, с которой был сделан запрос https://htmlweb.ru/
$_SERVER[‘PHP_SELF’] Путь к выполняемой программе /index.php
$_SERVER[‘SERVER_NAME’] Домен htmlweb.ru
$_SERVER[‘REQUEST_URI’] Путь /php/php_form.php

Обработка ввода пользователя

PHP-программу обработки ввода можно отделить от HTML-текста, содержащего формы ввода, а можно расположить на одной странице.

Пример 2

       

Номер карточки:

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

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

Пример 3.1

       

Пример 3.2

Пример 4. Прием значений от checkbox-флажков

$v) < if($v) echo "Вы знаете язык программирования $k!
"; else echo "Вы не знаете языка программирования $k.
"; > > ?> Какие языки программирования вы знаете?

Пример 5

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

Для этого можно использовать (в зависимости от метода передачи) ассоциативный массив $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» .

После того, как файл передан на сервер, он получает уникальное имя и сохраняется в каталоге для временных файлов. Полный путь к файлу записывается в глобальную переменную, имя которой совпадает с именем поля для передачи этого файла. Кроме этого PHP сохраняет еще некоторую дополнительную информацию о переданном файле в других глобальных переменных:

Переменная Описание
$_FILES[‘userfile’][‘name’] оригинальное имя файла, такое, каким его видел пользователь, выбирая файл
$_FILES[‘userfile’][‘type’] mime/type файла, к примеру, может быть image/gif; это поле полезно сохранить, если Вы хотите предоставлять интерфейс для скачивания загруженных файлов
$_FILES[‘userfile’][‘size’] размер загруженного файла
$_FILES[‘userfile’][‘tmp_name’] полный путь к временному файлу на диске
$_FILES[‘userfile’][‘error’] код ошибки, который равен 0, если операция прошла успешно

Пример 8

    "; echo "имя: ".$_FILES['userfile']['name']."
"; echo "размер: ".$_FILES['userfile']['size']."
"; echo "тип: ".$_FILES['userfile']['type']."
"; > ?>

Если возникнут проблемы с перекодировкой сервером загруженного файла, символ с кодом 0х00 заменен на пробел (символ с кодом 0х20 ), допишите в файл httpd.conf из каталога Апача (/usr/local/apache) следующие строки.

 CharsetRecodeMultipartForms Off 

Источник

Оцените статью