PHP и формы PHP


Оглавление (нажмите, чтобы открыть):

Создание и обработка форм в PHP

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

Создание формы

Форма состоит из тега

Заметьте, каждый элемент формы имеет атрибут name . Кнопка имеет тип submit — это означает, что нажатие на кнопку приведёт к отправке формы.

Обработка формы

При нажатии на кнопку форма отправляется на сервер. Значит, теперь мы можем получить эти данные с помощью PHP. А находятся они в суперглобальном массиве $_GET, причём значение атрибута name — это ключ массива.

Итак, добавим к нашей форме простенький PHP-обработчик:

Попробуйте написать какой-нибудь текст и отправить форму. Текст из формы вывелся на экран! Круто, да? Теперь мы можем принимать информацию от пользователя, обрабатывать её и возвращать результат на экран.

Методы GET и POST

Когда вы заходите на любой сайт, вы делаете это методом GET. Вернее, ваш браузер сообщает серверу, что заход осуществляется методом GET. Когда вы переходите по страницам сайта — каждая страница запрашивается методом GET.

Однако у этого метода есть один недостаток — $_GET параметры видны в адресной строке. Наверное вы заметили, что при отправке формы URL сайта меняется на что-нибудь вроде site.ru/?firstname=111&form1=Отправить+форму .

Если внимательно приглядеться к URL, вы увидите, что GET параметры передаются прямо в адресной строке в виде ключ1=значение1 & ключ2=значение2 & ключ3=значение3.

Передавать параметры формы через URL — не самая лучшая идея, ведь при передаче логина и пароля они сохранятся в открытом виде в истории браузера.

По этой причине для отправки форм желательно всегда использовать метод POST. В этом случае данные не будут светиться в адресной строке.

Для изменения метода нужно добавить форме атрибут method со значением post . Разумеется, данные теперь попадут в массив $_POST, а не в $_GET:

Принцип выбора метода формы простой. Если предполагается, что пользователь будет вводить какие-то общедоступные неприватные данные (напишет в поиске Купить BMW ) — можно использовать GET. Если же пользователь должен ввести свои личные данные (имя, почта, пароль и т.п.) — используем метод POST.

Изменение обработчика формы

При желании вы можете отправлять форму не на текущий URL, а на какой-нибудь другой. Для этого достаточно указать путь к скрипту в атрибуте action :

Уроки PHP. Урок 2. Обработка форм на PHP

В этом уроке PHP рассматриваются базовые понятия языка: обработка форм с отправкой запроса в веб-страницы, основные управляющие конструкции php при обработке форм, запись данных из формы PHP в файл, функция даты в PHP date().

1. Напомним, что все файлы php тестируются только при запущенном Денвере и только из адресной строки браузера. Запускать файлы php двойным щелчком нельзя!

2. Запустите Денвер.

Упражнение 1. Обработка простой формы

В данном уроке PHP рассмотрим обработку формы на HTML-странице, создание переменных PHP для полей формы.

1. Создайте форму, как на рис. 3.1. Подразумевается, что при нажатии на кнопку Отправить заказ данные из формы будут переданы администратору, а клиент на экране увидит ответ Заказ обработан. Если Вы затрудняетесь в написании формы, тогда реализуйте код, приведенный ниже рисунка, и сохраните его в папке php_2 под именем forma_bob.html Напоминаем, что адрес обработчика формы записывается в атрибуте action тега form.

2. Для того, чтобы пользователь получил ответ после отправки данных, необходимо создать обработчик формы на языке php. Создайте код, приведенный ниже, и сохраните его в папке php_2 под именем zakaz.php

3. Проверьте работоспособность обработчика. Для этого запустите файл forma_bob.html через браузер, набрав в адресной строке браузера адрес http://localhost/php_2/forma_bob.html

4. В поля формы введите любые цифры и нажмите кнопку Отправить заказ. Результат на рис. 3.2.

Переменные формы

Весь смысл использования формы заказа заключается в получении информации о заказе клиента, которую он ввел с клавиатуры. Внутри PHP-сценария к каждому из полей формы можно получить доступ как к переменной, имеющей то же имя, что и у поля формы. В языке PHP переменные легко распознать, так как они начинаются со знака доллара $.

Вы можете получить доступ к содержимому поля tireqty следующими способами:


$tireqty //короткий стиль

$_POST[‘tireqty’] //средний стиль

$HTTP_POST_VARS[‘tireqty’] //длинный стиль

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

Копируя содержимое одной переменной в другую, мы применяем операцию присваивания, для обозначения которой в языке PHP используется знак равенства (=). Приводимая ниже строка кода создает новую переменную с именем $tireqty и переносит содержимое $_POST[‘tireqty’] в эту новую переменную:

Так как этот сценарий не генерирует никаких выходных данных, нет никакой разницы, будет он помещен выше или ниже дескриптора . Обычно этот блок размещается в начале сценария.

5. В файле zakaz.php измените код следующим образом и проверьте работоспособность формы. Результат на рис. 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. Если затрудняетесь, то можете реализовать код, приведенный ниже.

4. Создайте новую обработку для формы в файле zakaz_2.php, используя знания, полученные из предыдущих уроков. Обработка должна содержать следующие выходные данные и условия:

      Если пользователь не ввел ни одного количества товара, то программа должна выдать сообщение «Вы ничего не заказали на предыдущей странице! (рис. 3.5).

Если пользователь ввел хотя бы одно отрицательное число, то программа должна выдать сообщение «Неверно указано количество товара» (рис. 3.6).

  • Если данные введены корректно, то необходимо «обсчитать» заказ следующим образом:
    • Должно быть выведено общее количество заказанного товара,
    • Должна быть выведена общая стоимость заказанного товара,
    • Если автопокрышек заказано меньше 10, то скидка будет 0%, если от 10 до 49 – скидка 5%, если от 50 до 100 – скидка 10%, если от 100 и выше – скидка 15%. Должно быть выведено сообщение о предоставленной скидке,
    • Должна быть выведена общая стоимость заказа с учетом скидки,
    • Ввести налог с продаж, равный 10%, вывести об этом сообщение,
    • Должна быть выведена общая стоимость заказа, увеличенная на налог с продаж,
    • Должна быть выведена дата заказа,
    • Все цифры, которые измеряются в долларах, должны быть отформатированы с двумя знаками после запятой. Пример обработки формы приведен на рис. 3.7
  • 1. Стоимость каждого товара определяется константой. Константа на PHP задается функцией define. Пример define(‘POKRPRICE’,10); Первый параметр функции – это имя константы, которое пишется прописными буквами, второй параметр – значение константы.

    2. Логическая операция ИЛИ обозначается ||

    3. Логическая операция И обозначается &#038&#038.

    4. Операции сравнения: больше >, меньше =, меньше или равно

    Как создать свой сайт! | © 2015–2020 Наталья Власова
    Сайт создан на CMS MODx

    Получаем данные от элементов формы с помощью PHP

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

    Первое, что нам нужно — это создать форму:


    Обратите внимание на строку action=»app/check.php» — это адрес обработчика формы, сюда будут отправляться данные формы, после нажатия кнопки Отправить. Также, на параметр name у полей формы, мы будем использовать эти имена при написании кода. Передавать данные будем методом — POST.

    1. Давайте начнем. Создайте и откройте (через редактор) обработчик app/code.php — сначала, это просто пустая страница. Далее откройте тег PHP — $_SERVER и проверять REQUEST_METHOD

    3. Дальше, если форма отправлена, мы можем получить данные от поля «Имя», для этого, какой-нибуть переменной присваиваем полученное значение от этого поля, например:

    $_POST — переменная, в которой сохраняются данные, если форма была отправлена методом POST.

    $_POST[‘name’] — получаем данные от поля name.

    4. Тоже самое делаем и для остальных наших полей:

    5. Данные мы получили, теперь мы можем их вывести, для этого в страницу обработчика дописываем код:

    Не рекомендуется просто так, без проверки, выводить введенные пользователем данные.
    Пропускайте переменные хотя бы через функцию htmlspecialchars.

    Вот так, можно получать данные введенные в элементы формы.

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

    Введение

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

    Мастер Йода рекомендует:  Встречайте C# 7.0 масштабное обновление языка программирования от Microsoft

    Места использования форм:

    1. Создание регистрации и авторизации
    2. Создание блока комментариев
    3. Создание обращения в техническую поддержку (тикеты)

    Создаём форму на HTML

    Код формы необходимо помещать в HTML документа.

    Я пропущу скелет документа дальше, чтобы было более понятно.

    В атрибут action нужно указать обработчик формы (PHP-скрипт). Если поле пусто, значит, обработку формы выполнил тот скрипт, в котором расположена сама форма. В атрибут method нужно указать метод отправки формы (post или get). У каждого свои плюсы и минусы. Вкратце: post отправляет данные так, что пользователь не может их увидеть, а get — так, что они видны в URL-строке браузера.

    Наглядный пример get:

    Наглядный пример post:

    При отправке формы методом POST данные записываются в суперглобальный массив $_POST.

    При отправке формы методом GET данные записываются в суперглобальный массив $_GET.

    К суперглобальным массивам $_POST и $_GET нужно обращаться обычным способом (как вы делаете это и с обычными ассоциативными массивами) $массив[‘ключ’].

    В форме мы сделали 3 . Первые два — поле ввода логина и пароля. Третий — кнопка отправки формы.
    Тег имеет атрибут type=»». Для каждого случая указывают свой тип ввода. Допустим, text устанавливают для текста, submit — для отправки формы по атрибуту (action), а password — для пароля (чтобы он отображался звёздочками *).
    Кроме того, тег имеет атрибут name=»» и атрибут value=»». Value — стандартное значение элемента, name — предназначено для того, чтобы обработчик формы мог его идентифицировать.

    Создаём обработчика формы

    Мы перешли к самому интересному моменту статьи. Если мы обрабатываем форму на другой странице (action=»example.php»), то после нажатия кнопки подтверждения вас перекинет на указанную страницу.
    Если action пуст, то страница с формой перезагрузится.
    В самом верху скелета документа (перед ) открываем теги PHP и обрабатываем форму:

    Теперь если форма не прошла проверку, то все данные стираются, и нужно их вводить заново.
    Давайте доработаем форму, чтобы исправить это, а также изменим место вывода ошибок.

    В самом верху PHP-тега заводим 2 новые переменные, которые по стандарту пусты:

    В проверке на пароль:

    В проверке на логин:


    .= означает то, что мы берём прошлую строку (пусто) и прибавляем к этому наше сообщение.

    В форме HTML:

    Добавляем после тега вставку PHP (в данном случае ), так как мы только выводим переменную. Суть проста: если ошибки в логине нет, тогда $error_login пуст, а следственно, ничего не выводится, иначе выводим там ошибку.

    Теперь доработаем форму, чтобы она сохраняла значения полей.

    В самом начале добавляем 2 переменные:

    В начало проверки на ‘нажата ли кнопка отправки’ добавляем:

    То есть мы заносим в переменные значения из суперглобального массива $_POST.

    И немного изменяем нашу HTML-форму:

    Добавляем тег value, чтобы указать стандартное значение поля. Теперь если выдаётся ошибка, то значения полей сохраняются, и пользователю нужно не заново их вводить, а только исправить ошибку.

    Заключение

    Как видите, создать хорошую форму на PHP не так уж и сложно. Проверки, которые я показал в этой статье, не обязательно должны быть. Вы можете придумывать свои (любые) проверки на поля ввода, используя PHP. Надеюсь, что вам понравилась моя статья, и вы выучили что-то новое.

    Всем спасибо за внимание!

    Итоговый код страницы с формой + обработчика:

    Обработка формы с помощью php на одной странице.

    Создадим простую html форму, обработаем данные с нее с помощью php и отправим на почту.

    Для начала сделаем простую форму. Ее код приведен ниже.

    Как вы могли заметить у формы указан атрибут method=»post» используем его для того, чтобы данные из формы не были видны в строке браузера. В целом метод post более удобен чем метод get используемый по умолчанию. Так же у тега form указан атрибут action=» говорящий о том, что обработка данных с формы будет проводиться на этой же странице, вместо $_SERVER[‘REQUEST_URI’] вы можете указать точный адрес вашей страницы, например test.php

    У тегов input указан атрибут required — делающий поле обязательный для заполнения, этот атрибут отлично подходит для нашей простой формы и никакие дополнительные методы валидации в нашем примере использованы не будут, однако, если вам интересно узнать поподробнее, то вы можете ознакомиться со способами html валидации в нашей статье.

    Форма готова, теперь приступим к написанию простого обработчика данных. Ниже приведен php код для данной формы с комментариями.

    Обработчик формы готов, алгоритм таков — данные из формы отправляются через метод post следовательно мы читаем их из суперглобального массива $_POST в переменные с очисткой данных, если переменные не пустые, то пробуем отправить письмо через функцию mail(); результат выполнения функции мы записываем в куки и обновляем страницу. В итоге исходный код страницы будет примерно следующим.

    формы в PHP и формы в HTML

    PHP начинает свою работу тогда, когда появляется взаимодействие пользователя с сайтом, то есть через формы (всё остальное можно было бы реализовать и без PHP).

    Давайте разберём пример №1. Мы создадим простую форму по вводу логина и пароля и если данные введены правильно, то уведомим об этом пользователя:

    Давайте разберёмся по шагам. Не смотря на то, что код выполняет свою работу сверху вниз, но разработку я начинал именно с создания самой форму. Я указал action=»» , то есть пустым, это значит, что форма будет отправлена на эту же страницу для обработки кода вновь (сверху вниз начиная с первой строчки). Мы можем без труда указать action=»https://vk.com» и форма будет отправлена на посторонний сайт. Ровно так и делают жулики, которые создают фейк-страницы социальных сетей, где Вы вводите форму и у Вас воруют пароли, но форма сама по себе отправляется на сайт социалки и Вы там авторизируетесь. То есть пользователь даже не заметит, что он вводил пароль на чужом сайте.

    Так же я указал метод передачи данных POST. POST — тело запроса, на простом языке скрытый способ передачи данных. Есть ещё метод GET, который передаёт через адресную строку. К примеру через GET Ваш запрос выглядел бы:

    Синтаксис такой, после файла-обработчика ставится знак вопроса, а далее переданные данные в формате ключ=значение указываются и соединяются знаком & . Это значит, что мы передали на указанный скрипт 2 переменных:

    Если метод указан POST, то:

    Эти строчки писать НЕ НАДО, они пишутся автоматически на нулевой строчке самим нашим кодом, нам лишь достаточно с ним работать и его использовать. Как Вы могли заметить, мы именно с ними работаем на строчке 6-ой.

    Вернёмся на минутку в разницу между POST и GET и запомним отличия:
    1) POST скрыт, GET — видимый. Это значит, что проходя кто-то из Ваших друзей за спиной видит какие данные Вы указали в форму, даже если данные скрыты. Поэтому важные формы всегда сделаны методом POST.
    2) GET указывается в адресной строке, то есть можно выделить адресную строку и передать её своим знакомым и друзьям и они откроют страницу с переданными параметрами. GET используют в интернет-магазинах, когда в фильтре указывают не все товары отображать, а только специальные, к примеру:

    store.php выводит список товаров в нашем интернет-магазине, если передать категорию=iphone, то выведутся все модели айфона. Если эту ссылку передать друзьям, то им тоже сразу выведется список айфонов!

    Зная эти 2 простых отличия Вы без труда сможете выбрать правильный метод передачи данных. У нас идёт авторизация, мы эти данные прячем от посторонних глаз, чтобы даже наш сосед не видел, что мы ввели пароль «123», поэтому применили метод POST.


    Форма состоит из 3-х тегов:
    1) type=»text» — текстовое поле, password — текстовое поле, где введённые символы заменяются звёздочкой (маскируются), submit — кнопка отправки формы!
    2) name=»login» — это значит, что мы передадим именно:

    И содержание переменной будет то, что мы укажем в данном инпуте.
    3) placeholder — значение-подсказка, она указывается серым цветом, по умолчанию, и если человек начнёт вводить свои значения, то подсказка пропадёт.

    Как PHP обрабатывает форму

    Итак, мы указали форму внутри тега body, это надо понимать, ведь никто не отменял структуру HTML при разработке сайта. Обработка формы всегда помещается в начале, до тега html. То есть не должно быть вывода информации на экран ранее, чем указан тег html.

    Чтобы обработать форму мы указали функцию isset, которая проверила «существуют ли указанные переменные». Давайте подключать логику. Если существует, то выполняются данные внутри условной конструкции, если не существуют — то не выполняется! Логично? Да! Так вот, существуют тогда, когда они были переданы, вновь логика, а значит если форма была отправлена, то она передала данные, если передала данные, то мы выполнили проверку.

    Вторая часть проверки:

    Выполняется ровно следом за проверкой isset, и если проверка isset была удовлетворительна, то есть переменные существуют! Хочу заметить, что нельзя сразу писать вторую часть, первая часть проверки на isset всегда обязательная для всех видов форм! Если Вы уберёте левую часть проверки с isset, то получите ошибки.

    Итого, если существуют переменные (а они существуют когда форма отправлена), и значение переменных будет равно требуемым admin и 123, то мы создаём переменную $access. Она символичная, но ключевая! Определяет, авторизировались ли мы или нет.

    Кодом ниже мы наконец-то дошли до блока HTML вновь. И если обратите внимание, то там как раз идёт проверка на эту созданную переменную. Код такой: если переменная создана, то мы приветствуем пользователя, если не создана, то выводим форму, чтобы пользователь её заполнял.

    Давайте скажем выводы того, что мы только что написали. Мы создали код, который создаёт идентификатор доступа ($access) в том случае, если форма была отправлена и данные введены корректно. Мы вывели приветствие, если идентификатор существует, то есть форма была отправлена и данные введены корректно, и мы вывели форму, если идентификатор не был создан, а он не создаётся в случае если форма не была отправлена или данные были не корректными.

    Мастер Йода рекомендует:  Как отключить комментарии в WordPpress

    Конечно же можно этот код сделать чуть проще:

    И представленный код выше так же будет работать. Но писать код так будет неправильно по той причине, что он жестко создаёт правила «мы дошли до тега body и теперь должны вывести текст». Как Вы знаете, что после авторизации большинство сайтов перенаправляют Вас на другую страницу. Допустим, gmail.com после авторизации отправляет Вас на страницу https://mail.google.com/mail/u/0/#inbox (входящие). В программировании на PHP существует одно главное правило, либо Вы перенаправляете человека, либо Вы ему выводите текст на этой странице. То есть перенаправление на другую страницу должно быть именно до первого вывода информации на экран. Вы можете написать код, которым легко можно манипулировать. Во втором случае перенаправление мы не можем сделать по той причине, что у нас уже начался вывод тега html! В свою очередь изменить первый код очень просто:

    Как Вы видите, мы лишь изменили 1 строчку кода и код стал работать иначе, теперь при корректном вводе данных Вы перенаправляетесь на другую страницу или другой сайт. Если быть более гибким и добавить уведомления о вводе данных, то можно сделать так:

    Новый код позволяет проверить корректность введённого логина и пароля, а если Вы ввели неправильно, то создаёт сообщение с ошибкой. Если сообщение с ошибкой существует, то его выводим на экран. Форма выводится всегда. Понятно дело, если корректно были введены логин и пароль, то код не успеет дойти до вывода формы, а пользователь уже будет перенаправлен на новую страницу.

    Я показал Вам стандартное поведение работы с формами в PHP. Я не буду расширять знания и добавлять чекбоксы, радио-кнопки, загрузку файлов, потому что в противном случае эта статья превратится в 100 раз длиннее. Программирование — это очень много информации, хороший программист тот, кто больше помнит информации и применяет её правильно, а плохой тот, кто не знает или не помнит, а если и помнит, то ленится правильно применять. Я выше показал не только правильный код, но и постарался объяснить основные моменты, почему именно так код правильно писать, а не иначе.

    Если статья показалась Вам сложной или недостаточно полной, мы не раскрыли тему загрузки файлов, обработки разных ошибок или работы с чекбоксами и радио кнопками, или же стилизацией их, то Вам самое время начать учиться по программе моего курса начиная с первого урока! В видео уроках Вы найдете ответы на все интересующие вопросы, а дополнительная консультация в скайпе поможет Вам закрепить Ваши знания и добиться хороших успехов в программировании.

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

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

    Внимание! Урок устарел. Новые уроки по этой теме содержатся в курсе PHP для начинающих.

    В большинстве случаев, отправка форм на сервер предполагает какую-то работу с базами данных. Например, операция поиска в базе данных – это необходимое действие для большинства разнообразных приложений, будь то поиск сообщений в форуме, пользователей или блога. В любом случае эта операция способна облегчить жизнь пользователя. Т.к. к данному моменту мы еще не познакомились с взаимодействием PHP и СУБД MySQL, то в данной статье мы рассмотрим простые примеры обработки форм, а главной задачей для меня является показать как происходит передача информации с помощью языка PHP.

    Передача информации с помощью языка PHP

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

    Отсутствие поддержки состояния в протоколе HTTP

    Наиболее важная особенность функционирования любой технологии веб, о которой всегда следует помнить, состоит в том, что сам протокол HTTP характеризуется отсутствием поддержки состояний. Это означает, что каждый запрос HTTP (который в большинстве случаев сводится к требованию на получение и доставку отдельного ресурса, такого как HTML-страница, файл .jpg, таблица стилей и т.д.) является независимым от всех других запросов, не включает какую-либо информацию об идентификации клиента и не оставляет следа в памяти компьютера.

    Даже если сайт спроектирован таким образом, что навигация, т.е. переход с одной страницы на другую, происходит строго в одном направлении (допустим, страница 1 ведет только к странице 2, которая ведет только к странице 3, и т.д.), средства поддержки протокола HTTP не имеют информации и не учитывают то, что пользователь, просматривающий страницу 2, обязательно должен был посетить перед этим страницу 1. Нельзя присвоить значение какой-либо переменной на странице 1 и надеяться на то, что оно будет импортировано на страницу 2 с помощью самого языка HTML. Код HTML может использоваться для отображения формы, и с помощью этого кода можно даже вводить информацию, но если не будут применяться некоторые дополнительные средства передачи введенной информации на другую страницу или в другую программу, то значение, присвоенное переменной, после перехода на другую страницу просто исчезнет.

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

    Удобные возможности по передаче небольшого количества значений с данной конкретной страницы на любую другую отдельную страницу веб-сайта предоставляют формы HTML. Есть и другие способы поддержки состояния на протяжении многих просмотров страниц, характеризующиеся большей продолжительностью хранения данных, такие как cookie-файлы и сеансы, которые будут описаны в одной из следующих статей. А в этой статье рассматриваются в основном наиболее простые способы передачи информации между веб-страницами, в которых используются методы GET и POST в сочетании с протоколом HTTP для создания динамически формируемых страниц и обработки данных формы.

    Параметры GET

    Метод GET предусматривает передачу параметров с предыдущей страницы на следующую в составе строки запроса, которая представлена в формате универсального идентификатора ресурса URI. При использовании метода GET для обработки формы к URL, обозначенному с помощью атрибута action формы, после разделителя добавляется в виде вопросительного знака указанное имя (имена) и значение (значения) переменной, после чего вся эта строка передается обрабатывающему агенту (в данном случае веб-серверу).

    Ниже приведен пример формы HTML, в которой используется метод GET (введите эту разметку и сохраните файл под именем sportselect.html):

    После того как пользователь сделает свой выбор и щелкнет на кнопке «Отправить», браузер соединит перечисленные ниже элементы в указанном порядке, без пробелов между элементами:


    • URL в кавычках после слова action (http://localhost/sports.php).
    • Вопросительный знак (?), обозначающий, что следующие символы составляют строку GET.
    • Переменная name, знак равенства (=) и соответствующий параметр value (value=Хоккей).
    • Амперсанд (&) и следующая за ним пара name=value (если таковая имеется).

    Таким образом, браузер сформирует следующую строку URL:
    http://localhost/sports.php?sport=Хоккей

    Затем браузер перенаправляет полученную строку URL в пределах собственного пространства адресов в качестве нового запроса. Сценарий PHP, приведенный ниже (sports.php), в который передается указанная форма, осуществляет выборку значений переменных GET из последней части строки запроса, вставляет эти переменные и значения переменных в суперглобальный массив $_GET (который будет вскоре описан) и выполняет какие-то необходимые действия с этими значениями; в данном случае происходит вставка в текстовую строку.

    Ниже приведен пример кода, в котором показан обработчик формы PHP для указанной выше формы HTML:

    Обратите внимание на то, что значение, введенное в поле формы HTML с атрибутом name=»sport» на предыдущей странице, теперь доступно в виде переменной PHP с именем $_GET[‘sport’]. Работу этого примера демонстрирует следующий рисунок:

    Теперь необходимо объяснить, как именно можно получить доступ к значениям, передаваемым со страницы на страницу. В этой статье рассматриваются два основных метода передачи значений используемых в формах — GET и POST. Каждый метод имеет связанный с ним суперглобальный массив. Суперглобальные массивы описаны более подробно в статье «Переменные и константы». Отличительной особенностью суперглобальных массивов от других массивов является наличие префикса в имени в виде знака подчеркивания.

    Обработчик форм получает доступ к каждому элементу, передаваемому с помощью метода GET, обращаясь к массиву $_GET, а к каждому элементу, передаваемому с помощью метода POST, обращаясь к массиву $_POST. Синтаксическая структура, применяемая для обращения к какому-либо элементу суперглобального массива, является простой и полностью единообразной:

    Здесь index_name — это часть пары «имя-значение», относящаяся к имени (для метода GET), или имя поля формы HTML (для метода POST). В соответствии с предыдущим примером $_GET[‘sport’] указывает значение элемента select формы, имеющего имя «sport»; это значение передано с помощью операции GET, выполненной применительно к первоначальному файлу. В обработчике формы необходимо использовать массив, соответствующий методу, с помощью которого были переданы данные. В частности, в рассматриваемом примере значение $_POST[«sport»] не определено, поскольку из первоначальной формы не были отправлены какие-либо данные с помощью метода POST.

    Мастер Йода рекомендует:  Закругленные углы с помощью радиуса округления границ рамки CSS3

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

    Только то, что желаемые функциональные возможности могут быть достигнуты с помощью параметров GET, не означает, что обязательно нужно использовать метод GET. Недостатки метода GET, которые обнаруживаются в большинстве типов обработки форм, являются столь существенными. В оригинальной рабочей спецификации HTML 4.0, опубликованной в 1997 году, этот метод не был рекомендован к использованию. Основные недостатки метода GET перечислены ниже:

    • Метод GET не применим для создания окон регистрации, поскольку имя пользователя и пароль полностью видны на экране, а также не исключена возможность сохранения этих данных в памяти браузера клиента в качестве информации о посещенной странице.
    • Каждая операция передачи данных по методу GET, включая сам набор данных, регистрируется в журнале веб-сервера.
    • В методе GET предусмотрено присваивание данных переменной среды сервера, поэтому длина URL ограничена. Возможно, вам доводилось видеть, как выглядят очень длинные URL, переданные с помощью метода GET, и действительно, вряд ли кому-то захочется передавать с помощью этого метода фрагмент текста в формате HTML, состоящего из 300 слов.

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

    Параметры POST

    В настоящее время предпочтительным методом отправки данных формы является POST (особенно при случаях, в которых осуществление действий приводит к постоянным изменениям, таких как ввод информации в базу данных). Набор данных формы включается в тело формы при перенаправлении формы к обрабатывающему агенту (в данном случае к интерпретатору PHP). Строка URL не претерпевает каких-либо видимых изменений, отражающих разнообразие передаваемых данных.

    Среди разработчиков распространена ничем не оправданная уверенность в том, что метод POST более безопасен, чем GET. В действительности ни один из этих методов не является более или менее безопасным, чем другой. Посетитель может столь же успешно просматривать переменные и данные, отправляемые с помощью метода POST, как и с помощью метода GET. Единственное различие состоит в том, что в первом случае передаваемые данные не обнаруживаются в адресной строке. Но это не означает, что они скрыты. Данные, отправленные с помощью метода POST, могут просматриваться и модифицироваться пользователем веб-сайта.

    Первым и наиболее важным правилом программирования, особенно программирования для сети, является следующее:
    Никогда не доверять входным данным.

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

    Данные передаваемой формы становятся в большей или меньшей степени безопасными, только если запрос защищен с использованием SSL, TLS или какого-то другого способа шифрования. Но к конечному пользователю или посетителю данные все равно поступают в открытом виде, поэтому для него так или иначе остается возможность просматривать и изменять данные. Дело в том, что с помощью протокола SSL осуществляется просто шифрование данных, передаваемых по сети, что не позволяет рассматривать данные в открытом виде на этапе их прохождения от отправителя к получателю. Что же касается возможности для посетителя вносить изменения в данные формы, то в протоколе SSL для предотвращения этого ничего не предусмотрено.

    Чтобы изменить способ передачи данных в предыдущем примере, нужно внести следующие изменения:

    Работа с несколькими значениями

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

    Эта форма позволяет пользователю выбрать любимых питомцев. В данном примере пользователь может пометить сразу несколько флажков. Значит, при обработке данных формы в PHP-сценарии необходимо предусмотреть возможность получить доступ к нескольким значениям по одному имени. Мы поместили пару квадратных скобок ([]) после имени в атрибуте name, чтобы иметь возможность отправлять несколько вариантов выбора в виде массива. Если бы квадратные скобки были опущены, и пользователь пометил бы несколько флажков, его выбор был бы замещен последним отмеченным флажком. Поместив квадратные скобки после имени, мы указали, что значения должны храниться в виде массива.

    В обработчике массив сохраняется в переменную $animal и перечисляется с помощью цикла foreach, как обычный массив.

    Валидация формы и форматирование переменных формы

    Приложение, получая данные от пользователя, каждый раз должно проверять их на корректность. Если не проверять данные, введенные пользователем, можно получить много проблем, в том числе, угрозу безопасности. Выполнить проверку данных не так сложно, как может показаться.

    Более удобной для пользователей является проверка на стороне клиента с использованием JavaScript, но вне зависимости от того будет ли данная проверка использована, проверку на стороне сервера нужно выполнять обязательно.


    При создании форм HTML необходимо также учитывать следующее: если в форме должны быть отображены заранее заполненные входные данные, то необходимо установить атрибут value. Это замечание особенно справедливо по отношению к двум разновидностям форм — тем, которые используются для редактирования данных, полученных из базы данных, и тем, которые предназначены для возможной отправки данных больше одного раза. Последний случай очень часто встречается в таких ситуациях, когда форма должна быть повторно выведена после обнаружения ошибок в уже заранее, заполненных данных. В качестве примера можно указать форму регистрации, данные которой не принимаются на обработку до тех пор, пока пользователь не укажет допустимый адрес электронной почты или другие необходимые данные.

    В примере ниже показан способ обработки формы, включающий валидацию на стороне сервера и обработку на той же странице формы:

    В этом примере используется функция filter_var() которая осуществляет проверку переменной с использованием фильтра и принимает два параметра — исходную строку и константу, указывающую на тип фильтра. Кроме валидации email-адресов (FILTER_VALIDATE_EMAIL) эта функция поддерживает следующие константы: FILTER_VALIDATE_URL — проверяет значение на корректность URL (например, ), FILTER_VALIDATE_IP — проверяет значение на корректность IP-адресов, FILTER_VALIDATE_REGEXP — проверяет значение на корректность синтаксису регулярного выражения и несколько других констант, являющихся альтернативами функций is_bool(), is_float(), is_int() и т.п.

    Получаем данные от элементов формы с помощью PHP

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

    Первое, что нам нужно — это создать форму:

    Обратите внимание на строку action=»app/check.php» — это адрес обработчика формы, сюда будут отправляться данные формы, после нажатия кнопки Отправить. Также, на параметр name у полей формы, мы будем использовать эти имена при написании кода. Передавать данные будем методом — POST.

    1. Давайте начнем. Создайте и откройте (через редактор) обработчик app/code.php — сначала, это просто пустая страница. Далее откройте тег PHP — $_SERVER и проверять REQUEST_METHOD

    3. Дальше, если форма отправлена, мы можем получить данные от поля «Имя», для этого, какой-нибуть переменной присваиваем полученное значение от этого поля, например:

    $_POST — переменная, в которой сохраняются данные, если форма была отправлена методом POST.

    $_POST[‘name’] — получаем данные от поля name.

    4. Тоже самое делаем и для остальных наших полей:

    5. Данные мы получили, теперь мы можем их вывести, для этого в страницу обработчика дописываем код:

    Не рекомендуется просто так, без проверки, выводить введенные пользователем данные.
    Пропускайте переменные хотя бы через функцию htmlspecialchars.

    Вот так, можно получать данные введенные в элементы формы.

    Простейшая форма на HTML+PHP

    категория
    PHP
    дата 19.03.2012
    автор ansolomatin
    голосов 16

    Итак, для начала создадим форму на HTML , в поля которой посетитель будет вводить данные. Для примера будем использовать 3 поля: Имя, E — mail и Сообщение.

    В этой простейшей HTML форме я использую метод передачи POST и передаю 3 параметра ( name , email , message ) PHP скрипту ( post . php ) лежащему в корне сайта после нажатия на кнопку «Отправить».

    Полей для ввода может быть сколько угодно и с различными атрибутами. Названия параметров ( name , email , text ) используйте, какие вам удобно. Главное чтобы эти параметры были правильно обработаны скриптом ( post . php ). Вы можете использовать выпадающие списки (selec t ), флажки для выбора (checkbox), переключатели (radio) и т.д. Здесь, к примеру, для ввода сообщения я использовал текстовое поле textarea с шириной в 45 символов и с высотой в 10 строк.

    Теперь создадим файл post . php . Название и путь к файлу указываются в form action = » post . php » HTML формы.

    adminemail =» admin @ site . ru «; // e — mail админа

    $ time = date (» H : i «); // часы:минуты:секунды

    $ backurl =» http :// site . ru / index . html «; // На какую страничку переходит после отправки письма

    // Принимаем данные с формы

    // Проверяем валидность e-mail

    echo » Вернитесь назад . Вы указали неверные данные!»;

    IT Памятка

    Чтобы не забыть и впоследствии освежить память

    Форма и ее обработка в одном файле php

    Для того чтобы результат обработки формы и сама форма была в одном файле чтобы не плодить файлы «обработчики», можно прописать использовать проверку на существование переменной в форме с помощью функции phpisset():

    1. Прописываем саму форму

    2. Ниже прописываем код на PHP — сама проверка и обработчик формы

    В этом примере форма будет всегда.

    Полный листинг примера формы и результата в одном файле

    Добавить комментарий