Я конечно же обрабатываю входящие данные
(int)'ом и
mysql_real_escape_string'oм - тут проблемы не вижу. Дело в том, что у меня сайт на основе
twin'овского движка. Там все
$_GET параметры инициализируются тернарным оператором и заносятся в одноименные
$GET параметры. То есть
isset тут не поможет -
$GET параметр в любом случае существует. Но, например, если кто нибудь корявыми ручками сам сотрет из строки браузера
$_GET['id'] параметр, то соответственно
$GET['id'] окажется пустым, а это черевато ошибками.
По этому я и проверяю перед выполнением скрипта, все ли
$GET не являются пустыми. Отсюда и не эстетичная сопля из из нескольких
!empty. Незнаю, может есть решение поизящнее, но я его пока не вижу.
Еще такой случай, например, чтение статьи номер один:
браузерная строка -
host?page=post&id=1перед началом проверяю:
if($GET['post'] == post && !empty($GET['id']))
...
В принципе все просто, но если я хочу добавить функциональности в скрипт, например, редактировать статью номер один:
браузерная строка -
host?page=post&action=edit&id=1По идее, буду проверять так:
if($GET['post'] == 'post' && $GET['action'] == 'edit' && !empty($GET['id']))
...
Но тогда под эту браузерную строчку подходит и предидущая проверка, перед выполнением простого чтения статьи. Значит для простого чтения, проверку надо менять. Предположительно на :
if($GET['post'] == 'post' && empty($GET['action']) && !empty($GET['id']))
...
Система уже усложнилась, а если функционала будет больше? Все совсем запутается, проверки станут еще длиннее, условия превратятся в ребусы...
Как выходить из такого положения? Неплохим вариантом было бы реализация условия:
Если (есть ТОЛьКО $GET['post'] и $GET['id'] и $GET['id'] не пустой)
- но так вроде бы не напишешь. Или формулировка все же есть? А может в таких случаях надо регулярку использовать?
Вообщем вопросов все больше ...