Form action method get

Применение методов GET и POST в PHP трудно переоценить, поскольку эти методы встречаются практически на каждом сайте. Прежде чем изучать ниже описанный материал, советую ознакомится с html тегом . Рассмотрим каждый из этих методов в подробности.

Метод GET

Метод GET использует для передачи данных строку URL. Возможно, Вы обращали внимание на длинные и непонятные URLы. Например: function.php?login=Alex&email=dezyakin . В данном случае данные обрабатываются в function.php. После знака вопроса " ? " идет перечисление передаваемых параметров (параметр разделяются знаком "&") со значениями: параметру login присвоено значение Alex, а переменной email значение dezyakin. Данные будут хранится в суперглобальном массиве $_GET . Приведем пример использования метода GET представлен ниже:

Результат выполнения выше описанного кода представлен на рисунке ниже:

Обратите внимание на то, как мы считываем значения из суперглобального массива $_GET: $_GET[‘имя_переменной’] . В нашем примере имена переменных были объявлены в форме (name=login и name=email).

Совет:
Прежде чем обрабатывать полученные значения советую проверять их на существование через функции isset(имя_переменной) или empty(имя_переменной) — эти функции были рассмотрены в предыдущем уроке 2: переменные в PHP. Например:

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

В файле script.php должен содержатся какой-то обработчик информации, иначе информация будет передана в пустую.

Метод GET обладает множеством недостатков:

  • Пользователь видит значения передаваемых параметров;
  • Пользователь может легко подделать передаваемые параметры;
  • Неудобная передача бинарной информации (приходится кодировать в текстовый формат);
  • Объем передаваемых данных ограничен — 8 Кбайт;

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

Метод POST

Метод POST отличается от GET тем, что данные передаются в закрытой форме. Существует суперглобальный массив $_POST , из которого можно считывать данные следующим образом: $_POST[‘имя_переменной’] . Например:

Результат выполнения выше описанного кода представлен на рисунке ниже:

Как видите URL не имеет никакой приписки, но тем не менее данные были получены и выведены.

Примечание:
1) Объем передаваемых значений методом POST по умолчанию ограничен и равен 8 Мбайт. Чтобы увеличить это значение нужно изменить директиву post_max_size в php.ini.

2) В ранних версиях PHP вместо коротких названий суперглобальных массивов $_GET и $_POST использовались более длинные имена: $HTTP_GET_VARS и $HTTP_POST_VARS . По умолчанию они выключены в php 5, но Вы можете их включить в конфигурационном файле php.ini с помощью параметра register_long_arrays . В php 6 версии эти длинные названия будут недоступны.

3) Перед обработкой переменных из $_POST , советую проверять переменные на их наличие, также как это делалось с методом GET .

Следующий четвертый урок будет посвящен: типам данных в php.

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

Action и method

Form имеет много атрибутов, но основными и обязательными являются action > и method >. Если эти атрибуты отсутствуют, то форма не будет принимать введенные значения.

Атрибут Action

action > — атрибут, в котором указывается ссылка обработчика значений. То есть элемент, который указан в action >, будет обрабатывать значения формы. Если не указать его, то все значения вернутся к исходному значению, обновляя страницу.

Можно указать путь " form.html ", но чаще используются обработчики написанные на языке " php(form.php) ". Может быть и такой вариант, что страница, на которой находится форма, сама обрабатывает значения и написана на языке php. В этом случае можно не указывать атрибут action >.

Также, в качестве обработчика может служить адрес электронной почты. Чтобы записать его в атрибуте action используется ключевое слово mailto:, в нем указывается имя E-Mail адреса.

Если использовать E-Mail для отправки, то при активации, откроется стандартная программа Windows.

Атрибут Method

Method > — отвечает за способ обработки значений. При активации формы, указанный метод будет сообщаться серверу, а затем обрабатываться в соответствии с ним.

Всего способов обработки 2 — get > и post >. Они являются значениями атрибута.

Каждый из значений можно вводить как с большой, так и с маленькой буквы. Большого значения это не имеет.

Метод GET

GET > — метод протокола HTTP, который является наиболее используемым. Он получает все данные формы, обрабатывает их, а затем отображает в адресной строке.

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

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

Не используйте GET > для создания форм с конфиденциальной информацией. Такие формы имеют повышенную вероятность взлома.

Метод POST

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

Метод POST > позволяет передать больший объем информации, нежели GET >. Можно передавать маленькие текстовые файлы, объемом до 4КБ.

Большее количество информации делают его более пригодным для больших форумов и почтовых служб. Он лучше подходит для работы с базами данных.

Обрабатываемые значения сохраняются один раз, а потом остаются неизменными. То есть нельзя обращаться к одному и тому же адресу неограниченное количество раз, как при использовании метода GET >.

Заключение

В этой статье вы более подробно ознакомились с атрибутами тега form, а также со значениями GET > и POST >. Конечно, это не вся информация об их функциях. Подробнее узнать об их работе вы сможете при изучении PHP.

Можете подробно разобраться в этих методах изучив дополнительную информацию. Удачи в изучении!

На этой странице

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

Предварительные знания: Базовая компьютерная грамотность, понимание HTML и базовые знания по HTTP и программированию на стороне сервера.
Задача: Понять, что происходит при отправке данных формы, в том числе получить представление о том, как данные обрабатываются на стороне сервера.

Куда отправляются данные?

Здесь мы обсудим, что происходит с данными при отправке формы.

О клиенсткой/серверной архитектуре

WEB основан на очень простой клиент-серверной архитектуре, которую можно обобщить следующим образом: клиент (обычно веб-браузер) отправляет запрос на сервер (в основном веб-сервер, такой как Apache, Nginx, IIS, Tomcat, и т. д.), используя протокол HTTP. Сервер отвечает на запрос, используя тот же протокол.

На стороне клиента HTML-форма — это не более чем удобный способ настройки HTTP-запроса для отправки данных на сервер. Это позволяет пользователю предоставлять информацию для доставки в HTTP-запросе .

Заметка: Для получения более полного представления о том, как работают клиент-серверные архитектуры, ознакомьтесь с модулем «Первые шаги в программировании на стороне сервера».

На стороне клиента: определение способа отправки данных

Поскольку используется метод GET , вы увидите URL www.foo.com/?say=Hi&to=Mom , который появится в адресной строке браузера при отправке формы.

Данные добавляются в URL как последовательность пар имя / значение. После того, как URL веб-адрес закончился, мы добавляем знак вопроса ( ? ), за которым следуют пары имя / значение, каждая из которых разделена амперсандом ( & ). В этом случае мы передаем две части данных на сервер:

  • say , со значением Hi
  • to , со значением Mom

HTTP-запрос имеет следующий вид:

Заметка: Вы можете найти этот пример на GitHub — смотрите get-method.html (see it live also).

Метод POST

Метод POST немного отличается. Браузер использует этот метод для связи с сервером при запросе ответа с учётом данных, представленные в теле HTTP-запроса: «Эй, сервер, взгляни на эти данные и отправь мне соответствующий результат». Если форма отправляется с использованием этого метода, данные добавляются в тело HTTP-запроса.

Давайте рассмотрим пример — это та же самая форма, которую мы рассматривали в разделе GET выше, но с атрибутом method , установленным в post .

Когда форма отправляется с использованием метода POST , данные добавляются не к URL-адресу, а включаются в тело запроса. HTTP-запрос имеет следующий вид:

Заголовок Content-Length указывает размер тела, а заголовок Content-Type указывает тип данных, отправляемых на сервер. Мы обсудим эти заголовки позже.

Заметка: Вы можете найти этот пример на GitHub — смотрите post-method.html (see it live also).

Просмотр HTTP-запросов

HTTP-запросы никогда не отображаются пользователю (если вы хотите их видеть, Вам нужно использовать такие инструменты, как Firefox Network Monitor или Chrome Developer Tools). Например, данные формы можно увидеть на вкладке Сеть (Network) в Chrome следующим образом (после отправки формы):

  1. Нажмите F12
  2. Выберите Network
  3. Выберите "All"
  4. Выберите "foo.com" во вкладке "Name"
  5. Выберите "Headers"

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

The only thing displayed to the user is the URL called. As we mentioned above, with a GET request the user will see the data in their URL bar, but with a POST request they won’t. This can be very important for two reasons:

  1. If you need to send a password (or any other sensitive piece of data), never use the GET method or you risk displaying it in the URL bar, which would be very insecure.
  2. If you need to send a large amount of data, the POST method is preferred because some browsers limit the sizes of URLs. In addition, many servers limit the length of URLs they accept.

On the server side: retrieving the data

Whichever HTTP method you choose, the server receives a string that will be parsed in order to get the data as a list of key/value pairs. The way you access this list depends on the development platform you use and on any specific frameworks you may be using with it. The technology you use also determines how duplicate keys are handled; often, the most recently received value for a given key is given priority.

Example: Raw PHP

PHP offers some global objects to access the data. Assuming you’ve used the POST method, the following example just takes the data and displays it to the user. Of course, what you do with the data is up to you. You might display it, store it into a database, send it by email, or process it in some other way.

This example displays a page with the data we sent. You can see this in action in our example php-example.html file — which contains the same example form as we saw before, with a method of post and an action of php-example.php . When it is submitted, it sends the form data to php-example.php, which contains the PHP code seen in the above block. When this code is executed, the output in the browser is Hi Mom .

Note: This example won’t work when you load it into a browser locally — browsers cannnot interpret PHP code, so when the form is submitted the browser will just offer to download the PHP file for you. To get it to work, you need to run the example through a PHP server of some kind. Good options for local PHP testing are MAMP (Mac and Windows) and AMPPS (Mac, Windows, Linux).

Example: Python

This example shows how you would use Python to do the same thing — display the submitted data on a web page. This uses the Flask framework for rendering the templates, handling the form data submission, etc (see python-example.py).

The two templates referenced in the above code are as follows:

  • form.html: The same form as we saw above in the The POST method section but with the action set to << url_for(‘hello’) >> . (This is a Jinja2 template, which is basically HTML but can contain calls to the Python code that is running the web server contained in curly braces. url_for(‘hello’) is basically saying "redirect to /hello when the form is submitted".)
  • greeting.html: This template just contains a line that renders the two bits of data passed to it when it is rendered. This is done via the hello() function seen above, which runs when the /hello URL is navigated to.

Note: Again, this code won’t work if you just try to load it into a browser directly. Python works a bit differently to PHP — to run this code locally you’ll need to install Python/PIP, then install Flask using pip3 install flask . At this point you should be able to run the example using python3 python-example.py , then navigating to localhost:5000 in your browser.

Other languages and frameworks

There are many other server-side technologies you can use for form handling, including Perl, Java, .Net, Ruby, etc. Just pick the one you like best. That said, it’s worth noting that it’s very uncommon to use these technologies directly because this can be tricky. It’s more common to use one of the many nice frameworks that make handling forms easier, such as:

  • Django for Python (a bit more heavyweight than Flask, but with more tools and options)
  • Express for Node.js
  • Laravel for PHP
  • Ruby On Rails for Ruby
  • Phoenix for Elixir

It’s worth noting that even using these frameworks, working with forms isn’t necessarily easy. But it’s much easier than trying to write all the functionality yourself from scratch, and will save you a lot of time.

Note: It is beyond the scope of this article to teach you any server-side languages or frameworks. The links above will give you some help, should you wish to learn them.

A special case: sending files

Sending files with HTML forms is a special case. Files are binary data — or considered as such — whereas all other data is text data. Because HTTP is a text protocol, there are special requirements for handling binary data.

The enctype attribute

This attribute lets you specify the value of the Content-Type HTTP header included in the request generated when the form is submitted. This header is very important because it tells the server what kind of data is being sent. By default, its value is application/x-www-form-urlencoded . In human terms, this means: "This is form data that has been encoded into URL parameters."

If you want to send files, you need to take three extra steps:

  • Set the method attribute to POST because file content can’t be put inside URL parameters.
  • Set the value of enctype to multipart/form-data because the data will be split into multiple parts, one for each file plus one for the text data included in the form body (if text is also entered into the form).
  • Include one or more File picker widgets to allow your users to select the file(s) that will be uploaded.

Note: Some browsers support the multiple attribute on the используется для создания интерактивных элементов управления в веб-формах для принятия данных от пользователя; в зависимости от устройства и user agent, доступен широкий выбор типов входных данных и виджетов управления."> element, which allows more than one file to be chosen for uploading with only one element. How the server handles those files really depends on the technology used on the server. As mentioned previously, using a framework will make your life a lot easier.

Warning: Many servers are configured with a size limit for files and HTTP requests in order to prevent abuse. It’s important to check this limit with the server administrator before sending a file.

Common security concerns

Each time you send data to a server, you need to consider security. HTML forms are by far the most common attack vectors (places where attacks can occur) against servers. The problems never come from the HTML forms themselves — they come from how the server handles data.

Depending on what you’re doing, there are some very well-known security issues that you’ll come up against:

XSS and CSRF

Cross-Site Scripting (XSS) and Cross-Site Request Forgery (CSRF) are common types of attacks that occur when you display data sent by a user back to the user or to another user.

XSS lets attackers inject client-side script into Web pages viewed by other users. A cross-site scripting vulnerability may be used by attackers to bypass access controls such as the same origin policy. The effect of these attacks may range from a petty nuisance to a significant security risk.

CSRF attacks are similar to XSS attacks in that they start the same way — by injecting client-side script into Web pages — but their target is different. CSRF attackers try to escalate privileges to those of a higher-privileged user (such as a site administrator) to perform an action they shouldn’t be able to do (for example, sending data to an untrusted user).

XSS attacks exploit the trust a user has for a web site, while CSRF attacks exploit the trust a web site has for its users.

To prevent these attacks, you should always check the data a user sends to your server and (if you need to display it) try not to display HTML content as prov HTML Элемент


[an error occurred while processing the directive]
Карта сайта