php get запрос в массив
http_build_query
http_build_query — Генерирует URL-кодированную строку запроса
Описание
Генерирует URL-кодированную строку запроса из предоставленного ассоциативного (или индексированного) массива.
Список параметров
Может быть массив или объект, содержащий свойства.
Если data массив, то он может быть простой одномерной структурой или массивом массивов (который, в свою очередь, может содержать другие массивы).
Если data объект, тогда только общедоступные свойства будут включены в результат.
Если числовые индексы используются в базовом массиве и этот параметр указан, то он будет добавлен к числовому индексу для элементов только в базовом массиве.
Это позволяет обеспечить допустимые имена переменных, в которые позже данные будут декодированы PHP или другим CGI-приложением.
arg_separator.output используется в качестве разделителя аргументов, но может быть переопределён путём указания этого параметра.
Возвращаемые значения
Возвращает URL-кодированную строку.
Примеры
Пример #1 Простой пример использования http_build_query()
Результат выполнения данного примера:
Пример #2 Пример использования http_build_query() с числовыми индексами элементов.
Результат выполнения данного примера:
Пример #3 Пример использования http_build_query() с многомерными массивами
Результат выполнения данных примеров: (символы перенесены для удобства чтения)
Только числовой индексированный элемент «CEO» в базовом массиве получил префикс. Другие числовые индексы, найденные в pastimes, не требуют строкового префикса, чтобы быть допустимыми именами переменных.
Пример #4 Пример использования http_build_query() с объектом
$parent = new parentClass ();
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 24 notes
Params with null value do not present in result string.
If you need to change the enc_type, use this:
http_build_query($query, null, ini_get(‘arg_separator.output’), PHP_QUERY_RFC3986);
// BAD CODE!
http_build_query($query, null, null, PHP_QUERY_RFC3986);
if you send boolean values it transform in integer :
$a = [teste1= true,teste2=false];
echo http_build_query($a)
//result will be teste1=1&teste2=0
This function makes like this
To do it like this:
As noted before, with php5.3 the separator is & on some servers it seems. Normally if posting to another php5.3 machine this will not be a problem.
But if you post to a tomcat java server or something else the & might not be handled properly.
To overcome this specify:
http_build_query($array); //gives & to some servers
It’s not mentioned in the documentation, but when calling http_build_query on an object, public null fields are ignored.
Is it worth noting that if query_data is an associative array and a value is itself an empty array, or an array of nothing but empty array (or arrays containing only empty arrays etc.), the corresponding key will not appear in the resulting query string?
E.g.
$post_data = array(‘name’=>’miller’, ‘address’=>array(‘address_lines’=>array()), ‘age’=>23);
echo http_build_query($post_data);
Instead you can make your own simple function if you simply want to pass along the data:
If you need the inverse functionality, and (like me) you cannot use pecl_http, you may want to use something akin to the following.
Как передать массив в строке запроса?
есть стандартный способ передачи массива через строку запроса?
также, согласно этому ответ, автор предполагает, что поддержка строки запроса для массивов не определенный. Это точно?
EDIT:
основываясь на ответе @Alex, нет стандартного способа сделать это, поэтому мое продолжение-это то, что является простым способом узнать что параматер, который я читаю, является массивом в обоих PHP и в JavaScript?
было бы приемлемо назвать несколько параметров одним и тем же именем, и таким образом я знал бы, что они принадлежат массиву? Пример:
или это плохая практика?
7 ответов
отправка полей многозначной формы, т. е. отправка массивов через GET/POST vars, может быть выполнена несколькими различными способами, поскольку стандарт не обязательно прописан.
три возможных способа отправки многозначных полей или массивов:
Примеры Форма
на форме многозначные поля могут принимать форму установите флажок несколько:
. или как несколько скрытые поля с тем же именем:
Примечание: используя field[] для нескольких значений действительно плохо документировано. Я не вижу упоминания об этом в разделе о многозначных ключах в строка запроса-Википедия или W3C по документам работа с несколькими входами выбора.
обновление
как отметили комментаторы, это очень специфично для фреймворка. Некоторые примеры:
строка запроса:
рельсы:
Угловое:
см. комментарии к примеры в узел.js, WordPress, ASP.net
порядок: Еще одна вещь, котор нужно рассматривать что если вам нужно поддерживать the ордер из ваших элементов (т. е. массив как упорядоченный список) у вас действительно есть только один вариант, который передает список значений с разделителями и явно преобразует его в массив самостоятельно.
p1=value1&pN=valueN.
data=[value1. valueN]
data=
а затем декодировать его в коде на стороне сервера.
Я не думаю, что есть стандартная.
Каждая веб-среда предоставляет свой собственный «стандарт» для таких вещей. Кроме того, url-адрес обычно слишком короткий для чего-либо (ограничение 256 байт в некоторых браузерах). Конечно, более длинные массивы / данные можно отправлять с запросами POST.
однако, есть некоторые методы:
хотя «метод квадратных скобок» прост и работает, он ограничен PHP и массивами.
Если требуются другие типы переменных, такие как классы или передача переменных в строках запроса на языке, отличном от PHP, рекомендуется использовать метод JSON.
пример в PHP метода JSON (Метод 2):
код для получения страницы (РНР):
Я чувствую, что это было бы полезно для тех, кто ищет передачу массива в строке запроса сервлету. Я протестировал ниже строки запроса и смог получить значения массива с помощью req.getgetParameterValues(); метод. Ниже приведена строка запроса, которую я передал через браузер.
флажок-это мой массив параметров.
можно использовать http_build_query для создания строки запроса в URL-кодировке из массива в PHP. В то время как результирующая строка запроса будет расширена, вы можете выбрать уникальный разделитель, который вы хотите в качестве параметра http_build_query метод, поэтому, когда дело доходит до декодирования, вы можете проверить, какой разделитель использовался. Если это был уникальный, который вы выбрали, то это будет строка запроса массива, иначе это будут обычные строки запросов.
вы упоминаете PHP и Javascript в своем вопросе, но не в тегах. Я достиг этого вопроса с намерением передать массив в MVC.Net действие.
Я нашел ответ на мой вопрос здесь: ожидаемый формат-это тот, который вы предложили в своем вопросе, с несколькими параметрами с одинаковым именем.
он вернет все переменные из строки запроса, включая массивы.
Поробно о методе get
удалить определенный гет запрос
Что такое метод get
Максимальное количество данных передаваемых методом GET до 1024 символов.
Синтаксис метода GET
Далее идут название переменных name и den
Знак равно, если мы говорим о php(а сейчас мы говорим именно о php, то «=» это оператор присвоения)
Что такое массив GET
Как вывести результат переменной GET на экран?
Для того, чтобы вывести результат переменной GET на экран нам потребуется инструмент для работы с массивом print_r
Опасно отправлять на сервер пароль или другую важную информацию! Для этого существует другой метод
Пример метода GET в адресной строке:
Чем отличается GET от POST!?
Видео как отправлять, получать данные с помощью метода GET
Видео о получении и отправки данные методом get, к сожалению, видео не очень хорошего качества, сделано на старом оборудовании, вы уж извините! Нового видео о методе гет пока нет. и даже не знаю будет ли. времени катастрофически ни на что не хватает!
Разберем простой пример.
Если увидели много буков, то можно сразу перейти к результату №1
Для того, чтобы его сделать нам понадобится:
1). Форма для отправки данных с помощью get метода.
2). Обработка данных с помощью get метода.
Как мы можем и что мы можем получить с использованием выше приведенной формы!?
Как получить и отправить данные get запросом?
Форма уже готова! Теперь получим данные из этой формы!
Для получения данных используется условие по значению атрибута «name»(см форму).
Далее просто выводим результат гет запроса:
Помните про якорь, который я говорил в одном из пунктов, чтобы нам вернуться прямо к результату!? Если у вас не нужно перемещаться по странице, то использовать якорь не нужно.Размещаем его тоже здесь:
Результат отправки данных из формы методом GET
Можете ввести какие-то данные в поле ввода и нажать отправить, либо не изменяя нажать. После отправки данных, отройте адресную строку и посмотрите что в ней.
Проверить отправлен ли get запрос!?
Ну и естественно, что выведем прямо здесь
Если вы нажали кнопку отправить в верхнем пункте, либо в любом другом пункте на этой страницу, то здесь проверка на гет запрос сработает! И выведется текст, что гет запрос был отправлен не из этой формы.
Форму создадим аналогичную, которую мы рассматривали в пункте 3.
Лишь изменим action, name, value
Проверить отправлен ли get с определенным именем!?
Мы можем написать такое условие, если get запрос не отправлен из атрибута name со значением «name3_1»
И выведем соответствующее сообщение:
Код формы с GET
name3_1 еще не был отправлен’;
Выведем выше приведенный код прямо здесь:
Пример использования GET метода!
Еще, как то мы делали пример, совсем простой, чтобы можно было понять, как работает метод get:
1. Это простая ссылка на страницу, если вы на неё пройдете, то вы ничего не увидите кроме текста и ссылки, уже на самой странице!
https://dwweb.ru/__a-data/__all_for_scripts/__examples/php/get/get.php 2. А вот уже вторая ссылка имеет get запрос и если вы нажмете здесь, либо на странице по ссылке, то вы увидите результат работы метода get.
https://dwweb.ru/__a-data/__all_for_scripts/__examples/php/get/get.php?primer=test
Вывод абсолютно аналогичный. что и при выводе get запроса выше..
Если интересен код данной страницы, то вот:
Простой пример использования GET
Данная переменная primer существует +
Она равна слову test «;
echo «Переданные данные не верны!»;
echo «И обратите внимание на адресную строку, скрипт не сработал, потому, что ни переменной, ни параметра GET в строке нет «;
Учимся работать с GET и POST запросами
Здравствуйте дорогой читатель Блога RS! Сегодня мы с Вами будем разбирать get и post запросы. Так же поговорим о формах в html.
Для чего нужны вышеупомянутые запросы? Если Вы экспериментировали с php то могли заметить, что при повторной загрузки страницы, весь код выполняется заново, я имею ввиду, что скрипт заново создает переменные, и манипулирует с ними. Но парой необходимо передать какие то данные из одного скрипта в другой, например при отправки содержимого формы. Вот тут то на помощь и приходят запросы, с помощью которых Вы можете передать значение переменных из одного скрипта в другой.
GET запрос
Вы могли заметить, что на большинство сайтов можно лицезреть вот такие адреса:
Тут, даже не зная php, можно догадаться, что мы обращаемся к файлу index.php Но то, что идет после знака вопроса, мало кто знает. Все довольно просто: ?blog=2 это объявление глобальной переменной «$_GET[‘blog’]» с значением «2». Таким образом я в скрипт передаю переменную которая отвечает за вывод информации из базы данных. Давайте напишем небольшой скрипт в котором Вы все наглядно увидите:
Мы используем оператор условий if() в качестве условия стоит вот такая строчка:
Думаю понятно Создается глобальная переменная $_GET с идентификатором который мы объявили в адресной строке (в данном случае с идентификатором «blog»)
Теперь хочу пояснить один момент. Предположим нам необходимо объявить две переменные, как это сделать? Первая переменная объявляется после знака вопроса «?» Вторая же переменная объявляется после такого знака «&» (Если честно не знаю что это за знак ), вот пример объявление трех переменных:
Условие звучит так:
Формы
У формы есть атрибуты, перечислю самые распространенные:
Давайте создадим форму:
В качестве файла обработчика я поставил файл test.php так как именно в нем пишу для Вас примеры. Метод отправки я поставил post так как именно этим методам пользуются в 99.9% случаях. Так же я присвоил нашей форме имя — form
Теперь окунемся в мир элементов формы. Первым делом Вы должны понять, что почти все элементы являются тегом отличие лишь в атрибуте type у этих тегов. Давайте я перечислю используемые элементы форм:
Я уверен, что вы не раз встречали такие поля, так что тут как говорится: «no comments»
Теперь давайте составим небольшую тренировочную анкету, с которой будем работать далее. Наша задача составить небольшую анкетку которая поведает нам имя заполнявшего, пол, из какой он страны, любимый цвет и поле текста где пользователь может добавить что-нить о себе. Вот что у меня получилось:
Обратите внимание, что почти у каждого тега есть атрибут value, для чего он? В него записываются данные которые Вы собираетесь перенести на другую страницу. Надеюсь понятно
Теперь если запустить этот код в браузере, то мы увидим следующее:
У формы я использовал атрибут action со значением test.php это означает, как я уже говорил, что данные из формы передадутся в файл test.php.
POST запрос
Заключение
Ну что ж, за сегодня мы разобрали два метода передачи данных между скриптами, так же галопам познакомились с формами. Очень надеюсь, что эта информация Вам хоть где то пригодится. Если есть какие вопросы, или мысли, пишите комментарии. Удачи Вам, на сегодня у меня все!
GET-запросы в PHP
Итак, пришло время нам начать взаимодействовать с пользователем.
Как мы говорили ранее, PHP работает на сервере. Отсюда следует вопрос, а как же нам из браузера начать с ним взаимодействовать? Например, заполнить форму логина на сайте и отправить данные на сервер, чтобы наш код с ним что-нибудь сделал.
Именно об этом мы и поговорим в этом уроке.
Итак, давайте удалим все наши файлы в проекте и создадим новый пустой файл с именем index.php. Запишем в него следующий код:
Давайте выполним этот скрипт, открыв в браузере адрес:
http://myproject.loc/index.php
Как мы помним из этого урока, мы отправляем запрос веб-серверу, он понимает, что мы запрашиваем PHP-скрипт, выполняет его с помощью интерпретатора и возвращает нам ответ в виде результата выполнения этого скрипта.
Возникает вопрос: «А как можно передать от пользователя внутрь скрипта какие-либо данные?». Ответов на него у нас сразу несколько, и все мы их рассмотрим в этом уроке.
Метод GET
Когда мы вбиваем адрес скрипта и нажимаем Enter, выполняется GET-запрос по протоколу HTTP. В этом типе запроса к основному адресу мы можем прикрепить дополнительные параметры. Для того чтобы передать их, в конце основного адреса ставится знак вопроса, и мы можем перечислять эти параметры — вот так:
параметр1=значение1.
При этом если нам нужно указать несколько параметров, то мы разделяем их с помощью знака амперсанда:
арг1=знач1&арг2=знач2.
Если сейчас перейти по этой ссылке в браузере, то на сервер передадутся 2 параметра:
Давайте изменим код нашего index.php, чтобы узнать, что именно хранится в этой переменной.
Мы увидим следующее:
Как мы можем видеть, это действительно наши переданные аргументы, представленные в виде ассоциативного массива.
Учимся обрабатывать параметры
Разумеется, мы можем обращаться к этим элементам как к элементам обычного массива. Например, так:
Давайте создадим простую страничку, на которой мы будем выводить переданные с помощью GET-запроса логин и пароль.
Обновим нашу страничку в браузере и увидим результат.
Отлично, мы успешно обработали данные, которые нам пришли от пользователя.
Учимся работать с формами
Давайте теперь вспомним уроки про формы из курса по HTML и сделаем простейшую форму для отправки GET-запроса на страничку.
Давайте запишем в наш index.php следующий код:
И давайте теперь откроем его в браузере: http://myproject.loc/index.php
Как мы видим по исходному коду, форма отправит аргументы login и password с введенными значениями на адрес /login.php.
Давайте введем в поля значения admin и Pa$$w0rd соответственно и нажмем на кнопку «Войти».
Где сервер нам скажет о том, что такой странички не найдено.
Отлично! Так давайте же её создадим! Создаём рядом с нашим index.php файл с именем login.php. И пишем в него следующий код:
Вернёмся на нашу форму и повторно отправим пароль. Теперь мы увидим информацию о том, что мы успешно авторизовались. Это простейший прототип формы авторизации. Разумеется, он сильно упрощён, не всё сразу. А пока – делаем домашнее задание.