M>>http://getfirebug.com/
Z>Спасибо попробую. А то я столько программ перепробовала с якобы возможностью дебугить. А дебуг еще и не всегда запускается на них. А на некоторых вообще не запускается. PHPEd, например, иногда запускает. А phpDesigner нет. Правда, может я чего-то не так делаю
Firebug позволяет дебагить Javascript на клиенте, а не РНР. Но инструент мега полезные
M>>Ну, это не методом научного тыка. Генерируется же там
Правда, тут надо будет код дописать, чтобы в $sFilter не попадал последний OR
Z>А вот с этого места можно поподробнее? Ну не программер я
У нас идет склейка нескольких значений в цикле в стиле
фильтр = фильтр + новое значение + OR
Естетсвенно, что в конце получится, что фильтр выглядит как-то так:
val1 OR val2 OR val3 OR
Потому можно сделать так:
$sFilter=''; // if-else нам не нужно. достаточно просто if'а
if (isset($_GET['idobj'])) // можно добавить && is_array($_GET['idobj']), если паранойя
{
foreach($_REQUEST['idobj'] as $objid)
{
if(is_numeric($objid))
$sFilter .= "zag_objects.idobj = $idobj OR ";
}
}
$sFilter .= ' zag_objects.idobj = 0';
Таким образом фильтр будет выглядеть в стиле:
zag_objects.idobj = 1 OR
zag_objects.idobj = 2 OR
zag_objects.idobj = 3 OR
zag_objects.idobj = 0
так как обычно ID не равно нулю

то нестрашно
M>>>>на клиенте ничего не надо собирать — это прямой путь к SQL Injection
Z>>>У меня защита стоит.
M>>Какая?
Z>Простая. Запрет на ввод любых символов кроме smallinteger в фильтр. Везде идет проверка is_numeric
Ну, в исходном сообщении просто этого не была, а фильтра напрямую формировался на клиенте