2012-02-26 4 views
0

Цель: Я хотел бы сохранить определенные слова в таблице базы данных в качестве запрещенных слов, которые не должны использоваться в сообщениях.Приложение для запрещенных слов, использующее таблицу базы данных, часть 2

Я спросил, как применить приложение с запрещенными словами, используя базу данных Banned words application using database table и спасибо за все ответы.

Но я имею некоторые изменения хотели бы применить, но первый здесь новый код

1- Создана простая форма для ввода слов, чтобы запретить (ban.php)

<form name="form" method="post" action="add.php"> 
<input type="text" name="bad" id="bad"> 
<input type="submit" name="submit" id="submit" size="12" value="submit"> 
</form> 

2 - Теперь разместим его через дб (add.php)

<?PHP 
require_once("config.php"); // db conn 
$bad = $_POST['bad']; 
$bad = mysql_real_escape_string($bad); 

$sql= "insert into my_table set bad='$bad'"; 
mysql_query($sql, $conn) or die(mysql_error()); 

echo "Done bad word added"; 
?> 

3- Пример (1) ~ благодаря Robjong для предыдущей помощи ~

<?PHP 
require_once("config.php"); // db conn 

$test = "ugly"; // Example 

$qry = "SELECT * FROM `my_table` WHERE bad='{$test}'"; // select by value 
$result=mysql_query($qry); 

if(mysql_num_rows($result)){ // we have a row with the 'bad' word 
echo "banned"; 
}else{ 
echo "passed"; 
} 
?> 

Теперь мой вопрос Пример (2)

Что делать, если я хочу сказать, что если какой-либо из сохраненных слов в my_table находится в пределах $test затем дать echo "banned";

Так же, как это

<?PHP 
require_once("config.php"); // db conn 

$test = "hello world this is sentence with ugly word"; // 'ugly' word found 


if(any stored words in my_table found within $test){ 
echo "banned"; 
}else{ 
echo "passed"; 
} 
?> 

так, как сделать пример (2)?! это очень помогло бы мне.

ответ

0

Я думаю, что это будет быстрее, чтобы вытащить все из запрещенных слов из таблицы и сделать обработка в PHP - а не обработка в MySQL. Для этого сначала выберете каждую из строк из таблицы запрещенных слов и поместите их в массив.

После того, как вы это сделали, вы можете использовать array_intersect, чтобы узнать, находится ли какое-либо из слов внутри строки, например.

//ASSUMES AN ARRAY OF BANNED WORDS $banned_words AND A STRING TO CHECK $str_check 

if(count(array_intersect(array_map('strtolower', explode(' ', $str_check)), $banned_words) > 0) { 
    echo "banned"; 
} 
else { 
    echo "not banned"; 
} 
0

How do you implement a good profanity filter?

Ответы такой же вопрос. Я бы избежал использования базы данных и, возможно, включил файл со значениями. В противном случае вы можете создать регулярное выражение из всех таблиц базы данных.

Другой вариант - проверять каждое слово вручную по базе данных или динамически генерировать запрос, ища каждое отдельное слово.

0

Наивное решение было бы перебрать слова в $ тесте и проверить каждое слово, как в примере 1.

Смежные вопросы