Зловещий ноль в GET запросе!

12
R
На сайте с 25.08.2012
Offline
16
1074

Здравствуйте!

Столкнулся с такой проблемой. Мне надо сделать, чтобы если пользователь запросил site.ru/page/0 или site.ru/page/00000 (любое число нулей), ему бы возвращалась 404 ошибка. Но вот в чем проблема. 0 в гет запросе приравнивается к !$_GET, а на этот случай у меня выполняется другой код. Пробовал писать if($_GET['p']=='0'). Без толку. Но на том же хабре, это каким-то образом реализовано. Т.е. это возможно, но как?

Пожалуйста, помогите решить эту проблему, а то уже мозг сварился!

IL
На сайте с 20.04.2007
Offline
435
#1
rubodon:
!$_GET, а на этот случай у меня выполняется другой код.

видимо, нужно случай переписать.

if($_GET['p']==='') сработает только для пустого $_GET['p'] (?p=)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
H
На сайте с 09.10.2012
Offline
11
#2

Вообще, это довольно странно, потому что site.ru/page/ и site.ru/page/0 при нормальной реализации - это всегда разные страницы.

и $_GET['p'] == '0' должно корректно работать (кстати, причем тут GET, если вы разбираете адресную строку? )

Вероятно, ошибка где-то еще в логике.

fa2m
На сайте с 07.09.2011
Offline
23
#3
hedint:
Вкстати, причем тут GET, если вы разбираете адресную строку?

Почитайте про роуты, у ТС, видимо, они используются! (или ТС тупит, со всеми бывает)

---------- Добавлено 02.11.2012 в 00:30 ----------

rubodon, попробуйте так:

if ((int) $_GET['p'] == 0)


---------- Добавлено 02.11.2012 в 00:33 ----------

rubodon, если не работает, давайте сюда весь код
Встречи в Днепре /ru/forum/736064 (/ru/forum/736064) Беклинк за копейку. Удобный сервис анализа обратных ссылок. (http://backlink.page-weight.ru/)
bsyomov
На сайте с 25.01.2012
Offline
31
#4
!$_GET, а на этот случай у меня выполняется другой код.

Если это проверка, на то, что параметр p не установлен, то надо не так проверять. А !isset($_GET['p']), и всё встанет на свои места. =)

А ошибка в том, что !$_GET['p'] при p==0 будет истинным... Соответственно при такой проверке, проверять потом p на равенство 0 нет смысла, вы уже пошли выполнять какой-то другой код условием выше.

bay_ebook
На сайте с 28.05.2010
Offline
111
#5
rubodon:

Но вот в чем проблема. 0 в гет запросе приравнивается к !$_GET

Ну тут просто подучить php (конкретно - приведение типов)

rubodon:

Пробовал писать if($_GET['p']=='0').


if($_GET['p'] === 0 || $_GET['p'] === '0'){
// any code
}elseif(!$_GET['p']){ // OR $_GET['p'] === false
// any code 2
}elseif(!isset($_GET['p'])){
// any code 3
}else{
// default code
}
Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
R
На сайте с 25.08.2012
Offline
16
#6

Всем спасибо за ответы.

fa2m, if ((int) $_GET['p'] == 0) не помогло.

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

Вообщем отложу решение проблемы до лучших времен.

Еще раз всем спасибо.

---------- Добавлено 02.11.2012 в 02:47 ----------

bay_ebook, сейчас попробую

4arger
На сайте с 17.12.2008
Offline
95
#7

удалил. неправильно понял задачу. сори.

bsyomov
На сайте с 25.01.2012
Offline
31
#8

Так чего откладывать-то? =) Чуть выше указано в чем ошибка.

Кстати, если вам нужно проверять произвольное кол-во нулей, более одного, то это делается с помощью регулярного выражения:


if(preg_match('/0+/', $_GET['p'])==1)
4arger:
if ($p ==== '0') {

Что за новый оператор - ====? =)

И зачем вся эта конструкция, которая не поможет ничем топикстартеру?

R
На сайте с 25.08.2012
Offline
16
#9

У меня ни черта не работает )

Структура примерно такая:

if(get[p]==0) echo 'oshibka 404' // т.е. если есть гет[p] и он = 0 то 404

else {

if(!get[p]) echo 'glavnaya stranica'; // если в адресной строке вообще нет get[p], то грузим главную

}

bsyomov
На сайте с 25.01.2012
Offline
31
#10

А может у вас с rewrite что-то не так?

Попробуйте вывести для отладки print_r($_GET); и посмотрите, что там вообще содержится при том или ином запросе...

Вообще, конструкция должна быть примерно такой:


if(!isset($_GET['p'])) {
echo 'нет пути, покажу тут главную, наверно её просили...';
} elseif(preg_match('/0+/', $_GET['p'])==1) {
echo 'нули какие-то напихали - все в сад, ошибка 404, ничего не покажу!';
} else {
echo 'если бы я был рабочим скриптом, я бы что-то здесь сделал, например посмотрел бы а что там в за путь на самом деле...';
}
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий