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

Форум MySQL

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

 

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

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

тема: Поисковик
 
 автор: BAHO   (27.01.2005 в 16:35)   письмо автору
 
 

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

<?
include("conf/conf.php");
include(
"design/site_guest-1.tpl");?>
   <table cellpadding=0 cellspacing=0 border=0 width=100%>
     <tr>
      <td height=50 width=20
      style="border-bottom: rgb(51,51,51) 1pt solid">&nbsp;</td>
      <td height=50 width=300
      style="border-bottom: rgb(51,51,51) 1pt solid">
      <img src="images/result.gif"></td>
      <td height=50 width=83><img src="images/a3.gif"></td>
      <td>&nbsp;</td></tr></table><br><?
global $action$search$dir$logic$page;

if(
$action=="search")
  {
  if(
$search=="" or strlen($search)<3)
    {
    print 
"<div align=center>Запросы меньше 3 символов не обрабатываются</div>";
    }
  else
    {
    if(
$dir=="0")
      {
      print 
"<div align=center>"._NOSEARCH2_."</div>";
      }
    else
      {
      switch(
$dir)
    {
    case 
"news":
    
$table="ks_news";
    
$pole="arch_news";
        
$by="daten";
    
$sort="desc";
    break;
        }
      switch(
$logic)
    {
    case 
1:
    
$lgics="AND";
    break;
    default:
    
$lgics="OR";
    }
    
$search=substr($search064);
    
$search=preg_replace("/[^\w\x7F-\xFF\s]/"" "$search);
    
$good=trim(preg_replace("/\s(\S{1,2})\s/"" "ereg_replace(" +""  ",$search ")));
    
$good=ereg_replace(" +"" "$good);
    if((
$logic!="1") && ($logic!="2"))
          {
          
$logic="2";
          }
    switch(
$logic)
      {
      case 
"2":
      
$word=explode(" ",$search);
      while(list(
$k$v) = each($word))
            {
        if(
strlen($v)>2)
              {
          
$result=mysql_query("select id from $table where $pole like '%$v%'");
          
$vva=mysql_numrows($result);
          
$stat[]="<b>$v</b>. Всего найдено: $vva<br>";
          }
        }
      
$word_stats="<span class=new>&nbsp;&nbsp;Вы искали: ";
      
$word_stats.=implode(""$stat). "</span><br>";
      unset(
$stat);
      break;
      case 
"1":
      
$sql_stats="select id from $table where $pole like '%"str_replace(" ""%' and $pole like '%"$good). "%'";
      
$colsearchand=mysql_numrows(mysql_query($sql_stats));
      
$word_stats="<span class=new>&nbsp;&nbsp;Вы искали: ";
      
$word_stats.=":<br><b>$search:</b>Найдено: $colsearchand</span>";
      break;
      }
    print 
"$word_stats";
    
$sql_sq="select * from $table where $pole like '%"str_replace(" ""%' $lgics $pole like '%"$good). "%'";
    
$nub=mysql_num_rows(mysql_query($sql_sq));
    
$pages=ceil(mysql_num_rows(mysql_query($sql_sq))/10);
    if(
$page=="" or $page=="0")
          {
          
$list="0";
          }
    else
          {
          
$list=($page-1)*10;
          }
    
$sql_sq.=" order by $by $sort ";
    
$sql_sq.="limit $list, 10";
    
$sql_sqls=mysql_query($sql_sq);
    print 
"<center><span class=date>";
    if(
$nub>10)
          {
      if(!isset(
$page))
            {
            
$page="1";
            }
          print 
"Страницы: ";
      for(
$i=1;$i<=$pages;$i++)
        {
        if(
$i != $page)
              {
          print 
' <a href="search.php?action=search&logic='.$logic.'&dir='.$dir.'&page='.$i.'&search='.urlencode($search).'">'.$i.'</a>';
          }
        else
              {
              print 
' <b>'.$i'</b>';
              }
        }
      }
        print 
"</span></center><br>";
    while(
$row=mysql_fetch_array($sql_sqls))
      {
          if(
ereg("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})",$row['daten'],$reg))
            {
        
$persearch1="<a href=index.php?sec=news&file=archive&year=$reg[1]&month=$reg[2]";
            
$reg[2]=eregi_replace("01",января,$reg[2]);
            
$reg[2]=eregi_replace("02",февраля,$reg[2]);
            
$reg[2]=eregi_replace("03",марта,$reg[2]);
            
$reg[2]=eregi_replace("04",апреля,$reg[2]);
            
$reg[2]=eregi_replace("05",мая,$reg[2]);
            
$reg[2]=eregi_replace("06",июня,$reg[2]);
            
$reg[2]=eregi_replace("07",июля,$reg[2]);
            
$reg[2]=eregi_replace("08",августа,$reg[2]);
            
$reg[2]=eregi_replace("09",сентября,$reg[2]);
            
$reg[2]=eregi_replace("10",октября,$reg[2]);
            
$reg[2]=eregi_replace("11",ноября,$reg[2]);
            
$reg[2]=eregi_replace("12",декабря,$reg[2]);
            if(
bcdiv($reg[3],10)==0)
               {
               
$reg[3]=eregi_replace("0","",$reg[3]);
               }
            }
        
$persearch1.=" target=_blank>";
        
$persearch1.=$row['title'];
            
$persearch1.="</a>&nbsp;(добавлена: $reg[3] $reg[2] $reg[1] года)";
        
$persearch3=$row['news'];
            
$persearch3=eregi_replace("$search","<font color=red><b>$search</b></font>",$persearch3);?>
            <table cellpadding=5 cellspacing=0 width=100% border=0>
          <tr>
           <td><li><?print "<p align=justify><span class=new><b>$persearch1</b></span></p>";?></td>
          </tr>
              <tr>
           <td><?print "<span class=textosn>$persearch3</span>";?></td>
          </tr>
        </table><hr size=1 width=80% color=#000000><?
      
}
      }
    }
  }
else
  {
  print 
"<center><span class=date>Запроса на поиск не поступало</span></center>";
  }
include(
"design/site_guest-2.tpl");
?>

Сюда же: как мне сделать так, чтобы вырезались любые тэги? чтобы отображался один текст без картинок и без <>?
И напоследок: как мне сделать так, чтобы отображалось лишь ближайшие слова, находящиес рядос с найденным (как енто делают поисковики обычно, выдают не всё, а лишь то, что нужно, а не полный документ).


PS: структура таблицы ks_news
id daten title news arch_news

Извените, не туда вкляпал тему... хотел в PHP.

[модератор: прикрепите код к своему сообщению в виде файла - в такой форме работать с темой невозможно]

   
 
 автор: BAHO   (05.02.2005 в 19:01)   письмо автору
 
   для: BAHO   (27.01.2005 в 16:35)
 

меня проигнорировали?

   
 
 автор: cheops   (05.02.2005 в 23:11)   письмо автору
 
   для: BAHO   (05.02.2005 в 19:01)
 

Хм... да как-то забыли все про тему.
1) Убрать окончания можно следующим образом
<?php
  $patern 
"#^([\d]+)(у|ы|а|о|я|е|и|ие|ия|ем|им|ию|ий|ии|ой|ов|ам|их|ый|ых|ая|ай|ае|ую)$#i";
  
preg_match($patern$search$out);
  
$search $out[2];
?>

2) Вырезать все HTML-тэги можно при помощи скрипта, описание которого приводится по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1562

   
 
 автор: BAHO   (06.02.2005 в 07:24)   письмо автору
 
   для: cheops   (05.02.2005 в 23:11)
 

И напоследок: как мне сделать так, чтобы отображалось лишь ближайшие слова, находящиес рядос с найденным (как енто делают поисковики обычно, выдают не всё, а лишь то, что нужно, а не полный документ).

   
 
 автор: cheops   (06.02.2005 в 13:45)   письмо автору
 
   для: BAHO   (06.02.2005 в 07:24)
 

Хм... можно харахнуться в право и в лево на n-е число символов и искать ближайший пробел - примерно так (тут помоему ещё единицу где прибавить или отнять нужно):
<?php
$pos 
1034// Позиция найденного слова
$begin strpos ($text" "1034 80);
$end strpos ($text" "1034 80);
$part substr($text$begin$end $begin);
?>

   
Rambler's Top100
вверх

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