Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: вопрос про разбор ссылки и if
Форумы портала PHP.SU » PHP » Программирование на PHP » вопрос про разбор ссылки и if

Страниц (1): [1]
 

1. genialno - 25 Октября, 2009 - 21:31:41 - перейти к сообщению
Пусть есть две ссылки
/index.php?id=car
/index.php?id=car&model={name_car}

PHP:
скопировать код в буфер обмена
  1. if ($_GET['id']=='car')
  2.                 {      
  3.                       function1();
  4.                 }
  5.                
  6. if (($_GET['id']=='car') && ($_GET['model']=={name_car}))
  7.                 {      
  8.                       function2();     
  9.                 }      

на месте {name_car}-функция, которая возвращает имя модели.

Если такая запись $_GET['model']=='{name_car}', то работает первый иф, независимо от того, по какой ссылке был сделан клик.
Если без ковычек - второй иф,независимо от того, по какой ссылке был сделан клик.

1) Как сделать так, чтобы при нажатии на первую ссылку работал первый иф, на вторую-второй. Т.е. что сделано не так?

2)Как в проектах обрабатываются ссылки такого плана?
CODE (text):
скопировать код в буфер обмена
  1. /index.php?id=car&model={name_car}

ведь может быть задано много параметров,и каким образом производится проверка всех составляющих ссылки?
Например, как вот обработать такое. Ведь не ифами же.
CODE (text):
скопировать код в буфер обмена
  1. /index.php?id=car&model=bmw&color=red&year=2002
  2. /index.php?id=bike&model=bmw&color=green&year=2004


Спасибо.
2. keysi_ - 25 Октября, 2009 - 21:47:09 - перейти к сообщению
Вопрос не очень ясен. Но отвечу как понял.
1) Как сделать так, чтобы при нажатии на первую ссылку работал первый иф, на вторую-второй. Т.е. что сделано не так?

Ответ: Первый IF будет работать только в том случае если верно условие $_GET['id']=='car', второй только в случае если верны оба усовия $_GET['id']=='car' и $_GET['model']=={name_car} (кстати очень странная запись, зачем тут фигурные скобки?). Логично, что при нажатии на первую ссылку /index.php?id=car условие $_GET['model']=={name_car} не будет соблюдено, так как переменная $_GET['model'] вообще не объявлена. Но зато при нажатии на вторую ссылку /index.php?id=car&model={name_car} будут верны оба условия, требуемые второму IF'у , но условия также верно и для первого, потому что переменная $_GET['id'] равна 'car'.
Я не знаю конечной цели, но я бы такой пример записал, так, чтобы два раза не проверять переменную $_GET['id'] и добиться такого же результата.:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if ($_GET['id']=='car')
  3. {      
  4.         function1();
  5.          if ($_GET['model']=={name_car})
  6.          {     
  7.                  function2();  
  8.          }
  9. }
  10.  

2)Как в проектах обрабатываются ссылки такого плана?
ведь может быть задано много параметров,и каким образом производится проверка всех составляющих ссылки?
Например, как вот обработать такое. Ведь не ифами же.

Вобщем-то именно ифами, проще всего можно еще например switch, но разница не значительно.
3. Мелкий - 25 Октября, 2009 - 22:17:54 - перейти к сообщению
1) Вкладывать условия по возрастанию:
PHP:
скопировать код в буфер обмена
  1. if ($_GET['id']=='car') {
  2.         if (isset($_GET['model']) {
  3.                 if ($_GET['model'] == {name_car}) function2();
  4.         } else function1(); //не передали model
  5. }
  6.  

2) А такие запросы вообще обычно через if проверяют на валидность, а обрабатывает СУБД.
4. genialno - 25 Октября, 2009 - 22:42:35 - перейти к сообщению
keysi_спасибо, но не получилось таким способом.

Мелкий спасибо! отлично разобрался. Все красиво.

А можно про второй вопрос подробнее.
Т.е.
либо ссылочек каких на эту тему, либо книжку.
Или сами поведайте.
5. keysi_ - 26 Октября, 2009 - 00:16:53 - перейти к сообщению
Как ни странно, но лучшая книжка на эту тему - это стандартный справочник по PHP и конкретная задача. Еще не плохо под рукой иметь какой нибудь сборник простых готовых скриптов, на первое время, чтобы контролировать себя, посмотрев как это делают другие.
Из книжек, есть неплохая книга - Лаура Томпсон и Люк Веллинг PHP и MySQL. Но все же самая лучшее - это собственный опыт и, повторюсь, справочник под рукой.
6. JustUserR - 26 Октября, 2009 - 10:52:00 - перейти к сообщению
genialno Бесплатные книги по программированию - см подпись
7. genialno - 26 Октября, 2009 - 22:09:41 - перейти к сообщению
JustUserR по моему, ответ не по теме. Я не прошу сайт с книгами для скачивания.
Это как попросить совета по выбору машины, а дадут ссылку на автокаталог.

Что-то конкретное хотелось бы. По ответу на второй вопрос. Ссылочки, как сами в своих проектах реализовываете. Вот.
8. JustUserR - 27 Октября, 2009 - 18:00:47 - перейти к сообщению
genialno Вопервых выше зашел разговор о книгах и поэтому я счел нужным указать где из можно раздобыть (Вы думаете я этот сайт в подпись добавил ради рекламы - нет! Просто многие интересовали где можно взять бесплатно книги)
Вовторых зачем описывать встроенные средства базы данных здесь если все это уже было сто раз написано авторами - хотя бы вот это http://progbook[dot]ru/2008/08/16/ph[dot][dot][dot]vatelja-tim[dot]html
Да и что касается второго вопроса в общем то вы можете делать широкий набор условий в where и где надо использовать вложенные запросы чтобы извлечь одни данные по другим
9. genialno - 08 Ноября, 2009 - 01:28:35 - перейти к сообщению
Вот, допустим есть на сайте ссылки.
4-я -это расширение 3-й, 3-я - 2-й, 2-я -1-й.
Мне непонятно, как делать разбор ссылок. Выше был дан совет, но я вот и пытался так делать. Если пару параметров, то можно, но если как в 4-й ссылке, их много, то через isset делать- убийство. Или я тогда чего-то не понял.

1)index.php?id=AAA
2)index.php?id=AAA&brand=BBB
3)index.php?id=AAA&brand=BBB&model=CCC
4)index.php?id=AAA&brand=BBB&model=CCC&param1=p1&param2=p2&....&paramN=pN
----------------------
5)index.php?id=&agr=DDD
6)index.php?id=AAA&agrg=EEE
7)index.php?id=PPP&brand=MMM&model=CCC&param1=p1&param2=p2&....&paramN=pN

Вот делал разбор ссылок вышенаписанных(без 4 ссылки). Ну ещё как-то сделал.
Но каким образом обрабатывать большие, с многими параметраси ссылки, т.е постепенно нарастающие (1-2-3-4).
Предложите вариант решения.
PHP:
скопировать код в буфер обмена
  1. if ($_GET['id']=='AAA')
  2. {
  3.         if (isset($_GET['brand']))
  4.         {
  5.                 if (isset($_GET['model']))
  6.                 {
  7.                         func1();
  8.                 }
  9.                 else
  10.                 {
  11.                         if ($_GET['brand'] =='qwe')
  12.                         func2();
  13.                 }
  14.         }
  15.         else
  16.         {
  17.                 if (isset($_GET['agr']))
  18.                 {
  19.                         func3();
  20.                 }
  21.                 else {
  22.                         if (isset($_GET['agrg']))
  23.                         {
  24.                                 func4();
  25.                         }
  26.                         else{
  27.                                 func5();
  28.                         }
  29.                 }
  30.         }
  31. }
10. JROUD - 08 Ноября, 2009 - 15:02:42 - перейти к сообщению
count ($_GET) вернёт вам количество переданных аргументов, а дальше как ваша фантазия вам подскажет.
11. genialno - 08 Ноября, 2009 - 15:42:58 - перейти к сообщению
JROUD пишет:
count ($_GET) вернёт вам количество переданных аргументов, а дальше как ваша фантазия вам подскажет.


Пока что не подсказывает. Пусть я знаю, количество переданных аргументов. Может, оно и поможет в некторох случаях. ) Вроде как понимаю, как применить.

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

1.1)index.php?id=AAA&brand=BBB&model=CCC
1.2)index.php?id=AAA&param1=BBB&param2=CCC


2.1)index.php?id=AAA&agrg=EEE
2.2)index.php?id=AAA&mmm=EEE
12. JROUD - 08 Ноября, 2009 - 15:50:26 - перейти к сообщению
А ваша программа разве сама себе придумывает переменные? Если нет, то какая проблема учесть наличие или отсутствие их значений, и зачем тогда что-то считать?
13. valenok - 09 Ноября, 2009 - 10:09:55 - перейти к сообщению
А с чего вы взяличто кто-то так куда-то передает параметры, в каких таких проектах ?
И проверять стоит с большего к меньшему.

if(a && b && c)
elseif( a && b )
elseif( a )

Добавь 15ый параметр mode и добавь в код switch в зависимости от mode вызывающий ту или иную функцию.

Не существует такого справочника и статей о том как решить единичную проблему возникающую только у тебя. Такие проблемы решаются на примере конкретной задачи.
14. JustUserR - 09 Ноября, 2009 - 10:42:17 - перейти к сообщению
genialno Можно же обычным циклом foreach пройтись про массиву $_REQUEST и получить все переданные переменные - а дальше с ними уже что угодно делать

 

Powered by ExBB FM 1.0 RC1