Запросы с параметрами

Где использовать параметры

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

  • Аргумент Step — Параметр можно использовать в качестве аргумента для нескольких преобразований, управляемых из пользовательского интерфейса.
  • Аргумент — пользовательской функции Можно создать новую функцию на основе запроса и ссылочные параметры в качестве аргументов пользовательской функции.

В следующих разделах вы увидите пример для этих двух сценариев.

Аргумент Step

Чтобы включить эту функцию, сначала перейдите на вкладку вид в редакторе Power Query и включите параметр всегда разрешать в группе Параметры .

Примечание

В настоящее время эта функция недоступна в Power Query в сети.

Например, можно просмотреть следующие запросы заказов с полями OrderID, Units и Margin.

Можно создать новый параметр с минимальным полем имени с типом десятичного числа и текущим значением 0,2, как показано на следующем рисунке.

Можно открыть запрос заказы и в поле поля выбрать параметр больше чем фильтр.

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

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

Если изменить Текущее значение параметра минимального поля на 0,3, можно сразу же увидеть, как обновляется запрос заказов и отображаются только те строки, в которых маржа превышает 30%.

Совет

Множественные преобразования в Power Query предлагают эту возможность выбора параметра из раскрывающегося списка. Поэтому рекомендуется всегда искать и использовать преимущества параметров, которые могут предложить вам.

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

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

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

Вы можете проверить эту новую функцию, введя значение, например 0,4, в поле под меткой минимального поля . Затем нажмите кнопку Invoke (вызвать ). При этом будет создан новый запрос с именем вызванная функция, которая фактически передает значение 0,4 для использования в качестве аргумента функции и предоставляет только те строки, в которых поле превышает 40%.

Дополнительные сведения о создании пользовательских функций см. в статье Создание пользовательской функции.

Создание простого запроса

Откроем базу данных STUD, как было рассмотрено в ЛР1. Создадим запрос, выводящий информацию о студентах, у которых имеются задолженности.

Для создания запроса активизируем окно базы данных (см. ЛР1). После этого щелкнем по корешку «Запрос» и кнопке «Создать». В появившемся диалоговом окне «Создание запроса» выберите кнопку «Конструктор». Access откроет диалоговое окно «Добавление таблицы», позволяющее выбрать базовые таблицы и запросы для создаваемого запроса. Выберите таблицы «Результаты» и «Cтуденты», нажимая кнопку «Добавить», после чего закройте это окно кнопкой «Закрыть».

Открывшееся окно конструктора запросов состоит из двух частей: верхняя содержит списки полей выбранных таблиц, а нижняя — бланк QBE для создания запроса. Каждый столбец бланка описывает одно поле, участвующее в запросе.

Включение поля в запрос производится перетаскиванием его из списка полей таблиц (расположенного в верхней части экрана) в нужный столбец бланка QBE при помощи мышки. Включение всех полей таблицы происходит перетаскиванием символа «*», находящегося вверху списка полей данной таблицы в верхней части экрана. Включите в запрос поля таблицы «Результаты»:

перетащив их в бланк QBE . Рассмотренным выше методом перетащите из таблицы “Студенты” поле Фамилия.

Запрос “Задолженность” будет иметь вид, как показано на рисунке. Установка связей между таблицами производится автоматически, используя структуру связей, созданную при генерации проекта БД. Можно задавать другие варианты связи таблиц и иные типы связей (внешнее объединение, «один-к-одному», «один-ко-многим» и т.д.). Изменение связей производится в верхней части окна выбором связанного поля в описании одной таблицы и транспортировкой его при нажатой кнопке мышки на описание соответствующего поля связанной таблицы. Тип связи можно изменить, активизировав ее щелчком мышки на линии связи.

Условие для отбора нужных нам полей производится включением этого условия для данного поля в строке QBE «Условие отбора». Несколько значений отбора вводятся в одну строку, разделенные логическими условиями AND или OR, либо вводятся в последующие ячейки строки «или». Установим для таблицы «Результаты» условие отбора студентов, у которых задолженности, для чего в столбец описания поля внесем строку «Задолженность» из таблицы «Результаты», и в строке «Условие отбора» введем: Да

Сбросим для этого поля флажок «Показать», запрещающий вывод данного поля в выборке (т.к его не обязательно выводить). Кроме стандартных операторов сравнения ‘=’, ‘ ‘, ‘ =’, Access поддерживает также BEETWEN, IN, LIKE. В запросе могут присутствовать т.н. вычисляемые поля — вычисленные значения над любыми полями таблицы. Access поддерживает большое число функций и операторов, применяемых при генерации вычисляемых полей. Чтобы просмотреть результат запроса необходимо на панели нажать кнопку:

Изменить заголовок можно также активизировав столбец с описанием поля; а затем выполнив команду «Свойства» меню «Вид», ввести в строку «Подпись поля» его название.

Строки итоговой таблицы желательно отсортировать по полю «Фамилия» таблицы «Студенты». Для этого в столбце с описанием данного поля в строке «Сортировка» выберем пункт «по возрастанию». При необходимости сортировки по нескольким полям Access сортирует данные в порядке их расположения в бланке QBE. После просмотра запроса видно, что необходимо ввести поле Имя из таблицы “Студенты”, т.к фамилии повторяютя и запрос не несет необходимой информации. Чтобы вставить поле, перетяните его в сетку QBE на место, где он должен находится и все остальные поля передвинуться на одну позицию в право. Запустить полученный запрос на выполнение можно также командой «Выполнить» меню «Запрос». Проверим полученные результаты на соответствие критериям отбора. Сохраним полученный запрос под именем «Задолженности». Запрос представляет собой таблицу:

Создадим запрос, в котором будет вычисляться дополнительное поле. Кафедра вычислительной техники решила своим работникам к новому году выплатить премию в размере 10% от зарплаты. Создадим запрос на базе таблицы “Преподаватели”, с полями Фамилия, Кафедра, Должность, Зарплата. Чтобы создать вычисляемое поле “Премия”, выводящее информацию о величине премии работнику, в новом столбце (следующим за заполненным), в строке “Поле” введем выражение Зарплата*0,1. Изменим заголовок поля, введя перед выражение его название. Ячейка будет содержать: «Премия: *0,1».

Изменить заголовок можно также активизировав столбец с описанием поля, а затем выполнив команду «Свойства» меню «Вид», ввести в строку подпись поля его название. Введите в строку «условие отбора» для кафедры «Вычислительная техника».

Шаг 2. Добавление параметров в пользовательскую инструкцию SQL

При добавлении пользовательской инструкции SQL можно ввести предложение явным образом или указать значение в ячейке фильтра конструктор запросов. Чтобы продемонстрировать это, позвольте отобразить только те продукты в элементе управления GridView, цены которых меньше определенного порогового значения. Начните с добавления текстового поля на страницу , чтобы получить это пороговое значение от пользователя. Задайте для свойства TextBox значение . Добавьте веб-элемент управления «Кнопка» и задайте для него свойство , чтобы отобразить соответствующие продукты.

Затем перетащите элемент управления GridView на страницу и из его смарт-тега выберите Создание нового элемента управления SqlDataSource с именем . В мастере настройки источника данных перейдите к экрану определение пользовательской инструкции SQL или хранимой процедуры (см. рис. 4) и введите следующий запрос:

После ввода запроса (вручную или с помощью конструктор запросов) нажмите кнопку Далее.

Рис. 4. возврат только тех продуктов, которые меньше или равны значению параметра (щелкните, чтобы просмотреть изображение с полным размером)

Так как запрос содержит параметры, на следующем экране мастера запрашивается источник значений параметров. Выберите элемент управления из раскрывающегося списка Источник параметра и ( значение элемента управления TextBox) из раскрывающегося списка ControlID. Можно также ввести необязательное значение по умолчанию, которое будет использоваться в случае, если пользователь не введет текст в текстовое поле . Для времени не вводите значение по умолчанию.

Рис. 5. свойство TextBox используется в качестве источника параметра (щелкните, чтобы просмотреть изображение с полным размером)

Завершите работу мастера настройки источника данных, нажав кнопку Далее, а затем Готово. Декларативная разметка для GridView, TextBox, Button и SqlDataSource выглядит следующим образом:

Обратите внимание, что параметр в разделе SqlDataSource s является , который включает дополнительные свойства, такие как и. Когда вызывается метод SqlDataSource , извлекает значение из указанного свойства веб-элемента управления и присваивает его соответствующему параметру в

В этом примере в качестве значения параметра используется свойство s Text.

Потратьте минуту, чтобы просмотреть эту страницу в браузере. При первом посещении страницы или при отсутствии значения в текстовом поле в GridView не отображаются никакие записи.

Рис. 6. никакие записи не отображаются, если пустое текстовое поле (щелкните, чтобы просмотреть изображение с полным размером)

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

Введите значение в текстовое поле, например 5,00, и нажмите кнопку Показать соответствующие продукты. При обратной передаче SqlDataSource информирует элемент управления GridView о том, что один из его источников параметров изменился. Следовательно, элемент управления GridView выполняет повторную привязку к SqlDataSource, отображая такие продукты, которые меньше или равны $5,00.

Рис. 7. отображаются продукты, размер которых меньше или равен $5,00 (щелкните, чтобы просмотреть изображение с полным размером)

Exec — Выполнение кода, консоль запросов и не только! Промо

Незаменимый инструмент администратора БД и программиста:
Выполняйте произвольный код из режима 1С Предприятие; сохраняйте/загружайте часто используемые скрипты; выполняйте запросы с замером производительности запроса в целом и каждой из временных таблиц в частности, а также с просмотром содержимого временных таблиц; произвольным образом изменяйте любые объекты БД, редактируя даже не вынесенные на формы реквизиты и записывая изменения в режиме «ОбменДанными.Загрузка = Истина»; легко узнавайте ИД объектов БД; выполняйте прямые запросы к SQL с замером производительности и не только!

5 стартмани

Указание направления параметров

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

Для указания выходного параметра в определении процедуры необходимо указать ключевое слово OUTPUT в инструкции CREATE PROCEDURE. Процедура, завершая свою работу, возвращает текущее значение выходного параметра в вызывающую программу. При выполнении процедуры вызывающая программа также должна использовать ключевое слово OUTPUT для сохранения значения параметра в переменной, которое затем может быть использовано в вызывающей программе.

В следующем примере создается процедура , которая возвращает список продуктов, цены которых не превышают заданного значения. На данном примере демонстрируется использование нескольких инструкций SELECT и нескольких параметров OUTPUT. Параметры OUTPUT позволяют внешней процедуре, пакету или нескольким инструкциям Transact-SQL осуществлять доступ к набору значений во время выполнения процедуры.

Процедура возвращает из базы данных Adventure Works список товаров (велосипедов) стоимостью менее $ 700. Параметры @cost и @compareprices инструкции OUTPUT используются в языке управления потоком для вывода информации в окне Сообщения.

Примечание

Переменная OUTPUT должна быть определена во время создания процедуры, а также в ходе использования переменной. Имена параметра и переменной не должны совпадать. При этом тип данных и положение параметра должны быть одинаковыми (если только не используется @listprice= переменная).

Частичный результирующий набор:

Примечания

Вы можете использовать вложенный запрос вместо выражения в списке полей оператора SELECT или предложении WHERE или HAVING. Во вложенном запросе вы используете оператор SELECT для предоставления набора одного или нескольких определенных значений для оценки в выражении для предложения WHERE или HAVING.

Используйте предикат ANY или SOME, которые являются синонимами, для получения записей в основном запросе, который удовлетворяет сравнению с любыми записями, полученными во вложенном запросе. Следующий пример возвращает все продукты, для которых цена за единицу выше, чем у любого продукта, продаваемого со скидкой 25 процентов или более:

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

Используйте предикат IN для получения только тех записей в основном запросе, для которых определенная запись во вложенном запросе содержит одинаковое значение. В примере ниже возвращаются все продукты со скидкой 25 процентов или больше:

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

Используйте предикат EXISTS (с необязательным зарезервированным словом NOT) в сравнениях ИСТИНА/ЛОЖЬ, чтобы определить, возвращает ли вложенный запрос какие-либо записи.

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

В приведенном выше примере зарезервированное слово AS не является обязательным.

Некоторые вложенные запросы поддерживаются в перекрестных запросах, в частности, в качестве предикатов (например в предложении WHERE). Вложенные запросы в виде выходных данных (в списке SELECT) не поддерживаются в перекрестных запросах.

2.4. Microsoft Access 2007

2.4.5. Создание запросов и поиск информации в базе данных

В СУБД Access 2007 можно создавать queries для отображения требуемых полей из записей одной или нескольких таблиц.

В СУБД Access 2007 применяются различные типы запросов: на выборку, на обновление, на добавление, на удаление, перекрестный query, выполнение вычислений, создание таблиц. Наиболее распространенным является query на выборку. Применяются два типа запросов: query по образцу (QBE) и query на основе структурированного языка запросов (SQL).

Запросы на выборку используются для отбора требуемой пользователю информации, содержащейся в нескольких таблицах. Они создаются только для связанных таблиц. Queries могут основываться как на нескольких таблицах, так и существующих запросах. СУБД Access 2007 включает такие средства создания запросов, как Мастер и Конструктор.

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

На скриншоте (рисунок 1) средства сортировки и фильтрации выделены скругленным прямоугольником красного цвета.

Рассмотрим создание запроса на выборку с помощью Конструктора

Для создания нового пустого запроса в режиме конструктора надо щелкнуть на пиктограмме Конструктор запросов (рисунок 2).

Откроется активное окно диалога Добавление таблицы (рисунок 3) на фоне неактивного окна «Запрос1». В этом окне можно выбрать таблицы и queries для создания новых запросов.

В окне Добавление таблицы следует выбрать несколько таблиц из представленного списка таблиц, на основе которых будет проводиться выбор данных, и щелкнуть на кнопке Добавить. После этого закрыть окно Добавление таблицы, а окно «Запрос1» станет активным (рисунок 4).

Окно Конструктора состоит из двух частей – верхней и нижней. В верхней части окна размещается схема данных запроса, которая содержит список связанных таблиц. В нижней части окна находится Бланк построения запроса QBE, в котором каждая строка выполняет определенную функцию.

Переместим имена полей с таблиц-источников в Бланк. Из таблицы Группы студентов переместим поле Название в первое поле Бланка, из таблицы Студенты переместим поле Фамилии во второе поле, а из таблицы Успеваемость переместим поле Оценка в третье поле и из таблицы Дисциплины переместим поле Название в четвертое поле Бланка запросов.

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

Условия ограниченного поиска или критерий поиска информации вводится в строке «Условия» отбора и строке «Или». Например, введем критерий поиска — «5/A» в строке «Условия» для поля Оценка. В этом случае в результате выполнения запроса на экране будут отображаться все фамилии студентов, которые получили оценку 5/A (рисунок. 5).

Далее надо закрыть окно запроса Запрос1, появится окно диалога Сохранить, ответить — Да и ввести имя запроса, например «Успеваемость студентов». Для запуска запроса дважды щелкнем на query «Успеваемость студентов», откроется таблица с результатами выполненного запроса (рис. 6).

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

Закрыть окно запроса на выборку. На вопрос о сохранении изменения ответить — Да и ввести имя запроса, например «Параметрический query». Запустим Параметрический query, дважды щелкнув на нем. В открывшемся на экране окне диалога «Введите значение параметра» надо ввести фамилию студента, информацию об успеваемости которого необходимо получить (рис. 8).

Затем надо щелкнуть на кнопке ОК, откроется таблица с результатами выполненного запроса (рис. 8).

В некоторых случаях для создания запросов можно использовать Мастер запросов. После создания запросов на выборку информации из БД Access 2007 можно приступать к формированию форм.

Обучение в интернет, . Обратная связь

Создание запроса с несколькими таблицами

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

Чтобы создать запрос с несколькими таблицами:

  1. Выберите команду « Конструктор запросов» на вкладке « Создать » на ленте.

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

Таблицы появятся в панели «Связывание объектов» , которая связана линией соединения . Дважды щелкните тонкий раздел линии соединения между двумя таблицами, чтобы изменить направление соединения.

Регистрация Свойства диалоговое окно. Выберите вариант, чтобы выбрать направление вашего соединения.

  • Выберите вариант 2: для объединения слева направо . В нашем запросе левая таблица — таблица Customers , поэтому выбор этого означает, что все наши клиенты, которые соответствовали нашим критериям местоположения, независимо от того, разместили ли они заказ, будут включены в наши результаты. Мы не хотим выбирать этот вариант для нашего запроса.
  • Выберите вариант 3: для запроса справа налево . Поскольку наш правильный стол является нашей таблицей Orders , выбор этого параметра позволит нам работать с записями для всех заказов и только для клиентов, разместивших заказы. Мы выберем этот вариант для нашего запроса, потому что это именно те данные, которые мы хотим видеть.

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

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

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

  • Во-первых, чтобы найти клиентов, которые не живут в Роли, мы будем вводить Not In («Raleigh») в поле City.
  • Во-вторых, чтобы найти клиентов , которые имеют телефонный номер , начинающийся с кодом 919 , мы вводим Like ( «919 *») в номер телефона поле.

После того, как вы установили критерии, запустите запрос, нажав команду « Выполнить» на вкладке « Дизайн запросов ».

Результаты запроса будут отображаться в представлении Datasheet запроса , которое выглядит как таблица. Если вы хотите, сохраните запрос, нажав команду « Сохранить» на панели быстрого доступа. Когда появится запрос на его имя, введите нужное имя и нажмите «ОК» .

Новые статьи

  • Проектирование собственной базы данных в Access — 21/08/2018 15:16
  • Форматирование форм в Access — 21/08/2018 15:11
  • Создание форм в Access — 21/08/2018 15:05
  • Изменение таблиц в Access — 21/08/2018 14:58
  • Дополнительные параметры отчета в Access — 21/08/2018 14:48
  • Создание отчетов в Access — 21/08/2018 14:42
  • Дополнительные параметры дизайна запроса в Access — 21/08/2018 14:36

Предыдущие статьи

  • Сортировка и фильтрация записей в Access — 21/08/2018 04:37
  • Работа с формами в Access — 21/08/2018 04:25
  • MS Access — Работа с таблицами, создание, удаление, настройка внешнего вида — 20/04/2018 17:18
  • MS Access — Управление базами данных и объектами — 30/03/2018 16:18
  • Начало работы в Access. Знакомство с Access 2010 — 10/02/2018 18:24
  • MS Access: Введение в объекты — Таблицы, формы, запросы и отчеты — 07/02/2018 08:32
  • MS Access: Что такое база данных? Отличие Access от Excel. — 03/02/2018 18:18

Работа с параметрами запроса на сервере (PHP)

Задача была решена парой строчек кода на PHP.

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

Лендинг (index.php):

<?php
$queryStr = filter_input(INPUT_SERVER, ‘QUERY_STRING’);
$url = $queryStr ? ‘form.html?’ . $queryStr : ‘form.html’;
?>
<!DOCTYPE html>
<html lang=»ru»>

<head>
<meta charset=»utf-8″>
<meta name=»viewport» content=»width=device-width, initial-scale=1.0″>
<title>Лендинг</title>
</head>

<body style=»background-color: #f5f5f5″>
<div style=»width: 100%; max-width: 600px; margin: 100px auto; background-color: #ffffff; padding: 60px 40px; text-align: center;»>
<h1>Это лендинг</h1>
<p><a href=»<?= $url ?>» target=»_blank»>Это ссылка на страницу с формой</a></p>
</div>
</body>

</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

<?php

$queryStr=filter_input(INPUT_SERVER,’QUERY_STRING’);

$url=$queryStr?’form.html?’.$queryStr’form.html’;

?>

<!DOCTYPE html>

<html lang=»ru»>

<head>

<meta charset=»UTF-8″>

