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 » PHP » SQL и Архитектура БД » замена слов в текст

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

1. xhugo - 29 Апреля, 2011 - 15:37:57 - перейти к сообщению
например, есть бд со словами
1|2
haha|blabla
joker|hoker
Fatal|offfffff

и например,
вводим текст в textarea
и скрипт должен проверить каждое слово в тексте, на совпадение в поле 1, если нашло совпадение то должно заменить слово 1 на слово 2 в тексте.

как можно реализовать?
2. Symphony - 29 Апреля, 2011 - 15:41:10 - перейти к сообщению
Вытащить эти слова из бд плюс регулярные выражения или функция str_replace() думаю подойдет.
3. xhugo - 29 Апреля, 2011 - 15:44:39 - перейти к сообщению
вытащить это понятно.
нужно как то найти каждое слово из бд поля 1 в текст и если нашло заменить в текст слова на 2
4. Symphony - 29 Апреля, 2011 - 15:49:01 - перейти к сообщению
5. xhugo - 29 Апреля, 2011 - 16:53:10 - перейти к сообщению
функция замены известна.
проблема в том что я незнаю как проверить каждое слово в текст(рассказ какой то например) на совпадение в бд
6. DlTA - 29 Апреля, 2011 - 17:07:15 - перейти к сообщению
preg_match_all
"/([A-Za-zА-Яа-яёЁйЙ]+)/mi"
foreach()
{
// проверяем каждый результат (кроме нулевого))) вбазе
// тот что нашли заменили в исходной строке
}
7. xhugo - 30 Апреля, 2011 - 07:00:32 - перейти к сообщению
ок. делаю.

PHP:
скопировать код в буфер обмена
  1.  
  2. /*---*/
  3. echo '<form action="" method="post"><textarea cols=60 rows=10 name=zxc></textarea><br><button>ok</button></form>';
  4. if(isset($_POST['zxc']))
  5. {
  6. $t=mysql_real_escape_string($_POST['zxc']);
  7. preg_match_all('/([A-Za-zА-Яа-яёЁйЙ]+)/mi',$t,$proxy);  
  8.   foreach($proxy[0] as $s)  
  9.   {
  10.  $query = mysql_query("SELECT * FROM `test` WHERE text1='$s'");
  11.   if ($result = @mysql_fetch_array($query))
  12.   {
  13.   $is=str_replace($s,"-----",$t);
  14.   }
  15.  
  16.    echo $is.'<hr>';
  17.   }
  18. }
  19. ?>

вот если нашло то слово которые есть в бд, заменяет слово в тексте на запись в бд 2
но как же это реализовать? замена на то которое находится в бд,под ид каком то?
8. Саныч - 30 Апреля, 2011 - 10:26:26 - перейти к сообщению
я так понял у вас в бд хранится примерно в таком виде
id | word1 | word2 |
1 | 1 | 2
2 | haha | blabla
3 | joker | hoker
4 | Fatal |offfffff
если так, то я предлагаю следущее
PHP:
скопировать код в буфер обмена
  1. $text = ''; //здесь ваш текст
  2. $w1 = $w2 = array();
  3. $sql = mysql_query('SELECT word1,word2 FROM table');
  4. while($res = mysql_fetch_assoc($sql))
  5. {
  6.    $w1[] = $res['word1'];
  7.    $w2[] = $res['word2'];
  8. }
  9. $text = str_ireplace($w1,$w2,$text);

это у вас что-то типа фильтрации "плохих" слов?

з.ы. по поводу предыдущего поста, вы представляете сколько у вас будет запросов к БД?!

 

Powered by ExBB FM 1.0 RC1