Подскажите по GET в php)

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 16 июня 2014 в 00:01
Передаю с помощью GET такой набор
?abr=mama,papa,ded,baba

На странице нужно проверить
— если $_GET["abr"] содержит "mama" то выводим блок "мама"
— если $_GET["abr"] содержит "papa" то выводим блок "папа"
etc.

Как правильно проверять?)

Если передавать по отдельности (?mama=1&papa=1.....) то так понимаю)

Или направьте на пример,. я видать гошу не правильно спрашиваю, показывает то что и без него знаю)

ps: передаваться могут не все значения! может передаваться только ?abr=papa,baba
вот тут нужно проверить, что получили и в соответствии вывести блоки…
#2 16 июня 2014 в 01:10
  1. if (substr_count($_GET["abr"], "mama")) {
  2. // выводим блок мама
  3. }
#3 16 июня 2014 в 02:18
Sonat, спасибо!
Я вроде сделал, но чуть иначе, вначале разбил полученную строку на элементы и после проверил с помощью функции in_array

  1. $abr = explode(',', $_GET["abr"]);
  2.  
  3. if (in_array('mama', $abr, true)) {
  4. // выводим блок мама
  5. }
Не знаю правильно или нет но работает — мне главное чтоб работало максимально быстро...

Пока тему оставляю открытую, может кто подскажет чего умного, вариантов всегда более одного)
#4 16 июня 2014 в 02:19
Sonat
Будут ложные срабатывания, например при "paramama".
Наверно лучше разбить строку:
  1.  
  2. $abr = explode(",", $_GET["abr"]);
  3. if (in_array("mama", $abr )) {
  4. echo "Это мама";
  5. }
  6.  
#5 16 июня 2014 в 02:20
тьфу, опоздал)
#6 16 июня 2014 в 02:23


  1. if (substr_count($_GET["abr"], "mama")) {
  2. // выводим блок мама
  3. }

Sonat

Sonat, проверил, чет у меня так не пашет...

snooker, спасибо — так пашет)
#7 16 июня 2014 в 14:37
  1. Будут ложные срабатывания, например при "paramama".
Вообще да, но в данной задаче, скорее всего, не принципиально.
Ведь строку-то формирует не юзер абы как, эти abr наверняка ограничены и все известны и на стадии написания кода можно не писать пересекающихся вариантов типа "paramama"

ЗЫ. Как по мне чем меньше кода тем проще )
#8 16 июня 2014 в 19:03

строку-то формирует не юзер абы как, эти abr наверняка ограничены и все известны и на стадии написания

Sonat
Известны, всего 16 (возможно прибавиться), и пересечения уже есть)
Можно убрать пересечения, но разбить строку всего один раз не проблема)

… а вот проверка вывода мне не сильно нравится) каждый раз скрипт пробегает по 16 блокам и проверяет 16 строк на вхождение искомого)) даже если мы запросили всего 1 блок) но без проверки мы не узнаем какой именно из них…

Вернее я название знаю и визуально вижу часть кода которую нужно вывести, но php слепой)) пока все не пощупает не поверит))

Вопрос: Стоит ли как то делать подсчет переданных "слов" и искать блоки пока кол-во блоков не сравняется с кол-вом слов?)))
Типа чтоб лишнее не проверять если уже все блоки найдены)
#9 16 июня 2014 в 19:16

?abr=mama,papa,ded,baba
— если $_GET["abr"] содержит "mama" то выводим блок "мама"
— если $_GET["abr"] содержит "papa" то выводим блок "папа"

reload
Во первых, почему обязательно GET, а не POST?
Во вторых, передаете методом POST массив $a = array('mama'=>1, 'papa'=>0, 'baba'=1, 'dada'=>0);
В приемнике: $a = cmsCore::request('a', 'array', '');
И затем
if(!$a['mama']){...}
if(!$a['papa']){...}
и никаких сложностей с распарсиванием…
#10 16 июня 2014 в 20:24

Во первых, почему обязательно GET, а не POST?

Странник
так получилось) у меня запрос отсылает js скрипт и возвращает результаты — GET мне проще сформировать) в POST нужны формы… тем более что сам запрос визуально не видно какой он))

Во вторых, передаете методом POST массив $a = array('mama'=>1, 'papa'=>0, 'baba'=1, 'dada'=>0);

Странник
С эти сложнее так как по такой схеме заранее все элементы присутствуют как в запросе, так и до него (есть нюансы)
С GET я могу передать только 1 элемент, и код до запроса будет содержать только 1 элемент (особенность поделки) А чем компактней, тем лучше)

Если при данной реализации GET запроса (вернее самой проверки элементов при таком запросе) не создается бОльшая "нагрузка" то GET идеально подходит для моей задачи…

Как то так.
#11 16 июня 2014 в 20:36
Как хотите. Однако надежно распарсить возвращаемую GET строку вам будет сложнее, чем сделать по той схеме, что я предложил.
И в js тоже можно использовать POST между прочим. Используйте метод ajax() из jquery — он и отсылает данные скрипту на сервер и принимает потом результат работы этого скрипта…
#12 16 июня 2014 в 21:00
reload, Странник имел в виду что типа:
?abr[]=mama&abr[]=papa&abr[]=ded&abr[]=baba
а в коде получать
  1. $abr = cmsCore::request('abr', 'array_str', array());
в массиве $abr будет то, что вы делали
  1. $abr = explode(',', $_GET["abr"]);
#13 16 июня 2014 в 21:00


строку-то формирует не юзер абы как, эти abr наверняка ограничены и все известны и на стадии написания

Sonat
Известны, всего 16 (возможно прибавиться), и пересечения уже есть)
Можно убрать пересечения, но разбить строку всего один раз не проблема)

… а вот проверка вывода мне не сильно нравится) каждый раз скрипт пробегает по 16 блокам и проверяет 16 строк на вхождение искомого)) даже если мы запросили всего 1 блок) но без проверки мы не узнаем какой именно из них…

Вернее я название знаю и визуально вижу часть кода которую нужно вывести, но php слепой)) пока все не пощупает не поверит))

Вопрос: Стоит ли как то делать подсчет переданных "слов" и искать блоки пока кол-во блоков не сравняется с кол-вом слов?)))
Типа чтоб лишнее не проверять если уже все блоки найдены)

reload

Так просто пройтись по массиву $abr, не будет лишних проверок.

  1.  
  2. $abr = explode(",", $_GET["abr"]);
  3. foreach ($abr as $blok){
  4. echo "<br>Блок ".$blok;
  5. }
  6.  
#14 17 июня 2014 в 20:24
Всем спасибо, вопрос в принципе решен!
Обязательно рассмотрю вариант с POST, но даже GET работает "идеально"

ps: с помощью параметров в GET можно формировать необходимую статистику в метрике)

Похожие темы

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.