Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск
 
 автор: Амбер   (30.08.2010 в 00:40)   письмо автору
 
 

Здравствуйте!

подскажите, а как мне вырезать обратный слешь? То что ниже не работает

preg_replace('#(\\)*#i', '', $search);


В общем задача следующая. Делаю поиск, и если в тексте встречается обратный слеш, то запрос валится. Не помогает и $search = mysql_escape_string($search); А в тексте, я думаю, могут встречаться и обратные слеши(текст ищется в базе mysql), но не как не insert...

а еще с этими друзьями надо разобраться и какие еще проверки делать?

$search = preg_replace('#(UPDATE)*#i', '', $search);
$search = preg_replace('#(DELETE)*#i', '', $search);



в общем подскажите кто чем)

спасибо

  Ответить  
 
 автор: Гавриленко Дмитрий   (30.08.2010 в 08:50)   письмо автору
 
   для: Амбер   (30.08.2010 в 00:40)
 

preg_replace('#^(\\)*$#i', '', $search); попробуй так.

  Ответить  
 
 автор: Trianon   (30.08.2010 в 10:17)   письмо автору
 
   для: Гавриленко Дмитрий   (30.08.2010 в 08:50)
 

и что эта конструкция будет делать?
проверить Вы её пробовали?

  Ответить  
 
 автор: Trianon   (30.08.2010 в 10:16)   письмо автору
 
   для: Амбер   (30.08.2010 в 00:40)
 

а зачем?

чтобы человек слово update поискать не смог?

  Ответить  
 
 автор: Амбер   (30.08.2010 в 18:06)   письмо автору
 
   для: Trianon   (30.08.2010 в 10:16)
 

и как же мне поступить?, достаточно mysql_escape_real_string ?

  Ответить  
 
 автор: heed   (30.08.2010 в 18:42)   письмо автору
 
   для: Амбер   (30.08.2010 в 18:06)
 

поиск при помощи LIKE, RLIKE или MATCH ?

  Ответить  
 
 автор: deimand   (30.08.2010 в 19:03)   письмо автору
 
   для: heed   (30.08.2010 в 18:42)
 

видимо он переживает за sql инъекцию ))))))))

  Ответить  
 
 автор: Амбер   (30.08.2010 в 19:11)   письмо автору
 
   для: heed   (30.08.2010 в 18:42)
 

Верно насчет функций,

SELECT system_catalog_position.id_position AS id_position, system_catalog_position.id_catalog 
AS id_catalog, system_catalog_paragraph.name AS name, 'art' AS link FROM system_catalog_paragraph, 
system_catalog_position WHERE (system_catalog_paragraph.name RLIKE 'поиск') AND 
system_catalog_position.hide = 'show' AND system_catalog_paragraph.hide = 'show' AND 
system_catalog_position.id_position = system_catalog_paragraph.id_position GROUP BY 
system_catalog_position.id_position ORDER BY name LIMIT 0, 10



переживаю насчет инъекций, а кто не переживает, того уже и нет в живых))

  Ответить  
 
 автор: heed   (30.08.2010 в 23:10)   письмо автору
 
   для: Амбер   (30.08.2010 в 19:11)
 

>paragraph.name RLIKE 'поиск'
я так понял вместо 'поиск' данные отправленные пользователями?

>и если в тексте встречается обратный слеш
лучше не разрешать пользователям вводить свои регулярные выражения в запрос :)
пропускайте только например пробелы буквы цифры и _

и можно будет даже не прибегать ко всяким preg_quote() и escape

  Ответить  
 
 автор: Амбер   (01.09.2010 в 00:11)   письмо автору
 
   для: heed   (30.08.2010 в 23:10)
 

"я так понял вместо 'поиск' данные отправленные пользователями?" - Верно

"пропускайте только например пробелы буквы цифры и _" если мы будем использовать это - то ссузим возможности поиска, с другой стороны зачем давать юзверям искать что то кроме существительных)

В общем вот, что я состряпал

if (strlen($_GET['name']) > $max_search_len) $error .= '<div class=\"main_txt\">Поисковая фраза слишком длинна. Постарайтесь ее ограничить до '.$max_search_len.' символов</div>';
        if (strlen($_GET['name']) < $min_search_len) $error .= '<div class=\"main_txt\">Поисковая фраза слишком коротка. Попробуйте ее увеличить до '.$min_search_len.' символов</div>'; 
            
        $search = substr($_GET['name'], 0, 64);    
        $search = addCslashes($search, '%_');
        $search = addCslashes($search, '%+');
        $search = addCslashes($search, '%%');
        $search = mysql_real_escape_string($search);
        $search = trim($search);

  Ответить  
 
 автор: heed   (01.09.2010 в 15:57)   письмо автору
 
   для: Амбер   (01.09.2010 в 00:11)
 

>$search = addCslashes($search, '%_');
        $search = addCslashes($search, '%+');
        $search = addCslashes($search, '%%');

больше похоже на обработку для LIKE

для RLIKE подойдёт preg_quote() + mysql_escape_string()
mysql> SELECT ".." RLIKE "\\.\\."
    -> ;
+-----------------------+
| ".." RLIKE "\\.\\." |
+-----------------------+
|                     1 |
+-----------------------+
1 row in set (0.00 sec)

mysql> SELECT ".." RLIKE "\\\\.\\\\.";
+-------------------------+
| ".." RLIKE "\\\\.\\\\." |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)
eq preg_match('#\.\.#', '..')
плюс интерпритация php слэшей в строках

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования