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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вопрос про разбор ссылки и if

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
genialno
Отправлено: 25 Октября, 2009 - 21:31:41
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Пусть есть две ссылки
/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


Спасибо.
 
 Top
keysi_
Отправлено: 25 Октября, 2009 - 21:47:09
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2009  


Помог: 1 раз(а)




Вопрос не очень ясен. Но отвечу как понял.
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, но разница не значительно.

(Отредактировано автором: 25 Октября, 2009 - 21:51:07)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Октября, 2009 - 22:17:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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 проверяют на валидность, а обрабатывает СУБД.


-----
PostgreSQL DBA
 
 Top
genialno
Отправлено: 25 Октября, 2009 - 22:42:35
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




keysi_спасибо, но не получилось таким способом.

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

А можно про второй вопрос подробнее.
Т.е.
либо ссылочек каких на эту тему, либо книжку.
Или сами поведайте.
 
 Top
keysi_
Отправлено: 26 Октября, 2009 - 00:16:53
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2009  


Помог: 1 раз(а)




Как ни странно, но лучшая книжка на эту тему - это стандартный справочник по PHP и конкретная задача. Еще не плохо под рукой иметь какой нибудь сборник простых готовых скриптов, на первое время, чтобы контролировать себя, посмотрев как это делают другие.
Из книжек, есть неплохая книга - Лаура Томпсон и Люк Веллинг PHP и MySQL. Но все же самая лучшее - это собственный опыт и, повторюсь, справочник под рукой.
 
 Top
JustUserR
Отправлено: 26 Октября, 2009 - 10:52:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




genialno Бесплатные книги по программированию - см подпись


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
genialno
Отправлено: 26 Октября, 2009 - 22:09:41
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




JustUserR по моему, ответ не по теме. Я не прошу сайт с книгами для скачивания.
Это как попросить совета по выбору машины, а дадут ссылку на автокаталог.

Что-то конкретное хотелось бы. По ответу на второй вопрос. Ссылочки, как сами в своих проектах реализовываете. Вот.
 
 Top
JustUserR
Отправлено: 27 Октября, 2009 - 18:00:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




genialno Вопервых выше зашел разговор о книгах и поэтому я счел нужным указать где из можно раздобыть (Вы думаете я этот сайт в подпись добавил ради рекламы - нет! Просто многие интересовали где можно взять бесплатно книги)
Вовторых зачем описывать встроенные средства базы данных здесь если все это уже было сто раз написано авторами - хотя бы вот это http://progbook[dot]ru/2008/08/16/ph[dot][dot][dot]vatelja-tim[dot]html
Да и что касается второго вопроса в общем то вы можете делать широкий набор условий в where и где надо использовать вложенные запросы чтобы извлечь одни данные по другим

(Отредактировано автором: 27 Октября, 2009 - 18:08:07)



-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
genialno
Отправлено: 08 Ноября, 2009 - 01:28:35
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Вот, допустим есть на сайте ссылки.
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. }

(Отредактировано автором: 08 Ноября, 2009 - 16:19:01)

 
 Top
JROUD
Отправлено: 08 Ноября, 2009 - 15:02:42
Post Id


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




count ($_GET) вернёт вам количество переданных аргументов, а дальше как ваша фантазия вам подскажет.
 
 Top
genialno
Отправлено: 08 Ноября, 2009 - 15:42:58
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




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
 
 Top
JROUD
Отправлено: 08 Ноября, 2009 - 15:50:26
Post Id


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




А ваша программа разве сама себе придумывает переменные? Если нет, то какая проблема учесть наличие или отсутствие их значений, и зачем тогда что-то считать?

(Отредактировано автором: 08 Ноября, 2009 - 15:51:44)

 
 Top
valenok Модератор
Отправлено: 09 Ноября, 2009 - 10:09:55
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




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

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

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

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


-----
Truly yours, Sasha.
 
My status
 Top
JustUserR
Отправлено: 09 Ноября, 2009 - 10:42:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




genialno Можно же обычным циклом foreach пройтись про массиву $_REQUEST и получить все переданные переменные - а дальше с ними уже что угодно делать


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB