Как правильно проверять переменную из POST

usascha

Новичок
Как правильно проверять переменную из POST

Всем здрасте.

Прошу подсказать как лучше исправить следующий запрос:

[SQL]
$stickers = "SELECT *
FROM subscriber s, publication p, regions r
LEFT JOIN list l ON l.subscriber_id = s.id
WHERE ".$active."
AND IF('".isset($_REQUEST['izdanie'])."', l.publication_id = '".$_REQUEST['izdanie']."', l.subscriber_id = '".$_REQUEST['subscriber_id']."')
AND s.oblast = r.reg_code
GROUP BY s.id
ORDER BY s.subscriber_name ASC";
[/SQL]

Значения в $_REQUEST`ы приходят из формы, где
первое $_REQUEST['izdanie'] (когда оно есть) в запросе ставиться = 1,
а второе должно быть от 1 до 5 .

Здесь возник вопрос. Если убрать isset и оставить просто $_REQUEST['izdanie'] во втором случае, то выдается сообщение: Notice: Undefined index: izdanie in ... on line 119.
Если же оставить isset, то его значение всегда преобразуется в 1. А оно должно, напомню, равняться чему-то из 1 до 5.

Как правильно проверять переменную в этом случае?
 

Skubent

Новичок
Почитать про то, как работает и что возвращает isset().
Возможно, потребуется почитать про intval().
 

bkonst

.. хочется странного?...
Запрос выкинуть на помойку (хотя бы потому, что передаваемые пользователем данные не проверяются). Условие проверять в PHP, в зависимости его истинности делать один из двух возможных запросов.
 

Wicked

Новичок
запрос выкидывать не надо.

я бы сделал так:

1) я бы в запросе заменил "if (a, b, c) and ..." на "((a && b) || (!a && c)) and ... ". При такой конструкции есть шансы, что будут использоваться индексы (если таковые есть :)).

2) $_REQUEST пишется большими буквами.

3) последовал бы совету Skubent'а
 

bkonst

.. хочется странного?...
Зачем логику приложения совать на уровень базы данных?
 

Фанат

oncle terrible
Команда форума
usascha
зачем ты подставляешь в запрос результат функции isset?
тебе надо подставлять в запрос переменную, а не информацию о том, есть она, или нет.
 

usascha

Новичок
Wicked,
1. попробую переделать, но при объеме базы 1500 записей думаю, что наличие индексов не обязательно. А они ведь есть!

2. $_REQUEST у меня всегда написан большими буквами, также как и POST и GET. При публикации сообщения регистр изменился.

Skubent,
3. буду читать. обязательно.


Фанат, таково было временное решение. Увидев как работае скрипт, я понял что isset возвращает 1, если $_REQUEST['izdanie'] чему-то равен и 0, если он не определен.


Пока писал, прочел все рекомендации. Решение примитивно до безобразия: надо было использовать intval().

Всем спасибо за помощь...


bkonst, по правилам форума постить тонны кода нельзя. Я, как честный гражданин, разместил только ту часть, где проблема. А как и кем проверяется код это не предмет данного обсуждения.
Мой запрос варьируется всего в одной строке. И мне это удобно.
 

Фанат

oncle terrible
Команда форума
Решение примитивно до безобразия: надо было использовать intval().
не смеши мои тапочки
intval НИКАК не решает проблему ошибки Notice: Undefined index: izdanie in ... on line 119.
 

usascha

Новичок
Фанат, не собираюсь смешить ни ваши тапочки, ни какие-то другие части гардероба.

Проблема решается, но, правда, частично. Рано радовался.
Пришлось выше запроса сделать так:
if (!isset($_REQUEST['izdanie'])) $_REQUEST['izdanie'] ="";
 

bkonst

.. хочется странного?...
А как и кем проверяется код это не предмет данного обсуждения.
Если бы данные проверялись на допустимые значения - такой проблемы не возникло бы вообще. Так что проверки напрямую связаны с данным обсуждением.
 

Фанат

oncle terrible
Команда форума
кстати, солидарен с bkonst
если бы проверка действительно была, то и ошибка выскакивала во время проверки, а не во время составления запроса.

по-моему, usascha, ты заврался совсем.
не могу сказать, что это как-то нас задевает, но просто враньё лишает смысла твоё общение на форуме.
 

Positive

Новичок
Ага, у меня был знакомый, который думал что проверка яваскриптом в форме при отправке это более чем достаточно ("да ведь юзеры не настолько тупые, зачем им в поле "сколько" вбивать буквы???")
Уволили его...
 
Сверху