фильтрация $_GET

Тема в разделе "PHP", создана пользователем avgaz, 10 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. avgaz

    avgaz

    Регистр.:
    18 окт 2006
    Сообщения:
    188
    Симпатии:
    6
    Собственно вопрос как отфильтровать $_GET
    Пишу один скриптик вернее модуль к CMS нужно отфильтровать $_GET где её значение берется из адресной строки
    например index.php?xd=news&op=result_search_tag&ide=тестик
    далее в самом файле
    идет
    $tags = $_GET['ide'];
    и запрос в БД на поиск этого значения
    Код:
    $tags = $_GET['ide'];
            $query = $DB->query( "SELECT id, idcategoria, titolo, autore, data FROM news WHERE tags LIKE '%$tags%' AND validate = '1'");
    вот как отфильтровать правильно что бы не допустить SQL-инъекцией ?

    И ещё вопрос есть вывод и БД значений $tags
    Например по запросу выводит так
    как убрать запятые что из БД на экран вывелось без запятых?
     
  2. Lonely Wolf

    Lonely Wolf Прохожие

    Класс который ты юзаешь предусматривает функцию
    Код:
    $DB->safesql();
    для текстовых значений делай так:
    Код:
    $tags = $DB->safesql($_GET['ide']);
    для цифр достаточно так:
    Код:
    $tags = intval($_GET['ide']);
    :)
     
  3. Igor123

    Igor123 Постоялец

    Регистр.:
    14 июн 2008
    Сообщения:
    116
    Симпатии:
    13
    1)для начала определить какие именно входные данные будет получать твоя переменная
    посмотри об использовании функции mysql_escape_string
     
  4. Lonely Wolf

    Lonely Wolf Прохожие

    Я просто знаю что за класс он юзает, там как safesql() и выполняет эту роль :)
     
  5. avgaz

    avgaz

    Регистр.:
    18 окт 2006
    Сообщения:
    188
    Симпатии:
    6
    Нет при $tags = $DB->safesql($_GET['ide']); выдает просто ошибку
    Для цифр я знаю что достаточно intval
    Значение переменой может быть любым хоть кирлица хоть цифры и тд
    Это для поиска тегов
    пока что вот так работает только
    $tags = addslashes($_GET['ide']);
    но если включен get_magic_quotes_gpc() то тоже ошибка будет
    есть ещё какие ни будь способы?
     
  6. Lonely Wolf

    Lonely Wolf Прохожие

    Тогда советую добавить :)
    Код:
    function safesql( $source, $sql=true )
        {
            if ($sql) return mysql_real_escape_string ($source);
            else return mysql_escape_string($source);
        }
    Юзать просто
    $tags = safesql($_GET['ide'],true);
    слеширование не нужно.
     
  7. avgaz

    avgaz

    Регистр.:
    18 окт 2006
    Сообщения:
    188
    Симпатии:
    6
    Не такой вариант новой функции мне не подходит
    Что скажите вот на такой вариант
    Код:
    if (get_magic_quotes_gpc() == 1) {
            $tags = $_GET['ide'];
                }
                else {
                $tags = addslashes($_GET['ide']);
            };
    Вроде работает
     
  8. hidden_4003

    hidden_4003 Создатель

    Регистр.:
    17 авг 2007
    Сообщения:
    16
    Симпатии:
    1
    Краткий перевод addslashes() в некоторых случаях можно обойти и скормить ей кавычку, mysql_real_escape_string() в тех же ситуациях обойти нельзя.
     
  9. Lonely Wolf

    Lonely Wolf Прохожие

    avgaz, если ты такой умный сам всё знаешь, тогда чё ты у нас спрашиваешь? Я тебе дал готовый пример как делается фильтрация, но нет же, тебе такая не подходит, тогда делай как тебе подходит, а не посты тут набивай. Ппц я валяюсь горе кодеры.
     
  10. avgaz

    avgaz

    Регистр.:
    18 окт 2006
    Сообщения:
    188
    Симпатии:
    6
    Если бы был умным то не спрашивал.
    Есть ещё одна проблемка

    В модуле выводятся теги для новостей записанные в БД для каждой новости

    вот запрос на вывод тегов
    Код:
    SELECT tags FROM news WHERE validate = '1' ORDER BY `id`
    но Столкнулся с такой проблемой что слова склеиваются
    например одна новость имеет такие теги "Тег1 тег2 тег3"
    другая новость "Тег4 тег5 тег6"
    и при выводе они склеиваются и выглядит так "Тег1 тег2 тег3Тег4 тег5 тег6" как этого избежать?
    И следующий вопрос например теги записаны через запятую как при выводе убрать её?
     
Статус темы:
Закрыта.