С нами с 13.01.03
Сообщения: 6109
Рейтинг: 1962
|
Добавлено: 21/11/07 в 16:28 |
Помогите ламеру плиз Башку уже сломал...
Имеем вот такой скрипт:
Код: | 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
Заранее благодарен!
|
|
|
|
С нами с 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 раз
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 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 |
Бррр....
Большое спасибо! Но боюсь вы переоценили мои способности
Мне бы целиком код, конечный вариант так сказать, а то я еще часа 3 потрачу на дебаггинг...
|
|
|
|
С нами с 13.01.03
Сообщения: 6109
Рейтинг: 1962
|
Добавлено: 21/11/07 в 19:36 |
Все. Разобрался. Как и предсказывал - почти 3 часа
Спасибо за наводки!
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |