Как обрабатывать числовые параметры запроса?

peon

Lok'tar ogar
Ку!
Клиент запрашивает страницу, передавая параметр page, представляющий номер страницы.
Так как все параметры интерпретируются в качестве строки, я привожу их к целочисленному.
Проблема в том, что параметром может быть строка содержащая не числа, в результате чего будет приведена к нулю, то есть будет числом. Как проигнорировать такие параметры?
 

peon

Lok'tar ogar
Конечно можно проигнорировать страницу номер 0. И сделаем следующее:
Код:
if (!empty($_GET['page'])) {

        $page = (int) $_GET['page'];

        if ($page === 0) {
            $page = false;
        }
} else {
  $page = false;
}

if ( $page !== false) {
   echo show_page($page);
} else {
   echo show_404();
}
Но давай представим чисто гипотетически, что страница под номером 0 у нас существует. Как крутиться?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не понимаю нафига, но is_numeric()?
 

HraKK

Мудак
Команда форума
существует - показывать, зачем что-то еще мудрить?
 

peon

Lok'tar ogar
существует - показывать, зачем что-то еще мудрить?
Представь:

site.com/?page=qwerty
site.com/?page=xxxxxxx
site.com/?page=asdfghj
site.com/?page=godfegv
...

И все они ведут на страницу site.com/?page=0

Если яндекс пройдет по этим ссылка, то будет бред в поисковой выдаче.
 

HraKK

Мудак
Команда форума
Вы пытаетесь решить проблемы не теми средствами, которыми надо, на что я и намекал в своем посте. Эмди вон уже ответил.
 

artoodetoo

великий и ужасный
Чем запрос с неправильным номером страницы отличается от других неправильных адресов?
Статус 404 будет лучшим ответом. Либо редирект на дефолтовый адрес.
 

peon

Lok'tar ogar
Можно ли другим способом узнать, содержит ли строка только символы цифр?
 

artoodetoo

великий и ужасный
Да их до фига всяких способов. "Более лучший is_numeric" никак не поможет тебе решить что делать с неправильным адресом.
См. #12
 

hell0w0rd

Продвинутый новичок
Эм, поисковые системы ходят по ссылкам. Внутри сайта вы же не будете давать ссылки вида site.com/?page=qwerty, если они ведут на page=0? Значит и дублей в поиске не будет.
А вообще древний, простейший вариант:
if ((int)$a == $a){}else{throw HttpError(404);}
 

peon

Lok'tar ogar
Эм, поисковые системы ходят по ссылкам. Внутри сайта вы же не будете давать ссылки вида site.com/?page=qwerty, если они ведут на page=0? Значит и дублей в поиске не будет.
А вообще древний, простейший вариант:
if ((int)$a == $a){}else{throw HttpError(404);}
Спасибо! Интересный способ.
 

hell0w0rd

Продвинутый новичок
Вурдалак, как так не учитываю. Ясно, что человек хочет использовать id страницы из базы, там тип int.
$pageId = '1.0';
(int)$pageId; // 1
(int)$pageId == $pageId; // '1' === '1.0' - false
 
Сверху