Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Требуется помощь со скриптом
цитата
21/11/07 в 16:28
 Man
Помогите ламеру плиз icon_smile.gif Башку уже сломал...
Имеем вот такой скрипт:

Код:
bla-bla

$parameters1=$db->Select("SELECT c.id,c.txtid,c.name,c.field1,c.field2,c.field3,s.id AS param_id,s.name AS section FROM cats c INNER JOIN subcats s ON c.ref_param_id=s.id WHERE c.ref_param_id=ЗНАЧЕНИЕ1 AND c.id=ЗНАЧЕНИЕ2 ORDER BY s.pos,c.name");

for (reset($parameters1); list($idx,$category)=each($parameters1);)
{
   $parameters1[$idx]['url']=getCategoryURL($category['txtid'],false);
}

$parameters2=$db->Select("SELECT id,name FROM cats WHERE id=ЗНАЧЕНИЕ1 ORDER BY pos,name");

bla-bla

Нужно сделать так чтобы:
а) ЗНАЧЕНИЕ1 и ЗНАЧЕНИЕ2 это числа, отдаются этому скрипту через POST, т.е. тут мы их получаем через $_REQUEST
б) ЗНАЧЕНИЕ1 - обязательный параметр, ЗНАЧЕНИЕ2 - не обязательный т.е. может не передаваться
в) Собсно главный затык у меня вышел на том как сделать так чтобы в случае если в качестве ЗНАЧЕНИЕ1 или ЗНАЧЕНИЕ2 посылается всякий мусор (текст, попытки левых запросов), а также в случае того если оба значения = NULL не вываливалась ошибка, а например отдавалась 404

Заранее благодарен!
цитата
21/11/07 в 16:58
 Anarki
1.
Код:

$ЗНАЧЕНИЕ1 = (int)$_REQUEST['ЗНАЧЕНИЕ1']);
$ЗНАЧЕНИЕ2 = (int)$_REQUEST['ЗНАЧЕНИЕ2']);

Будут всегда числа, но лучше такие данные обрабатывать при подстановке в запрос(ескейпить, экранировать, квотить см. mysql_real_escape_string) и обрамлять их одинарными кавычками.
(тогда задача 3 отпадет по ненадобностью)
2. Чтобы сделать ЗНАЧЕНИЕ2 необязательным в запросе нужно написать простой конструктор запросов в данном случае будет что-то вида:
Код:

$parameters1=$db->Select("SELECT c.id,c.txtid,c.name,c.field1,c.field2,c.field3,s.id AS param_id,s.name AS section FROM cats c INNER JOIN subcats s ON c.ref_param_id=s.id WHERE c.ref_param_id=ЗНАЧЕНИЕ1".(isset($_REQUEST['ЗНАЧЕНИЕ2']) ?  " AND c.id=".$_REQUEST['ЗНАЧЕНИЕ2'] : "")." ORDER BY s.pos,c.name");


3. Проверять на isset($_REQUEST['ЗНАЧЕНИЕ1']) или на что тебе там нужно(если нужны только числа, то is_numeric($_REQUEST['ЗНАЧЕНИЕ1']) и писать
Код:
header("HTTP/1.0 404 Not Found");
exit();

Если используется своя 404 ошибка, то для IE нужно отдать 512 байт, чтобы он не показывал встроенную.
P.S. код dirty ибо не было времени на проверку, но думаю идеи уловил

Последний раз редактировалось: Anarki (21/11/07 в 17:00), всего редактировалось 1 раз
цитата
21/11/07 в 16:59
 Stek
Код:
c.ref_param_id=ЗНАЧЕНИЕ1

заменить на
Цитата:
"c.ref_param_id='".intval(trim($_POST['form_variable']))."'"
цитата
21/11/07 в 17:06
 Man
Бррр....
Большое спасибо! Но боюсь вы переоценили мои способности icon_smile.gif
Мне бы целиком код, конечный вариант так сказать, а то я еще часа 3 потрачу на дебаггинг... icon_sad.gif
цитата
21/11/07 в 19:36
 Man
Все. Разобрался. Как и предсказывал - почти 3 часа smail101.gif

Спасибо за наводки!


Эта страница в полной версии