Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вывод в зависимости от URL


Автор: клоп 18.10.2006, 13:19
Доброго дня!
На сайте есть раздел неких галерей. URL входа в галереи выглядит следующим образом:

http://www.site_name.ru?do=gallery
http://www.site_name.ru?do=gallery_1
http://www.site_name.ru?do=gallery_2
..........................................
..........................................
http://www.site_name.ru?do=gallery_N

Количество галерей в разделе не известно.
Не могу понять, почему не работает кусок кода  представленный ниже?
Суть его, определить что в URL есть кусок =gallery= и вывести соответствующее сообщение.

Код

<?
$url_do  = $_GET['do'];
$str = "gallery";
$pos = strpos($url_do, $str);
if ($pos === TRUE) { echo "Вы в разделе ГАЛЕРЕЙ";}
else {echo "Вы не в разделе ГАЛЕРЕЙ";}
?>

Автор: Burrr 18.10.2006, 13:36
Код

$url_do  = $_GET['do'];
$str = "gallery";
$pos = strpos($url_do, $str);
if (is_integer($pos)) { echo "Вы в разделе ГАЛЕРЕЙ";}
else {echo "Вы не в разделе ГАЛЕРЕЙ";}

Автор: Gold Dragon 18.10.2006, 13:55
по моему функция strpos возвращает позицию первого вхождения если находит или FALSE если не находит.

может так тогда
Код

if ($pos === FALSE) { echo "Вы не в разделе ГАЛЕРЕЙ";}
else {echo "Вы в разделе ГАЛЕРЕЙ";}

Автор: клоп 18.10.2006, 14:06
Burrr все заработало!!! СПАСИБО!!!
Правда не могу найти описание функции is_integer. На http://ru.php.net её нет.

Gold Dragon также СПАСИБО!!!, тож рабочая версия
Как то я и не подумал об этом.

Теперь не знаю что лучше и выбрать из предложенных вариантов.


Автор: Opik 18.10.2006, 15:09
клоп, 
Gold Dragon, 
Burrr, 
А я бы проверял регуляркой, тем более ему все равно номер галереи вытаскивать нужно.

Автор: Opik 18.10.2006, 15:34
Например так:
Код

$url = 'gallery_1';
if(preg_match("/^gallery(_([0-9]+))?$/", $url, $tmp))
{
    print_r($tmp);
}
else
{
    die('no');
}

Автор: Nicholas_S 18.10.2006, 15:48
Зачем огород, попробуй так:

http://www.site_name.ru?do=gallery&ind=N

Код

  if (isset($_GET['gallery']))
  {
      // определяем номер галлереи
      $ind = isset($_GET['ind']) ? (int) $_GET['ind'] : 0;
      // ...
  }
  else
      // не галлерея...

Автор: Gold Dragon 18.10.2006, 17:40
абсолютно согласен с Nicholas_S, я так и делаю (или почти так)... 

хотя вопрос задан по другому smile  а вдруг так и недо..

Автор: Opik 18.10.2006, 17:45
Nicholas_S, 
Регуляркой огорода нет.
Ну и упрощение УРЛ smile)

Автор: Nicholas_S 18.10.2006, 18:00
Если задача состоит именно в том, чтобы распарсить URL только в таком виде и его изменение не допустимо - ничего не имею против решения от Opik, учитывая что операция будет выполняться 1 раз. smile Но зацикливаться на регулярках в каждом подобном случае не стоит, все-таки  "дорогая" операция.

Автор: клоп 19.10.2006, 07:42
Спасибо всем! Сделал как предложил Burrr, - не меняя сильно свой код, а добавив лишь is_integer (кстати, так и не нашел нигде описание этой функции, мож есть у кого?).

Номера галерей мне не нужно отслеживать, главное знать что юзер в разделе галерей , и если это так, то показать ему соответствующий кусок кода. Если нет то показывать баннер, приглашающий посетить его эти галереи (см. www.severstalbasket.ru).

URL без подчеркиваний:
Код

http://www.site_name.ru?do=gallery
http://www.site_name.ru?do=gallery_1
http://www.site_name.ru?do=gallery_2




Автор: RasierKlinge 19.10.2006, 15:44
Цитата(клоп @  19.10.2006,  07:42 Найти цитируемый пост)
 (кстати, так и не нашел нигде описание этой функции, мож есть у кого?).

http://ru.php.net/manual/ru/function.is-integer.php
 

Автор: клоп 19.10.2006, 17:49
RasierKlinge, - читали. 

is_integer
(PHP 3, PHP 4, PHP 5)

is_integer -- Alias of is_int()
Описание
This function is an alias of: is_int(). 


Автор: Nicholas_S 19.10.2006, 18:49
клоп, понятие рекурсии знакомо? is_integer() -> s_int() - см. is_int()   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)