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
Форумы портала PHP.SU :: Версия для печати :: Функция антимата. Не работает.
Форумы портала PHP.SU » » Работа с СУБД » Функция антимата. Не работает.

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

1. n1k86 - 25 Октября, 2011 - 18:05:17 - перейти к сообщению
Привет всем! Короче, вот такая проблема.

Я имею таблицу 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 работают нормально и существуют.

Ребят, ткните носом новичка, где я ошибся.
2. DeepVarvar - 25 Октября, 2011 - 18:07:16 - перейти к сообщению
$mat[] = $preg['mat'];
3. n1k86 - 25 Октября, 2011 - 18:08:56 - перейти к сообщению
исправил...но всё равно не фильтрует...
4. Itan - 25 Октября, 2011 - 18:09:51 - перейти к сообщению
Заменять может в цикле надо?
5. n1k86 - 25 Октября, 2011 - 18:12:16 - перейти к сообщению
занёс замену в фильтр. фильтрует, НО ТОЛЬКО 1 МАТ. ТОЛЬКО 1. Т.е. 1 мат заменяет, а остальные оставляет как было....
(Добавление)
точнее занёс замену в цикл...точнее фильрует только вообще 1 слово...хм...может чёто занёс косячно...
(Добавление)
так...когда заносил - получились пробелы в бд...из-за этого и не фильтрует...)))) Спасибо ребят, пойду пробелы искоренять)))
6. Stasnislav - 25 Октября, 2011 - 18:18:13 - перейти к сообщению
n1k86 пишет:
пойду пробелы искоренять

trim тебе в помощь..
7. n1k86 - 25 Октября, 2011 - 18:28:06 - перейти к сообщению
Ребят, у меня же в таблице маты все записаны маленькими буквами. Как сделать замену не зависимо от регистра?
8. Мелкий - 25 Октября, 2011 - 19:08:56 - перейти к сообщению
str_ireplace
9. n1k86 - 25 Октября, 2011 - 19:18:40 - перейти к сообщению
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.  


так? Если да, то всё равно заменяет только маты написанные в нижнем регистре...
10. n1k86 - 28 Октября, 2011 - 09:47:08 - перейти к сообщению
прочитал, что str_ireplace работает только в koi8_r, а у меня UTF-8. Ребят, подскажите пожалуйста, как решить проблему...
11. DeepVarvar - 28 Октября, 2011 - 10:19:20 - перейти к сообщению
preg-replace он может, почитайте.
12. n1k86 - 28 Октября, 2011 - 12:24:37 - перейти к сообщению
Попробовал.... вот что получилось, но не работает.... думаю, что я закосячил))))

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.  


Что я делаю не правильно?
(Добавление)
так, ладно, решил отказаться от анти-мата, потому что всё зависит от людей... и если будут знать, что стоит антимат - будут его обходить всячски...решил бросить эту затею, т.к. смысла в этом нет.
13. LOSKAND - 20 Октября, 2013 - 05:05:03 - перейти к сообщению
а если что то вроде этого?
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. }

 

Powered by ExBB FM 1.0 RC1