Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Функция антимата. Не работает.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
n1k86
Отправлено: 25 Октября, 2011 - 18:05:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Привет всем! Короче, вот такая проблема.

Я имею таблицу antimat с 2 столбиками - id и mat. В ячейке mat более 200 разных матов Голливудская улыбка

PHP:
скопировать код в буфер обмена
  1.  
  2. //Функция анти-мата.
  3. function antimat($mater)
  4. {
  5. $one = mysql_query("SELECT mat FROM antimat");
  6.  
  7. while($preg = mysql_fetch_assoc($one))
  8. {
  9.         $mat = $preg['mat'];
  10. }
  11. $mater = str_replace($mat, '[Цензура]', $mater);
  12. return $mater;
  13. }
  14.  


Вот такая функция у меня получилась. Вижу, что я где-то накосячил, но не могу понять где.
Использую функцию следующим методом:

PHP:
скопировать код в буфер обмена
  1.  
  2. $nick = !empty($_POST['nick']) ? antimat(noxss(nosql($_POST['nick']))) : NULL;
  3. $message = !empty($_POST['message']) ? antimat(noxss(nosql($_POST['message']))) : NULL;
  4.  


Само собой функции noxss и nosql работают нормально и существуют.

Ребят, ткните носом новичка, где я ошибся.
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Октября, 2011 - 18:07:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




$mat[] = $preg['mat'];
 
 Top
n1k86
Отправлено: 25 Октября, 2011 - 18:08:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




исправил...но всё равно не фильтрует...
 
 Top
Itan
Отправлено: 25 Октября, 2011 - 18:09:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Заменять может в цикле надо?
 
 Top
n1k86
Отправлено: 25 Октября, 2011 - 18:12:16
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




занёс замену в фильтр. фильтрует, НО ТОЛЬКО 1 МАТ. ТОЛЬКО 1. Т.е. 1 мат заменяет, а остальные оставляет как было....
(Добавление)
точнее занёс замену в цикл...точнее фильрует только вообще 1 слово...хм...может чёто занёс косячно...
(Добавление)
так...когда заносил - получились пробелы в бд...из-за этого и не фильтрует...)))) Спасибо ребят, пойду пробелы искоренять)))
 
 Top
Stasnislav
Отправлено: 25 Октября, 2011 - 18:18:13
Post Id



Гость


Покинул форум
Сообщений всего: 109
Дата рег-ции: Апр. 2011  


Помог: 4 раз(а)




n1k86 пишет:
пойду пробелы искоренять

trim тебе в помощь..


-----
Программисты на работе общаются двумя фразами: «непонятно» и «вроде работает».
 
 Top
n1k86
Отправлено: 25 Октября, 2011 - 18:28:06
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Ребят, у меня же в таблице маты все записаны маленькими буквами. Как сделать замену не зависимо от регистра?
 
 Top
Мелкий Супермодератор
Отправлено: 25 Октября, 2011 - 19:08:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)






-----
PostgreSQL DBA
 
 Top
n1k86
Отправлено: 25 Октября, 2011 - 19:18:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. function antimat($mater)
  3. {
  4. $one = mysql_query("SELECT mat FROM antimat");
  5.  
  6. while($preg = mysql_fetch_assoc($one))
  7. {
  8.         $mater = str_ireplace($preg['mat'], '[Цензура]', $mater);
  9. }
  10. return $mater;
  11. }
  12.  


так? Если да, то всё равно заменяет только маты написанные в нижнем регистре...
 
 Top
n1k86
Отправлено: 28 Октября, 2011 - 09:47:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




прочитал, что str_ireplace работает только в koi8_r, а у меня UTF-8. Ребят, подскажите пожалуйста, как решить проблему...
 
 Top
DeepVarvar Супермодератор
Отправлено: 28 Октября, 2011 - 10:19:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




preg-replace он может, почитайте.
 
 Top
n1k86
Отправлено: 28 Октября, 2011 - 12:24:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 160
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Попробовал.... вот что получилось, но не работает.... думаю, что я закосячил))))

PHP:
скопировать код в буфер обмена
  1.  
  2. //Функция анти-мата.
  3. function antimat($mater)
  4. {
  5. $one mysql_fetch_assoc(mysql_query("SELECT mat FROM antimat"));
  6. $cens = "[Цензура]";
  7. foreach($one)
  8. {
  9.         $nomat = preg_replace($one, $cens, $mater);
  10. }
  11. return $nomat;
  12. }
  13.  


Что я делаю не правильно?
(Добавление)
так, ладно, решил отказаться от анти-мата, потому что всё зависит от людей... и если будут знать, что стоит антимат - будут его обходить всячски...решил бросить эту затею, т.к. смысла в этом нет.
 
 Top
LOSKAND
Отправлено: 20 Октября, 2013 - 05:05:03
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




а если что то вроде этого?
CODE (htmlphp):
скопировать код в буфер обмена
  1. //антимат
  2. $antm=mysql_query ("SELECT * FROM Antimat");
  3. while ($mat=mysql_fetch_array($antm)){
  4. $peopler=mysql_query ("SELECT * FROM userlistCFG");
  5. while ($glavsr=@mysql_fetch_array($peopler)){
  6. if($glavsr['level']>"3"){$msg=str_ireplace("$mat[mat]","$mat[mat]",$msg);}else{$msg=str_ireplace("$mat[mat]","$mat[zamena]",$msg);}
  7. }
  8. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB