Использование методов get и post php

Передача переменных в PHP. Методы GET и POST

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

Данный метод передачи переменных применяется в PHP для передачи переменных в файл при помощи адресной строки. То есть переменные передаются сразу через адресную строку браузера. Примером может быть, например, ссылка на статью в WordPress без использования ЧПУ (SEF), которая имеет примерно следующий вид:

https://archive.dmitriydenisov.com/?p=315

То есть в данном случае передается переменная $p со значением 315. Теперь давайте более подробно на примере рассмотрим работу метод GET. Пускай нам нужно передать в файл три переменных $a, $b и $c методом GET и вывести их сумму на экран. Для этого можно использовать следующий код.

$a = $_GET['a']; $b = $_GET['b']; $c = $_GET['c']; $summa = $a + $b + $c; echo «Сумма $a + $b + $c = $summa»;

Обратите внимание

Поскольку все переменные перед передачей будут помещаться в глобальный массив GET (Массивы в PHP), то мы первым делом присваиваем нашим переменным значения соответствующих элементов массива GET. Делаем это в самом начале во избежание разнообразных ошибок при передаче переменных. Далее для демонстрации работы прописываем произвольную формулу и выводим результат на экран.

Для проверки работы метода GET достаточно просто добавить к ссылке на файл знак вопроса «?» и через амперсанд «&» перечислить переменные с их значениями. Пускай у нас есть файл get.php, который лежит в корне сайта https://archive.dmitriydenisov.com. Для того чтобы передать в файл переменные, достаточно прописать в адресной строке следующее.

https://archive.dmitriydenisov.com/get.php?a=1&b=2&c=3

Как видно с примера, сначала мы добавляем знак вопроса сразу после названия файла. Далее прописываем переменную и через равно указываем ее значение. После этого через амперсанд аналогичным образом перечисляем другие переменные. Теперь при переходе по этой ссылке нам выведется сумма переменных $a, $b и $c.

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

Ну а теперь давайте перейдем ко второму способу передачи переменных в PHP – методу POST.

Передача переменных в PHP при помощи метода POST

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

Код первого файла с формой для отправки данных. Дадим ему название post-1.php

Форма:

  • action – указываем файл, в который будут передаваться переменные.
  • method – метод передачи переменных. В нашем случае это метод POST.
  • name – название формы. Одновременно в файл будет передана переменная с таким именем.

Текстовые поля:

  • name – имена переменных. В нашем случае это имя и фамилия (переменные name и lastname).
  • type – тип поля. В нашем случае это текстовое поле.

Кнопка:

  • name – имя кнопки и переменной, которая будет передана вместе с другими переменными.
  • type – тип кнопки. В нашем случае это кнопка для отправки данных.
  • value – текст на кнопке.

Код второго файла, который будет служить приемником переменных. Назовем его post-2.php

$name = $_POST[name]; $lastname = $_POST[lastname]; echo «Значения переменных, переданных методом POST — $name и $lastname»;

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

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

Важно

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

На этом все. Удачи вам и успеха в освоении основ PHP.

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Источник: https://archive.dmitriydenisov.com/metody-get-i-post/

Урок 16. PHP — POST & GET

ссылка

Видите ссылку? Она сложная и состоит из нескольких частей. Давайте разберем все по полочкам:
https://myblaze.ru — адрес домена или, как его еще называют, хост.
index.

php — страница на php, которая будет обрабатывать запрос.
? — символ разделения между адресом и блоком с переменными.
Далее идут переменные и их значения, которые разделены символом &.
name=Sergey — переменная name и ее значение Sergey.

age=22 — то же самое, переменная age, значение 22.

Все разобрали, теперь посмотрим как это обрабатывается в php, с помощью метода GET.
Страница index.php, как вы помните, мы передавали ей:

Для начала совет: ВСЕГДА проверяйте переменные на правильность: на пустоту, на соответствие допустимых значений и так далее. Так как все передается через адресную строку, то данные можно легко подменить и навредить сайту.

Теперь по самому коду: мы, с помощью условного оператора, проверили переменные name и age на пустоту и, если они не пустые, то вывели их, а если пустые, то просто сообщили об этом.
Все просто, согласитесь? Например вы можете создать html страницу и в менюшке сделать ссылки через переменные, а в index.

php обрабатывать переменную и отображать в зависимости от полученного значения ту или иную страницу. Ну об этом мы поговорим позже, в статье про создание сайта на php с нуля. Чтобы ничего не пропустить, советую подписаться на RSS.

Метод POST в PHP

Для демонстрации работы этого метода нам понадобится немного больше, чем простая строчка с адресом 🙂 Нужно будет создать html страницу с формой для заполнения, но ничего, я приведу готовый пример для вас:

Заполняем поля для передачи информации:

Укажите Ваше имя:

Укажите Ваш возраст:

Итак, мы создали html страничку с простой формой. Запомните, метод POST может использоваться только в форме.
Первый параметр формы — «method», он определяет метод, который мы будем использовать для передачи. Как вы могли догадаться, это либо GET, либо POST.

Совет

При этом, если установлен GET, то все имена полей (в виде названий переменных), а также их значения, передаются по ссылке, как в разделе про метод GET. Если же установлен POST, то все названия переменных и значения будут передаваться как запрос браузера к веб-серверу. То есть в адресной строке их видно не будет. Во многих случаях это очень полезно.

Также POST безопаснее, оно и понятно, ведь переменные с их значениями уже не так просто отредактировать, хотя тоже можно.

Второй параметр формы — «action». Это путь и имя файла скрипта, которому мы передаем данные. В нашем случае это index.php. Этот путь можно передавать и полностью, то есть так: action=«https://my_site.ru/index.php». Если не указать значение параметра «action», то вся информация будет передаваться главному скрипту, то есть индексной странице index.php вашего сайта, что вполне логично.

Теперь получим данные из нашей формы. Раз передавали мы в index.php, значит ниже будет код именно этой страницы:

Не забываем проверять на пустоту и допустимые значения. Далее нужно уточнить, почему наши переменные называются именно user_name и age? А вы посмотрите на поля формы, которую мы создавали выше.

Видите там input name=«user_name» type=«text» ? Вот здесь параметр name и задает имя переменной, которую мы получим с помощью этого поля. То же самое и с age. Надеюсь понятно.

Ну а получение переменной и ее значения через POST почти не отличается от GET, который мы рассмотрели выше.

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

← Цикл Do while | Содержание | htmlentities →

Источник: https://myblaze.ru/urok-16-php-post-get/

Учимся работать с GET и POST запросами

Вы могли заметить, что на большинство сайтов можно лицезреть вот такие адреса:

http://rio-shaman.ru/index.php?blog=2

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

Все довольно просто: ?blog=2 это объявление глобальной переменной «$_GET['blog']» с значением «2».

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

Мы используем оператор условий if() в качестве условия стоит вот такая строчка:

Обратите внимание

isset() позволяет узнать существует ли переменная которая указана в скобках, то есть условие которое я описал в коде звучит так: Если существует переменная $_GET['blog'] то вывести содержимое этой переменной на экран. Вот что получилось:

Думаю понятно Создается глобальная переменная $_GET с идентификатором который мы объявили в адресной строке (в данном случае с идентификатором «blog»)

Теперь хочу пояснить один момент. Предположим нам необходимо объявить две переменные, как это сделать? Первая переменная объявляется после знака вопроса «?» Вторая же переменная объявляется после такого знака «&» (Если честно не знаю что это за знак ), вот пример объявление трех переменных:

http://rio-shaman.ru/index.php?a=1&b=2&c=3

Вот код вывода:

Условие звучит так:

Если существует глобальная переменная $_GET['a'] и глобальная переменная $_GET['b'] и глобальная переменная $_GET['с'] то вывести их на экран, вот результат:

Формы

Прежде чем мы перейдем к post запросам, необходимо разобрать, что такое формы? Почему нужно? Потому что глобальная переменная $_POST[''] создается именно через формы. Что такое форма? Это поля для ввода какой-нить информации пользователем. Поля бывают в одну строчку, большие поля, так же бывают радио кнопочки, чек боксы. Разберем все по порядку…

Форма это тег:

элементы формы

У формы есть атрибуты, перечислю самые распространенные:

  • name=»имя» — Этим атрибутом прописывается имя формы, на мой взгляд не обязательный атрибут, но все же всегда заполняю 
  • action=»Ссылка на файл» — Этим атрибутом определяется файл обработчик, а именно файл куда Вы посылаете данные
  • method=»post» — Собственно атрибут который говорит форме, что необходимо отправлять post запросы. Так же Вы через формы можете отправлять и get запросы, выставив свойство get а не post.
Читайте также:  Css буквы в кружочке

Давайте создадим форму:

элементы формы

В качестве файла обработчика я поставил файл test.php так как именно в нем пишу для Вас примеры. Метод отправки я поставил post так как именно этим методам пользуются в 99.9% случаях. Так же я присвоил нашей форме имя — form

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

Я уверен, что вы не раз встречали такие поля, так что тут как говорится: «no comments» 

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

Ваше Фамилия Имя Отчество:

Ваш пол: М Ж

Из какой Вы страны Россия Другая страна

Любимый(ые) цвет(а):

Черный: Красный: Белый: Другой:

О себе:

  • Для поля ФИО я использовал одностроковое поле ввода. Атрибут name обязателен для заполнения, почему? Объясню ниже
  • Для Выбора пола я использовал радио кнопки, заметьте что атрибут name у них один и тот же… Это сделано для того что бы выбрать можно было лишь один пункт.
  • Страна проживания выводится списком, у списка есть атрибут name у пунктов же () этого атрибута быть не должно.
  • Любимые цвета выбираются чек боксами. Каждый чек бокс имеет свой атрибут name. Сделано для того чтобы выбрать можно было несколько пунктов.
  • О себе принимает вид большого поля. Заметьте, что я использую атрибуты rows и cols. cols определяет сколько видимых символов может влезть по горизонтали, а rows определяет сколько пользователь увидит строк. С помощью этих атрибутов мы определяем ширину и высоту области.
  • Для кнопки, атрибут name не обязателен, но не для этого примера, в этом примере этот атрибут понадобится. Если в теге кнопки написать атрибут value=»» и в ведя в этот атрибут, например слово «отправить анкету» (value=»отправить анкету») то надпись на кнопке примет значение атрибута value.

Обратите внимание, что почти у каждого тега есть атрибут value, для чего он? В него записываются данные которые Вы собираетесь перенести на другую страницу. Надеюсь понятно

Теперь если запустить этот код в браузере, то мы увидим следующее:

У формы я использовал атрибут action со значением test.php это означает, как я уже говорил, что данные из формы передадутся в файл test.php.

POST запрос

Теперь напишем php код который позволит нам увидеть введенную нами информацию. Где хранятся данные? В случае с get запросом, наши данные лежали в глобальной переменной $_GET['']. При post запросе, данные будут лежать в глобальной переменной $_POST[''].

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

Ну что ж, приступим к описанию скрипта:

Написанное нами условие if гласит: Если существует глобальная переменная $_POST['submit'] то выводим данные на экран. Эта глобальная переменная создается в случае если мы нажали на кнопку отправки, вот для чего в данном примере необходим атрибут name в кнопке. Вы вполне можете задаться вопросом, почему же у кнопки атрибут name не обязательный? Все довольно просто.

Важно

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

Вот что у нас получилось:

Заключение

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

Источник: http://rio-shaman.ru/razrabotka-cms/php-s-nulja/get-i-post-zaprosy/

PHP и методы передачи данных GET и POST

И теперь вызовите этот файл в браузере

Код

http://путь/script.php?num=10&type=new&v=text

и вы увидите переданные параметры в окне браузера. Но если вы вызовите этот файл без дополнительных параметров http://путь/script.php , то увидите ошибки, которые выдаст интерпретатор PHP, о том, что таких элементов массива $_GET нет. Проверке данных получаемых от пользователя можно посветить не одну статью, поэтому в этой статье я не буду затрагивать этот момент.
Как вы, наверное, понимаете заставлять пользователя набирать данные в адресной строке браузера не очень хорошо и совсем неудобно. Поэтому для приема данных от пользователя нужно использовать html-формы. Напишем простенькую html-форму.

Код

Введите число
У Вас есть компьютер? ДаНет
Ваш комментарий:

Немного прокомментирую созданную форму. Формы создаются тегом form. Поля формы создаются тегами input, select, textarea (подробнее можно почитать формы в HTML). В теге form в атрибуте action указывается URL-адрес скрипта, который получит данные формы.

В нашем случае мы указали уже существующий у нас файл script.php. Атрибут method задает метод отправки данных. Мы указали метод GET.

Теперь мы знаем, какому файлу будут переданы данные формы, и каким способом, осталось разобраться, где их там искать?!
Данные этой формы будут переданы веб-ресурсу браузером путем добавления их к URL-адресу: сначала будет знак вопроса (?), затем будут представлены параметры разделенные амперсантом (&).

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

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

Если пользователь введет в поле input число 10, то названием параметра будет num (значение атрибута name тега input), а значением будет 10 (введенное пользователем число). Соответственно браузер сформирует пару «num=10». Если пользователь из списка выберет вариант «Да», то названием параметра будет type (значение атрибута name тега select), а значением будет yes (значение атрибута value тега option). Соответственно браузер сформирует пару «type=yes».
Теперь эту форму разместим на странице forma.php.

Код

Введите число
У Вас есть компьютер? ДаНет
Ваш комментарий:

Введите в поля формы какие-либо значения и нажмите кнопку «Отправить». После нажатия кнопки браузер откроет другую страницу (script.php), и в окне браузера будут отображены данные, которые вы ввели.

Совет

Я думаю понятно почему: браузер передаст данные сценарию script.php, и в скрипте эти данные будут обработаны и выведены на экран.
Теперь давайте рассмотрим, как работает метод POST.
Для отправки данных методом POST нужно использовать HTML-формы.

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

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

Код

Введите число
У Вас есть компьютер? ДаНет
Ваш комментарий:

Как видите, форма осталась та же за исключением атрибутов method и action. Теперь данные будут передаваться сценарию script_post.php. Поместим нашу форму на странице forma_post.php.

Код

Введите число
У Вас есть компьютер? ДаНет
Ваш комментарий:

Теперь надо написать сценарий, который будет обрабатывать данные нашей формы.

Для получения в скрипте данных переданным методом POST нужно использовать встроенный массив $_POST.

Ключами этого массива будут названия параметров. В нашем случае нужно использовать $_POST[«num»], $_POST[«type»],$_POST[«v»]. Эти элементы массива и будут содержать значения переданных данных. Как видите отличие от использования способа GET, выражается лишь в использовании массива $_POST.

Поэтому нам не составит труда написать файл script_post.php:

Код

Теперь откройте файл forma_post.php в браузере. Введите какие-нибудь данные в поля формы и нажмите кнопочку «Отправить». Сейчас, наверное, вы заметили отличие метода POST от GET — в адресной строке браузера не появились данные формы. Данные методом POST нельзя передать через адресную строку браузера. Это существенное отличие нужно запомнить.
В PHP

Источник: http://www.linedmk.com/page54.html

Формы в PHP | Создание и обработка форм, методы GET и POST

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

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

Форма состоит из тега и расположенных внутри него элементов: , , и т.д. Пример формы:

Заметьте, каждый элемент формы имеет атрибут 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:

В примере выше запрос будет отправлен скрипту /some_url.php.

Предыдущий урок Следующий урок

Источник: https://www.programulin.ru/php-manual/forms-handling

HTTP Методы: GET vs. POST

Два наиболее используемых метода HTTP: GET и POST.

Что такое HTTP?

Протокол HTTP предназначен для обеспечения связи между клиентами и серверами.

HTTP работает как протокол запроса-ответа между клиентом и сервером.

Веб-обозреватель может быть клиентом, а приложение на компьютере, на котором размещается веб-узел, может быть сервером.

Пример: клиент (обозреватель) отправляет HTTP-запрос на сервер; Затем сервер возвращает ответ клиенту. Ответ содержит сведения о состоянии запроса, а также может содержать запрошенное содержимое.

Два метода HTTP-запроса: Get и POST

Два часто используемых метода запроса-ответа между клиентом и сервером: Get и POST.

  • GET — Запрашивает данные из указанного ресурса
  • POST — Отправка данных для обработки в указанный ресурс

Метод Get

Обратите внимание, что строка запроса (пары «имя-значение») отправляется в URL-адрес запроса GET:

/test/demo_form.php?name1=value1&name2=value2

Некоторые другие заметки о запросах GET:

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

Метод POST

Обратите внимание, что строка запроса (пары «имя-значение») отправляется в теле HTTP-сообщения запроса POST:

POST /test/demo_form.php HTTP/1.1 Host: html5css.ru

name1=value1&name2=value2

Некоторые другие примечания по запросам POST:

  • POST запросы никогда не кэшируются
  • Запросы POST не сохраняются в журнале обозревателя
  • Запросы POST не могут быть закладками
  • Запросы POST не имеют ограничений по длине данных

Сравнить GET vs. POST

В следующей таблице сравниваются два метода HTTP: Get и POST.

 GETPOST

Никогда не используйте Get при отправке паролей или другой конфиденциальной информации!

Кнопка возврата/перезагрузка Безвредны Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка Можно закладка Не может быть Закладка
Кэшированные Может кэшироваться Не кэшируется
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data. Использование многокомпонентной кодировки для двоичных данных
Истории Параметры остаются в журнале обозревателя Параметры не сохраняются в журнале обозревателя
Ограничения по длине данных Да, при отправке данных метод Get добавляет данные в URL-адрес; и длина URL ограничена (максимальная длина URL составляет 2048 символов) Без ограничений
Ограничения типа данных Разрешены только символы ASCII Никаких ограничений. Двоичные данные также разрешены
Безопасности Get менее безопасен по сравнению с POST, поскольку отправляемые данные являются частью URL-адреса POST немного безопаснее, чем Get, поскольку параметры не сохраняются в журнале обозревателя или в журналах веб-сервера
Видимость Данные видны всем в URL Данные не отображаются в URL-адресе

Другие методы HTTP-запросов

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

МетодОписание
HEAD То же, что и Get, но возвращает только заголовки HTTP и не тело документа
PUT Загружает представление заданного URI
DELETE Удаляет указанный ресурс
OPTIONS Возвращает HTTP-методы, поддерживаемые сервером
CONNECT Преобразует подключение запроса к прозрачному туннелю TCP/IP

Источник: https://html5css.ru/tags/ref_httpmethods.php

Методы передачи данных GET и POST — Веб-разработка

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

Чаще всего, для передачи данных, используются… ссылки! Да-да! Когда вы нажимаете на ссылку, часто, вы передаете данные сервер. Большинство современных веб-сайтов, активно эксплуатируют этот метод передачи информации. Этот метод называется GET. Когда мы нажимаем на ссылку, мы хотим получить (to get) какой-то документ с сервера. Поэтому метод передачи данных через ссылку и назвали get.

Метод GET

Метод GET удобен тем, что прост в эксплуатации. Но у него есть недостатки. Во-первых, методом GET нельзя передавать большие объемы информации, потому что данные, передаваемые этим методом входят в соств URL, длина которого ограничена.

Пример: ссылка http://dayte2.com/?u=shaman&act=state&num=9 содержит данные, передаваемые методом GET. Эти данные идут после знака вопроса.

Так как данные, передаваемые методом GET входят в соства URL документа, их может подсмотреть любой желающий. У этого есть преимущества и недостатки.

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

Это одна из причин, почему данные, представляющие ценность, всегда нужно передавать методом POST.

Метод POST

Как и метод GET, метод POST служит для передачи данных на сервер. Однако, данные, переданные таким образом, идут не в URL документа, а в теле запроса, после заголовков. Эти данные могут быть восприняты CGI-программой.

Когда данные отправляются методом POST, серверу приходит что-то вроде:

POST lines.pl HTTP/1.1Accept: */*Referer: http://dayte2.com/shaman.shtmlAccept-Language: ruContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)Host: dayte2.comContent-Length: 106Connection: Keep-AliveCache-Control: no-cacheline=%E4%E0%ED%ED%FB%E5+%F4%EE%F0%EC%FB%2C

%EF%E5%F0%E5%E4%E0%E2%E0%E5%EC%FB%E5+%EC%E5%F2%EE%E4%EE%EC+POST

После анализа заголовков, сервер видит пустую строку, которая говорит об окончании заголовков. После нее сервер видит какие-то непонятные данные.

 Не долго думая, сервер решает, что эти данные нужны файлу, который вызывается, и посылает эти данные документу.

Если этот документ — скрипт, то он получит эти данные так же, как получает данные с клавиатуры при работе с консолью, то есть, через STDIN.

Плюсы метода POST очевидны: можно передавать неограниченные объемы информации, причем, никто не увидит эту информацию после того, как вы ее отправили (имеется ввиду, в строке браузера).

Важно

Но есть и недостатки. Вы не сможете послать данные за друга. Кроме того, если необходимо «протащить» данные через несколько форм или страниц, то это вызовет дополнительные трудности.

Однако, и их можно обойти. Один из распространенных методов: формирование скрытых полей с именем и значением уже пришедших данных. У этого подхода есть недостатки:

  • можно легко подделать данные, хранимые в таких полях. Это делается просто: нужно сохранить страницу с формой на диск, исправить ее html-код, подставив в скрытые поля нужные данные, а затем нажать кнопку «Отправить» так же, как будто это реальная форма. Серверу без разницы от куда пришли данные, поэтому они будут обработаны так же.
  • При таком подходе приходится несколько раз оптправлять данные от клиента серверу. Скажем, вы ввели логин и пароль. На следующей странице вас просят ввести адрес и номер телефона, а в полях hidden хранят ваши логин и пароль, полученные на предыдущей странице. При отправке формы заново будут отправлены и новые данные и старые (логин и пароль).

Есть так же, методы, основанные на cookie или серверных сессиях, но это — тема отдельной статьи.

Итак, мы разобрались с главными методами передачи данных (есть еще PUT, но им никто не пользуется). Для веб-мастера очень важно понимать как именно происходит передача данных и что происходит на сервере. Сейчас высокоуровневые языки программирования типа PHP, делают работу по извлечению данных автоматически, поэтому многие не понимают настоящий механизм.

Источник: https://dayte2.com/get-post-methods

Типы HTTP-запросов и философия REST

Этот пост — ответ на вопрос, заданный в комментарии к одной из моих статей. В статье я хочу рассказать, что же из себя представляют HTTP-методы GET/POST/PUT/DELETE и другие, для чего они были придуманы и как их использовать в соответствии с REST.

HTTP

Итак, что же представляет из себя один из основных протоколов интернета? Педантов отправлю к RFC2616, а остальным расскажу по-человечески 🙂 Этот протокол описывает взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка. Стартовые строки для запроса и ответа имеют различный формат — нам интересна только стартовая строка запроса, которая выглядит так:

METHOD URI HTTP/VERSION,

где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1). Заголовки — это набор пар имя-значение, разделенных двоеточием.

В заголовках передается различная служебная информация: кодировка сообщения, название и версия браузера, адрес, с которого пришел клиент (Referrer) и так далее. Тело сообщения — это, собственно, передаваемые данные.

В ответе передаваемыми данными, как правило, является html-страница, которую запросил браузер, а в запросе, например, в теле сообщения передается содержимое файлов, загружаемых на сервер. Но как правило, тело сообщения в запросе вообще отсутствует.

Пример HTTP-взаимодействия

Рассмотрим пример. Запрос:
GET /index.php HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.

0b5
Accept: text/html
Connection: close
Первая строка — это строка запроса, остальные — заголовки; тело сообщения отсутствует Ответ:
HTTP/1.0 200 OK
Server: nginx/0.6.

31
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close … САМА HTML-СТРАНИЦА …

Ресурсы и методы

Вернемся к стартовой строке запроса и вспомним, что в ней присутствует такой параметр, как URI. Это расшифровывается, как Uniform Resource Identifier — единообразный идентификатор ресурса. Ресурс — это, как правило, файл на сервере (пример URI в данном случае '/styles.

css'), но вообще ресурсом может являться и какой-либо абстрактный объект ('/blogs/webdev/' — указывает на блок «Веб-разработка», а не на конкретный файл). Тип HTTP-запроса (также называемый HTTP-метод) указывает серверу на то, какое действие мы хотим произвести с ресурсом.

Изначально (в начале 90-х) предполагалось, что клиент может хотеть от ресурса только одно — получить его, однако сейчас по протоколу HTTP можно создавать посты, редактировать профиль, удалять сообщения и многое другое. И эти действия сложно объединить термином «получение».

Читайте также:  Как посчитать количество кликов по ссылке

Для разграничения действий с ресурсами на уровне HTTP-методов и были придуманы следующие варианты:

  • GET — получение ресурса
  • POST — создание ресурса
  • PUT — обновление ресурса
  • DELETE — удаление ресурса

Обратите внимание на тот факт, что спецификация HTTP не обязывает сервер понимать все методы (которых на самом деле гораздо больше, чем 4) — обязателен только GET, а также не указывает серверу, что он должен делать при получении запроса с тем или иным методом. А это значит, что сервер в ответ на запрос DELETE /index.php HTTP/1.1 не обязан удалять страницу index.php на сервере, так же как на запрос GET /index.php HTTP/1.1 не обязан возвращать вам страницу index.php, он может ее удалять, например 🙂

В игру вступает rest

REST (REpresentational State Transfer) — это термин был введен в 2000-м году Роем Филдингом (Roy Fielding) — одним из разработчиков протокола HTTP — в качестве названия группы принципов построения веб-приложений. Вообще REST охватывает более широкую область, нежели HTTP — его можно применять и в других сетях с другими протоколами.

REST описывает принципы взаимодействия клиента и сервера, основанные на понятиях «ресурса» и «глагола» (можно понимать их как подлежащее и сказуемое). В случае HTTP ресурс определяется своим URI, а глагол — это HTTP-метод.

REST предлагает отказаться от использования одинаковых URI для разных ресурсов (то есть адреса двух разных статей вроде /index.

php?article_id=10 и /index.php?article_id=20 — это не REST-way) и использовать разные HTTP-методы для разных действий.

То есть веб-приложение, написанное с использованием REST подхода будет удалять ресурс при обращении к нему с HTTP-методом DELETE (разумеется, это не значит, что надо давать возможность удалить всё и вся, но любой запрос на удаление в приложении должен использовать HTTP-метод DELETE).

REST дает программистам возможность писать стандартизованные и чуть более красивые веб-приложения, чем раньше. Используя REST, URI для добавления нового юзера будет не /user.php?action=create (метод GET/POST), а просто /user.php (метод строго POST). В итоге, совместив имеющуюся спецификацию HTTP и REST-подход наконец-то обретают смысл различные HTTP-методы. GET — возвращает ресурс, POST — создает новый, PUT — обновляет существующий, DELETE — удаляет.

Проблемы?

Да, есть небольшая проблема с применением REST на практике. Проблема эта называется HTML.

PUT/DELETE запросы можно отправлять посредством XMLHttpRequest, посредством обращения к серверу «вручную» (скажем, через curl или даже через telnet), но нельзя сделать HTML-форму, отправляющую полноценный PUT/DELETE-запрос.

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

Например, в Rack (механизм, на базе которого Ruby взаимодействует с веб-сервером; с применением Rack сделаны Rails, Merb и другие Ruby-фреймворки) в форму можно добавить hidden-поле с именем «_method», а в качестве значения указать название метода (например, «PUT») — в этом случае будет отправлен POST-запрос, но Rack сможет сделать вид, что получил PUT, а не POST.

Источник: https://habr.com/post/50147/

Переменные php, метод Get и Post


нажми

   В примере изображен код простейшей html страницы с одной ссылкой, где:
   http://info-pages.com.ua — адрес домена (хост);
   index.

php — название файла с кодом PHP (скрипт) к которому мы обращаемся и который будет выполнятся web-сервером;
   ? — символ запятой указывает веб-серверу про передачу скрипту параметров;
   name=Franki&age=35 — здесь мы передаем скрипту имена переменных и их значения, между собой переменные должны разделятся символом «&». Первая переменная будет называться «name» и иметь текстовое значение «Franki», а вторая называться «age» и иметь числовое значение «35».

   Теперь в скрипте «index.php» нам нужно получить значение переменных, для этого мы будем использовать зарезервированную предопределенную переменную $_GET.

   Рассмотрим код PHP внутри скрипта «index.php»:

Теперь разберем код: функция «empty» проверяет существование переменных с названием «name» и «age» и, если они существуют и имеют значение отличное от нуля, то выполняется сценарий вывода текста «Получены новые вводные…» вместе со значением полученных переменных.

   Чтобы наочно увидеть получение веб-сервером переменных — вставьте этот кусок кода в Ваш любой *.php файл или создайте новый и обратитесь к нему в адресной строке браузера с запросом типа: http://myhost/my.php?name=myname&age=myage

   Как Вы уже догадались, глобальная переменная $_GET является массивом, в который записывается передаваемые значения, а имя переменной есть индексным номером (ключом). Таким образом, когда мы по ссылке передаем значение переменной «…index.php?name=Franki&…», то в скрипте «index.

php» получаем значение переменной $_GET[«name»] которое будет равняться «Franki». Что это нам дает? Если $_GET[«name»]=»Franki» запускаем первый сценарий, а если $_GET[«name»]=»Billi» — то другой сценарий.

Совет

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

Все операции будут работать, если на компьютере установлен и активирован web-сервер, а также установлен и настроен PHP.

   Давайте, посмотрим как отправляются данные с помощью метода POST. Для этого создадим файл «post.html» со следующим текстом:

Заполняем поля для передачи информации:

Укажите Ваше имя:

Укажите Ваш возраст:

   Как видно на примере выше, мы создали файл «post.html» с формой. Метод Post используется только в форме.
   Параметр формы «method» определяет вид метода передачи данных и может принимать только 2 значения: «get» или «post».

Если установлен «get», то все имена полей (название переменных) с их значениями передаются по ссылке. Если установлен «post», то все имена полей (название переменных) с их значениями передаются в виде запроса браузера к веб-серверу.

   Параметру формы «action» присваивается в виде значения путь и название скрипта которому вы передаете данные. Это может выглядеть также как и: action=»http://my_site.com.ua/script.php».

Если Вы не указываете значение параметру «action», то вся передаваемая информация передается запускному скрипту (индексной странице) Вашего сайта.

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

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

Для этого проверяем существование переданной переменной и, если она существует со значением отличным от нуля, получаем ее.

   Обращаемся к $_POST через атрибут name поля (), например $_POST[«user_name»] и получаем информацию, которую пользователь ввел в это поле.

Обратите внимание

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

Источник: http://info-pages.com.ua/e/101

Руководство по выбору между GET и POST

Перевод: The Definitive Guide to GET vs POST

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

Поэтому, что-бы быть уверенным в том, что мы делаем все правильно, я представляю Вам руководство по выбору между GET и POST.

Давайте вспомним, что в строках запросов, пара переменная/значение, передается в GET через вот такой URL запрос:

GET /blog/?name1=value1&name2=value2 HTTP/1.1 Host: carsonified.com

а в POST запросе она передается в теле заголовка:

POST /blog/ HTTP/1.1 Host: carsonified.com name1=value1&name2=value2

Основы: GET против POST

Давайте введем новое слово в свой словарный запас, термин — идемпотентный (Вам не стоит лезть в википедию за его трактовкой: идемпотентность это свойство объекта проявляющееся в том, что повторное действие над этим объектом не изменяет его), а разделы 9.1, 9.3 и 9.5 RFC 2616 помогут нам составить первое правило GET против POST…

Правило #1: Используйте GET для безопасных действий и POST для небезопасных

RFC указывает Интернет браузерам на то, что пользователей необходимо предупреждать о повторном использовании POST запроса, потому что это действие потенциально небезопасно (к примеру оформление онлайн оплаты).

Однако, пока браузер соблюдает это требование RFC, может поясним почему POST должен использоваться для небезопасных действий, и почему мы не должны использовать POST для безопасных?

Просто примите к сведению то, что GET запросы используются чаще:

  1. GET запросы могут кэшироваться
  2. GET запросы могут оставаться в истории браузера
  3. GET запросы можно сохранять в своих закладках
  4. GET запросы можно передавать, распространять и т.д.
  5. GET запросы можно легко изменять

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

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

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

GET против POST: копаем глубже

Правило #2: Используйте POST для операций с важной информацией

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

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

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

Правило #3: Используйте POST для операций с большими данными

Несмотря на то, что RFC не описывает такой параметр, как длина URL, Internet Explorer упорно придерживается мнения, что максимальная длина URL не может превышать 2,048 символов, это накладывает некоторые ограничения на использование GET.

Правило #4: Используйте GET в AJAX приложениях

Когда используется XMLHttpRequest, браузеры реализуют POST как двухпроходный процесс (сперва посылают заголовок, а затем данные). Это означает, что GET запросы более отзывчивые, что так необходимо для хорошего AJAX окружения.

Итоги

Хотя правила обычно существуют для убедительных причин, хорошо бы знать то, что за ними скрывается. Я сам ненавижу правила, у которых нет объяснений и надеюсь, что все вышесказанное поможет Вам уяснить правила различий GET против POST.

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

Источник: https://handynotes.ru/2009/08/get-versus-pos.html

Ссылка на основную публикацию