<meta name=»viewport»content=»width=device-width, initial-scale=1.0″>

<title>Лендинг<title>

<head>

<body style=»background-color: #f5f5f5″>

<div style=»width: 100%; max-width: 600px; margin: 100px auto; background-color: #ffffff; padding: 60px 40px; text-align: center;»>

<h1>Этолендинг<h1>

<p><ahref=»<?=$url?>»target=»_blank»>Этоссылканастраницусформой<a><p>

<div>

<body>

<html>

Страница с формой (form.html):

<!DOCTYPE html>
<html lang=»ru»>

<head>
<meta charset=»utf-8″>
<meta name=»viewport» content=»width=device-width, initial-scale=1.0″>
<title>Страница с формой</title>
</head>

<body style=»background-color: #f5f5f5″>
<div
style=»width: 100%; max-width: 600px; margin: 100px auto; background-color: #ffffff; padding: 60px 40px; text-align: center;»>
<h1>Это страница с формой</h1>
</div>
</body>

</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<!DOCTYPE html>

<html lang=»ru»>

 
<head>

<meta charset=»UTF-8″>

<meta name=»viewport»content=»width=device-width, initial-scale=1.0″>

<title>Страница с формой</title>

</head>
 

<body style=»background-color: #f5f5f5″>

<div

style=»width: 100%; max-width: 600px; margin: 100px auto; background-color: #ffffff; padding: 60px 40px; text-align: center;»>

<h1>Это страница с формой</h1>

</div>

</body>
 
</html>

Собственно решение в первом PHP-блоке:

<?php
$queryStr = filter_input(INPUT_SERVER, ‘QUERY_STRING’);
$url = $queryStr ? ‘form.html?’ . $queryStr : ‘form.html’;
?>

1
2
3
4

<?php

$queryStr=filter_input(INPUT_SERVER,’QUERY_STRING’);

$url=$queryStr?’form.html?’.$queryStr’form.html’;

?>

В первой строке, при помощи функции filter_input, получаем строку запроса из суперглобального массива $_SERVER.

Во второй строке, если строка запроса имеется, прикрепляем её к URL страницы с формой.

Получившуюся переменную $url выводим в атрибуте href ссылки.

Таким образом на страницу form.html стали передаваться UTM-метки, и CRM-система начала получать информацию о канале рекламы, с которого пришел тот или иной посетитель.

Решение, приведенное выше, далеко не универсально. Поскольку берутся все параметры запроса, а кроме UTM-меток, среди них, могут быть и другие параметры.

Стоит немного усовершенствовать код, чтобы брать только те параметры, которые нам нужны.

<?php
$validParams = [ // Допустимые имена параметров
‘utm_source’,
‘utm_medium’,
‘utm_campaign’,
‘utm_content’,
‘utm_term’
];
$queryStr = »;
$inputArray = filter_input_array(INPUT_GET); // Получаем параметры из массива $_GET
if ($inputArray)
{
foreach ($inputArray as $key => $value)
{
$key = strtolower($key);
if(in_array($key, $validParams)) // Проверка имени параметра на допустимость
{
$queryStr .= «$key=$value&»; // В цикле формируем строку с параметрами
}
}
$queryStr = rtrim($queryStr, ‘&’); //удаляем последний символ &
}
$url = $queryStr ? ‘form.html?’ . $queryStr : ‘form.html’;
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<?php

$validParams=// Допустимые имена параметров

‘utm_source’,

‘utm_medium’,

‘utm_campaign’,

‘utm_content’,

‘utm_term’

;

$queryStr=»;

$inputArray=filter_input_array(INPUT_GET);// Получаем параметры из массива $_GET

if($inputArray)

{

foreach($inputArrayas$key=>$value)

{

$key=strtolower($key);

if(in_array($key,$validParams))// Проверка имени параметра на допустимость

{

$queryStr.=»$key=$value&»;// В цикле формируем строку с параметрами

}

}

$queryStr=rtrim($queryStr,’&’);//удаляем последний символ &

}

$url=$queryStr?’form.html?’.$queryStr’form.html’;

?>

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector