Реклама на сайте Advertise with us

Требуется помощь со скриптом

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 13.01.03
Сообщения: 6109
Рейтинг: 1962

Ссылка на сообщениеДобавлено: 21/11/07 в 16:28       Ответить с цитатойцитата 

Помогите ламеру плиз 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

Заранее благодарен!

0
 



С нами с 17.05.05
Сообщения: 27
Рейтинг: 28

Ссылка на сообщениеДобавлено: 21/11/07 в 16:58       Ответить с цитатойцитата 

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 раз

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 21/11/07 в 16:59       Ответить с цитатойцитата 

Код:
c.ref_param_id=ЗНАЧЕНИЕ1

заменить на
Цитата:
"c.ref_param_id='".intval(trim($_POST['form_variable']))."'"

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

5
 



С нами с 13.01.03
Сообщения: 6109
Рейтинг: 1962

Ссылка на сообщениеДобавлено: 21/11/07 в 17:06       Ответить с цитатойцитата 

Бррр....
Большое спасибо! Но боюсь вы переоценили мои способности icon_smile.gif
Мне бы целиком код, конечный вариант так сказать, а то я еще часа 3 потрачу на дебаггинг... icon_sad.gif

0
 



С нами с 13.01.03
Сообщения: 6109
Рейтинг: 1962

Ссылка на сообщениеДобавлено: 21/11/07 в 19:36       Ответить с цитатойцитата 

Все. Разобрался. Как и предсказывал - почти 3 часа smail101.gif

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

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »