Разделение GET запроса
Из url строки извлечь нужные переменные получилось так:
$parts = parse_url($_SERVER['REQUEST_URI']); parse_str( $parts['query'] , $query ); echo $query['id']; echo $query['name'];
Отслеживать
ответ дан 9 фев в 22:31
59 9 9 бронзовых знаков
- php
- get
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как разбить get запрос и занести все в свои переменные?
site.sits/classpr.add?count=1&v=4
Вот у меня есть такой запрос к сайту на файл index.php
Как мне сделать чтобы я мог разделить всё по своим местам?
Мне нужно получить примерно так
classpr
add
cout = 1
v = 4
Вот как мне разбить такой запрос? Что после ? там могут быть куча разных запросов и с разными именами и мне также их нужно сохранить
С SERVER я получаю его вот так
[«REDIRECT_QUERY_STRING»]=> «action=classpr.add&count=1&v=4»
[«QUERY_STRING»]=> «action=classpr.add&count=1&v=4»
[«REQUEST_URI»]=>»/classpr.add?count=1&v=4″
- Вопрос задан более трёх лет назад
- 1022 просмотра
Комментировать
Решения вопроса 1
Чебуратор тега РНР
Не нужно никогда get запрос заносить ни в какие переменные.
Никогда не надо заниматься такой фигнёй, как выковыривание элементов массива в отдельные переменные.
Массив для того и придуман, чтобы работать с изменяемой неструктурированной информацией
Поэтому если тебе надо получить 1, то прсто пишешь $_GET[‘count’]. ВСЁ. Никаких тебе страданий и проблем.
Ответ написан более трёх лет назад
Комментировать
Нравится 5 Комментировать
Ответы на вопрос 3
Web-программист
1. Берем $_SERVER[‘REQUEST_URI’] прогоняем через parse_url($_SERVER[‘REQUEST_URI’], PHP_URL_PATH) так вы получите часть classpr.add
2. Все что после знака вопроса, автоматически располагается в $_GET
Безопасность
1. НЕ используйте extract() за такие советы надо банить!
2. Не доверяйте ничему, что получаете от пользователя (POST, GET, COOKIE, etc), ничего напрямую не вставляйте в базу, не пытайтесь вызвать и тд.
Вместо $_GET[‘count’] используйте filter_input(INPUT_GET, ‘count’, FILTER_VALIDATE_INT).
Пусть (classpr.add) прогоните через регулярку if ( ! preg_match(‘~^/([a-z0-9.]*)$~’, $path, $matches)) return false;
Js как считать определенный get запрос. Параметры строки (GET) в Javascript
Практически на каждом сайте можно видеть ссылки, содержащие в себе параметры после знака «?», например, http://some.site.com/?id=1. Обычно обработкой таких параметров занимается серверный скрипт, но иногда возникает необходимость узнать эти параметры внутри JavaScript. О том, как это сделать, и пойдёт рассказ сегодня.
Что представляют из себя, так называемые, GET-параметры? На самом деле — это просто строка адреса, но принято, что если в URL-е встречается символ «?», то все символы после него являются параметрами. Трактовка параметров — стандартна: сначала идёт название переменной, потом символ «=», потом значение переменной, переменные разделяются символом «&». Узнать текущий адрес в JavaScript можно прочитав значение window.location. Парсить строку после «?» придётся в два прохода: сначала разбить на группы «переменная=значение», а потом уже разбить на составные части.
Разбиение строки параметров облегчается тем, что в JavaScript имеется специальная строковая функция — split(), результатом которой будет массив строк. Для того, чтобы её использовать, сначала необходимо создать обьект String, так как данная функция является методом этого обьекта. Делается это просто:
someVar = new String(«some text»);
Затем делим строку на подстроки:
Где «x» — символ деления строки на подстроки. Для того, чтобы найти в строке какой-либо символ, необходимо воспользоваться ещё одной строковой функцией — indexOf():
Ввод в теорию закончен. Приступим к практике. Я решил, что все GET-переменные стоит хранить в двух отдельных глобальных массивах: один хранит названия, другой — значения. К сожалению JavaScript не поддерживает ассоциативные массивы, поэтому воспользуемся указанным мною способом. Также необходимо сохранить количество GET-переменных. Конечно, всегда можно вызвать функцию подсчёта размера массива, но стилистически мой метод лучше. И так, глобальные переменные и массивы:
var _GET_Keys; // Пока что пустой массив var _GET_Values; var _GET_Count = 0; // элементов пока нет var _GET_Default = «»
Значение переменной _GET_Default будет обьяснено позже. Далее создам функцию get_parseGET(), которая будет парсить URL и создавать массивы с переменными. В самом начале функция создаёт обьект String и проверяет в нём наличие символа «?»:
l = get.length; get = get.substr(x+1, l-x);
Теперь делим строку на группы «переменная=значение», вычисляем общее количество переменных и подготавливаемся к создаиню необходимых массивов:
l = get.split(«&»); x = 0; _GET_Count = l.length; _GET_Keys = new Array(_GET_Count); _GET_Values = new Array(_GET_Count);
И в заключение разделяем полученные группы на два массива с именами переменных и их значениями:
где key — название ключа, которое будет выбрано из массива array. В теле цикла к текущему элементу можно бдует обратиться array.
Вторая функция из библиотеки — get_fetchVar(key), позволяет узнать значение заданной GET-переменной. Работает простым перебором массива _GET_Keys. Если ключ не найден, то возвращает значение _GET_Default, которое упоминалось выше. Хочу заметить, что значение _GET_Default вовсе НЕ обязательно менять в самой библиотеке — при необходимости, это можно сделать в Вашем HTML-коде:
_GET_Default=»tra la la»;
В самом конце скрипта следует вызов get_parseGET(); и на этом библиотека заканчивается.
Практически на каждом сайте можно видеть ссылки, содержащие в себе параметры после знака «?», например, http://some.site.com/?id=1. Обычно обработкой таких параметров…
В JavaScript удалить элемент массива можно несколькими методами. К ним относятся методы pop и shift. Метод pop удаляет первый элемент из заданного массива. Метод shift удаляет…
Сейчас я вам расскажу, как при помощи js мы можем легко и просто манипулировать урлом в браузере, не перезагружая страницу. Для этого мы воспользуемся следующей функцией: history.pushState(). Стоит обратить внимание на то, что она работает только с html5 поддерживаемыми браузерами! Имеет 3 параметра, в которых, мы можем по сути ничего не передавать т.е.:
В первом из методов мы передаём состояние объекта. Второй не что иное как Название (кстати, на сегодняшний день, он игнорируется. ). И третий параметр есть сам урл.
В рамках данной статьи мы рассмотрим только третий.
В параметре урла от нас требуется просто передать строку, которая подставится в урл, от корня сайта.
собственно наш урл будет, наверное самым простом: http://localhost/
Var newUrl = «/catalog/?login=myLogin&page=phone»; history.pushState(«», «», newUrl);
После выполнения данного скрипта вы увидите в адресной строке: localhost/catalog/?login=myLogin&page=phone
Но будьте осторожны. Так как у нас изменился урл. То при нажатии обновлении страницы, браузер попробует зайти именно уже на новый урл. И если на вашем сайте нет раздела /catalog/ то вы увидите 404ю ошибку.
Изменим существующий урл
Второй пример пройдёт вот тут: localhost/catalog/samsung/?login=myLogin&page=phone
Var arUrl = window.location.pathname.split(«/»); var newUrl = «/bazar/»+arUrl+»/»+window.location.search; history.pushState(«», «», newUrl);
1 строка: Получаем путь относительно хоста и при помощи сплита разбиваем на массив
2 строка: Составляем новый урл состоящий из слова «bazar» + второй ключ нашего массива, который содержит слово samsung, и в конце добавили наши get
3 строка: Собственно сама замена.
После выполнения данного скрипта, вы увидите в адресной строке: localhost/bazar/samsung/?login=myLogin&page=phone
Изменяем GET параметры
Рассмотрим на том же самом примере.
Var arUrl = window.location.search.split(«&»); arUrl = arUrl.slice(1); var arr=; $.each(arUrl,function(i,elem)< arr[i] = elem.split("="); >); var newUrl = arr+»=»+arr+»&»+arr+»=»+arr; newUrl = window.location.pathname+»?»+newUrl; history.pushState(«», «», newUrl);
Разумеется данный скрипт является демонстрационным и, наверняка, самым простым. После его исполнения в адресной строке браузера произойдёт смена местами значений GET параметров. ?login=myLogin&page=phone поменяется на?login=phone&page=myLogin. Ну а теперь по порядку.
После выполнения скрипта, наш старый урл: localhost/catalog/samsung/?login=myLogin&page=phone
заменится на новый: localhost/catalog/samsung/?login=phone&page=myLogin
Собственно это всё, что я хотел вам сегодня рассказать. Оставляйте свои комментарии и не забывайте делиться этой записью в социальных сетях.
Современные веб-ресурсы не просто предоставляют информацию посетителю, но и взаимодействуют с ним. Для взаимодействия с пользователем нужно получать некоторую информацию от него. Для получения данных есть несколько методов, очень распространенные методы GET и POST . И соответственно в PHP есть поддержка этих методов передачи данных GET и POST . Посмотрим, как работают эти методы.
Метод GET Данные методом GET передаются путем их добавления к URL-адресу вызываемого сценария, предназначенного для обработки полученной информации. Для пояснения данного метода наберите в адресной строке браузера URL-адрес ресурса и добавьте сначала знак вопроса (? ), а затем строчку num=10 . Например
Если у вас локальный сервер, то обычно домен будет localhost , и тогда предыдущая запись будет выглядеть
В этом случае мы передаем параметр num равный 10. Для добавления следующих параметров сценарию нужно использовать разделитель — амперсант (& ), например
В данном случае мы передали скрипту три параметра: num со значением 10, type со значением «new » и v со значением «text «.
Для получения этих параметров в скрипте нужно использовать встроенный массив $_GET $_GET[«num»], $_GET[«type»],$_GET[«v»] . Эти элементы массива и будут содержать значения переданных параметров. Для демонстрации этого примера создайте файл script.php следующего содержания
Проверка метода GET в PHP
И теперь вызовите этот файл в браузере
и вы увидите переданные параметры в окне браузера. Но если вы вызовите этот файл без дополнительных параметров http://путь/script.php , то увидите ошибки, которые выдаст интерпретатор PHP , о том, что таких элементов массива $_GET нет. Проверке данных получаемых от пользователя можно посветить не одну статью, поэтому в этой статье я не буду затрагивать этот момент.
Как вы, наверное, понимаете заставлять пользователя набирать данные в адресной строке браузера не очень хорошо и совсем неудобно. Поэтому для приема данных от пользователя нужно использовать html -формы. Напишем простенькую html -форму.
У Вас есть компьютер?
Да
Нет
Немного прокомментирую созданную форму. Формы создаются тегом form . Поля формы создаются тегами input , select , textarea (подробнее можно почитать ). В теге 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 .
Форма для передачи данных методом GET и PHP
У Вас есть компьютер?
Да
Нет
Введите в поля формы какие-либо значения и нажмите кнопку «Отправить». После нажатия кнопки браузер откроет другую страницу (script.php ), и в окне браузера будут отображены данные, которые вы ввели. Я думаю понятно почему: браузер передаст данные сценарию script.php , и в скрипте эти данные будут обработаны и выведены на экран.
Метод POST Теперь давайте рассмотрим, как работает метод POST .
Для отправки данных методом POST нужно использовать HTML -формы. Как мы помним, что за способ отправки данных формы отвечает атрибут method тега form . Поэтому нужно в атрибуте method тега form указать значение POST . В остальном форма может быть та же, как и для метода GET . Изменим нашу форму, которую мы уже использовали для передачи данных способом GET , для передачи методом POST .
У Вас есть компьютер?
Да
Нет
Как видите, форма осталась та же за исключением атрибутов method и action . Теперь данные будут передаваться сценарию script_post.php . Поместим нашу форму на странице forma_post.php .
Форма для передачи данных методом POST и PHP
У Вас есть компьютер?
Да
Нет
Теперь надо написать сценарий, который будет обрабатывать данные нашей формы.
Для получения в скрипте данных переданным методом POST нужно использовать встроенный массив $_POST . Ключами этого массива будут названия параметров. В нашем случае нужно использовать $_POST[«num»], $_POST[«type»],$_POST[«v»] . Эти элементы массива и будут содержать значения переданных данных. Как видите отличие от использования способа GET , выражается лишь в использовании массива $_POST . Поэтому нам не составит труда написать файл script_post.php :
Проверка метода POST в PHP
Теперь откройте файл forma_post.php в браузере. Введите какие-нибудь данные в поля формы и нажмите кнопочку «Отправить». Сейчас, наверное, вы заметили отличие метода POST от GET — в адресной строке браузера не появились данные формы. Данные методом POST нельзя передать через адресную строку браузера. Это существенное отличие нужно запомнить.
В PHP в независимости, каким способом были отправлены данные — методом POST или методом GET — получить данные можно используя массив $_REQUEST .Сравнение методов GET и POST При использовании метода GET данные передаются путем добавления к URL-адресу. Таким образом, они будут видны пользователю, что с точки зрения безопасности не всегда хорошо. Также максимальный объем передаваемых данных будет зависеть от браузера — от максимально-допустимого количества символов адресной строке браузера.
При использовании метода POST данные не будут видны пользователю (не отображаются в адресной строке браузера). И поэтому они более защищены, а, следовательно, и программа обрабатывающая эти данные более защищена в плане безопасности. Также объем передаваемых данных практически ни чем не ограничен.
Выбирая способ передачи данных нужно учитывать приведенные особенности и останавливаться на наиболее приемлемом методе.
Категории
- Интернет
- Windows 10
- Мультимедиа
- Утилиты
- Сеть и интернет
- Системные программы
- Настройка программ
- Проблемы с ОС
Работа с параметрами запроса в URL, с примером из реальной практики.
В статье разберем что такое параметры запроса, познакомимся c так называемыми utm-метками, и научимся работать с параметрами запроса на примере одной ситуации из моей практики.
Начнем с теории.
Внимание! Поскольку статья для начинающих веб-разработчиков, многие понятия в статье даются в упрощенном виде для облегчения понимания.
Параметры запроса
Зачастую, кроме адреса страницы сайта, в ссылке требуется передавать какие-то дополнительные параметры.
Представим, что есть каталог товаров в интернет-магазине. В каталоге может быть сотни и тысячи наименований товара, и, если выводить их на одной странице, она получится просто огромной, и будет грузится долгое время.
Всем известен выход из этой ситуации: нужно разбить каталог на страницы. Все вы видели такие страницы, там десять или двадцать товаров, а также ссылки на другие страницы каталога.
Как же сформированы подобные ссылки? Вот здесь-то и используются параметры запроса в URL.
Часто параметры запроса называют GET-параметрами. Это не совсем верно. Да, при запросе методом GET, эти параметры видны в строке браузера, но их с тем же успехом можно передавать и POST-запросом.
Посмотрите на адрес:
https://someshop.ru/catalog/iphone?page=1&perpage=20
- https – это протокол, по которому идет передача данных (в данном случае защищенный http);
- someshop.ru – доменное имя хоста (часто просто говорят «домен»);
- catalog/iphone – так называемый «Путь» до конкретной страницы на сайте, часто бывает иерархическим, при этом составные части пути разделяет прямой слэш /;
- page=1&perpage=20 – строка запроса (как раз состоящая из параметров).
Вот именно строку запроса, в большинстве случаев называют GET-параметрами.
Эта строка состоит из пар имя_параметра=значение_параметра.
Пары разделены между собой амперсандом &.
Строка запроса отделена от адреса (с путем) знаком вопроса ?
В адресе выше мы имеем два параметра запроса:
- page со значением 1
- perpage со значением 20
Они означают, что ссылка ведет на 1-ю страницу каталога, и выводить на странице нужно 20 товаров.
UTM-метки
Одним из распространенных примером применением параметров запроса являются так называемые UTM-метки.
UTM-метки – это, по сути, набор параметров запроса с заданными именами.
Они «де-факто» являются стандартом меток для сбора статистики. Практически все системы аналитики, CRM-системы, многочисленные сервисы из самых разных областей, поддерживают работу с UTM-метками.
Имена основных меток:
- utm_source — источник перехода;
- utm_medium — тип трафика;
- utm_campaign — название рекламной кампании;
- utm_content — дополнительная информация по каналу рекламы;
- utm_term — ключевая фраза.
Пример из практики
Я технически поддерживаю один из обучающих проектов.
Имела место следующая ситуация.
- Есть лендинг тренинга, в котором можно участвовать как платно (с расширенными возможностями), так и бесплатно (базовый вариант).
- На этот лендинг «льется трафик» с различных рекламных систем (яндекс.директ, вконтакте, фэйсбук, партнеры…).
- Все рекламные ссылки на этот лендинг размечены utm-метками.
- В свою очередь CRM-система, используемая на проекте, поддерживает работу с UTM-метками и таким образом можно считать выгоду от того или иного канала рекламы, соотнося расходы и продажи по каждому каналу.
- На лендинге имеются 2 ссылки для платного и бесплатного участия. Ссылка для бесплатного участия ведет на отдельную страницу, где находится форма, заполнив которую, человек попадает в группу в CRM для бесплатного участия в тренинге.
Проблема была в том, что при переходе по ссылке на страницу с формой, UTM-метки туда не передавались, и, соответственно, невозможно было понять по какому каналу рекламы пришел человек, который заполнил эту форму.
Формулируем задачу для решения этой проблемы:
нужно взять UTM-метки из строки запроса лендинга и подставить их в ссылку на страницу с формой.
Сделать это нужно было максимально быстро, т.е. «вчера» поскольку на страницу уже шел трафик.
Работа с параметрами запроса на сервере (PHP)
Задача была решена парой строчек кода на PHP.
Ниже код двух страничек, первая это эмуляция лендинга со ссылкой на эмуляцию страницы с формой, вторая это эмуляция страницы с формой.
Вторая страница нужна, чтобы вы могли скопировать ее посмотреть результат перехода по ссылке с лендинга.