[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: где стринг а где интегер?
MatrixGod
всем дарова!

и так, очередной вопрос... smile.gif

мой сайт весь на ЧПУ. то есть все ссылки вида mysite.ru/категория/подкатегория.
значение "подкатегория" может быть 2-х видов.
либо число от 1 и далее (потому что есть несколько страниц), либо текст вида "форум_программистов_пхп".

мне надо написать if который проверит это значение и если там число сделает одно, если текст - другое.

все дело в том что GET-переменные являются стрингом, даже если там число.

я попробовал сделать так:

if(settype($_GET[q], "integer") > 0) { }

settype($_GET[q], "integer") превращает строку в 0 а число оставляет числом.
но тогда значение $_GET[q], если это строка, онулируется.

как это реализовать нормально?



Спустя 3 часа, 13 минут, 59 секунд (10.03.2010 - 01:45) FatCat написал(а):
if( intval($_GET['q']) == $_GET['q'] )
{
// q - число
}


А кстати, если не число, а "имя файла" - у него же в конце обязано быть .html наверное?
Это тоже можно проверять:
if( substr($_GET['q'],-5) == ".html" )
{
// Последние 5 символов q - .html
}

Спустя 6 минут, 10 секунд (10.03.2010 - 01:51) FatCat написал(а):
Теперь перемешиваем, взбиваем омлет:
if( intval($_GET['q']) == $_GET['q'] )
{
// q - число
}
elseif( substr($_GET['q'],-5) == ".html" )
{
// Последние 5 символов q - .html
}
else
{
// Совсем фигню какую-то запросили
@header("HTTP/1.0 404 Not Found");
@header("HTTP/1.1 404 Not Found");
echo "Рисуем 404-ю";
exit();
}

Спустя 21 час, 2 минуты, 24 секунды (10.03.2010 - 22:54) catov написал(а):
Интересно что нам покажет
var_dump(intval($_GET['q']) == $_GET['q']);
smile.gif

Спустя 13 часов, 37 минут, 21 секунда (11.03.2010 - 12:31) MatrixGod написал(а):
что-то вы все загнули... зачем такие тяжелые функции писать?

я уже написал, и все очень просто!

if($text < 1) { }

если $text стринг то if дает этой переменной значение 0.
соответственно это меньше 1.

вот и все...

Спустя 2 часа, 14 минут, 52 секунды (11.03.2010 - 14:46) FatCat написал(а):
Цитата (MatrixGod @ 11.03.2010 - 13:31)
если $text стринг то if дает этой переменной значение 0.

Если $_GET['q'] имеет значение 127.0 что произойдет? wink.gif
Нет уж, если нужны цельночисленные значения, оптимально через intval...

Спустя 6 часов, 33 минуты, 33 секунды (11.03.2010 - 21:20) catov написал(а):
FatCat
if( intval($_GET['q']) == $_GET['q'] ) это условие будет true если $_GET['q']="форум_программистов_пхп"

Спустя 2 дня, 3 часа, 45 минут, 44 секунды (14.03.2010 - 01:05) Night User написал(а):
if ($_GET['q'] == (string)(int)$_GET['q'])
или
if ($_GET['q'] == (string)intval($_GET['q']))

так попробуйте
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.