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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите с поиском

Сообщения:  [1-7] 

 
 автор: cheops   (07.11.2005 в 19:36)   письмо автору
 
   для: babilonian   (07.11.2005 в 18:33)
 

Где-то проскакивают пустые строки... замените
<?php
 
if(!eregi("$word"$kk_1[$x])) $found false;
?>

на
<?php
 $word 
trim($word);
 if(!empty(
$word)) if(!eregi("$word"$kk_1[$x])) $found false;
?>

   
 
 автор: babilonian   (07.11.2005 в 18:33)   письмо автору
 
   для: cheops   (07.11.2005 в 13:34)
 

Нет, я поределенно не могу понять принципа работы этого цикла. При вот таком раскладе:

<?
echo"<center>
<!-- Start search -->
<form name='form1' method='get' action='search.php'>
<input type='hidden' name='razd' value='search'>
<input type='hidden' name='search_url' value='1'>
<input name=seach value=\"
$seach\">
<INPUT type=submit value='Найти!'>
</form>
<!-- end search --></center>"
;
#######################################
if ($search_url)
  {
  
$count_buk=strLen($seach);
  if (
$count_buk<="2")
  {echo
"Поисковое слово не может содержать меньше трех букв.";}
  else{
       if (
$seach!="")
          {
          
$dirname "files/";
          
$dir = @opendir($dirname);
          while ((
$file = @readdir($dir)) !== false)
            {
            
$kk_1 = @file("$dirname/$file");
            
$x=0; while ($x count($kk_1)) :
            
$found true;
            
$words explode(" "$search);
            foreach(
$words as $word)
            {
             if(!
eregi("$word"$kk_1[$x])) $found false;
            }
            if(
$found==true)
            {
                 
$row=explode("::",$kk_1[$x]);
                 list(
$id,$razd,$cat,$namer,$name,$opis)=$row;
                 
$start=Strrpos($opis,$seach);
                 
$opis_new=substr($opis$start-50,200);
                 echo
"<a href=\"?cat=$cat&id=$id\">$namer $name</a>
                 <br>
$opis_new<br>";
            }
            
$x++;
            endwhile;
            }
          }
      }
 }
?>

Выходит ошибка Warning: eregi() [function.eregi]: REG_EMPTY in C:\WWW\search.php on line 29

   
 
 автор: cheops   (07.11.2005 в 13:34)   письмо автору
 
   для: babilonian   (07.11.2005 в 11:18)
 

Поиск осуществляется в строке
<?php
if(!eregi("$seach"$kk_1[$x]))
?>

Вам необходимо разбить $search при помощи функции explode на отдельные слова (массив $words)
<?php
$words 
explode(" "$search);
?>

И проверять соответствие в цикле
<?php
  $found 
true;
  foreach(
$words as $word)
  {
    if(!
eregi("$word"$kk_1[$x])) $found false;
  }
?>

Если после цикла флаг $found - true, соответствие найдено, если false - нет.

   
 
 автор: babilonian   (07.11.2005 в 11:18)   письмо автору
 
   для: spiner   (07.11.2005 в 10:19)
 

Упрощенный вариант выглядит так:
<?
echo"<center>
<!-- Start search -->
<form name='form1' method='get' action='search.php'>
<input type='hidden' name='razd' value='search'>
<input type='hidden' name='search_url' value='1'>
<input name=seach value=\"$seach\">
<INPUT type=submit value='Найти!'>
</form>
<!-- end search --></center>";
if ($search_url)
{
$count_buk=strLen($seach);
if ($count_buk<="2")
{echo"Поисковое слово не может содержать меньше трех букв.";}
else{
if ($seach!="")
{
$cpages=0;
$dirname = "files/";
$dir = @opendir($dirname);
while (($file = @readdir($dir)) !== false)
{
$kk_1 = @file("$dirname/$file");
$x=0; while ($x < count($kk_1)) :
if (!eregi("$seach", $kk_1[$x])) {}
else {
$row=explode("::",$kk_1[$x]);
list($id,$razd,$cat,$namer,$name,$opis)=$row;
$start=Strrpos($opis,$seach);
$opis_new=substr($opis, $start-50,200);
echo"<a href=\"?cat=$cat&id=$id\">$namer $name</a>
<br>$opis_new<br>";
}
$x++;
endwhile;
}
}
}
}
?>

   
 
 автор: spiner   (07.11.2005 в 10:19)   письмо автору
 
   для: babilonian   (07.11.2005 в 02:19)
 

Ищите сначала одно слово, записывайте результаты во временную таблицу, и в этой временной таблице ищите второе слово. Правда буде весело, если слов 7))))))

P.S. Такой большое количество чужого кода меня всегда пугает...

   
 
 автор: himic   (07.11.2005 в 10:11)   письмо автору
 
   для: babilonian   (07.11.2005 в 02:19)
 

Код не читал
разделяешь строку explode на массив
ишешь по отдельности но выводишь вместе
наверное так
цикл от 0 до кол-ва элементов массива

if(элемент массива совпадает ) то вывести

   
 
 автор: babilonian   (07.11.2005 в 02:19)   письмо автору
 
 

<html>
<head>
</head>
<?
function navigator($nazvanie,$path,$addpage,$onlug,$lines,$url,$twt,$search_url,$seach){
$seach=urlencode($seach);
$perp = 'Перейти на стр.: ';
$catle=' ';
if($path==""){$path="1";}
if($addpage<'1'){$addpage="1";}
$line ="$nazvanie: ";
$pages = ceil($lines/$addpage);
$onlug = (int)($onlug/2);
for($i=1; $i <= $pages; $i++){
if($pages > $pages-$path and $path <= $pages){
$e = ($i*$addpage)-$addpage;
if($i=="1"){$e++;}
if($addpage=="1" and $i!="1"){$e++;}
if( $path == $i ) {
$second=$addpage*$path;
$first=$second-$addpage;
if($second > $lines){$second = $lines;}
if($second < "0"){$second = "0";}
$line.= "\n$catle<b>$i</b>";
}
if( $onlug+$path+1 > $i and $path-$onlug-1 < $i and $path != $i) {
$line.= "\n$catle<a href=\"$url?razd=search&search_url=$search_url&seach=$seach&$twt=$i";
$line.= "\" title=\"$perp $i\" class=all>$i</a>";
}
if( $onlug+$path+1 == $i){
$line.= "\n&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"$url?razd=search&search_url=$search_url&seach=$seach&$twt=$i";
$line.= "\" title=\"$perp $i\" class=all>Далее</a>";
}
if( $path-$onlug-1 == $i){
$line.= "\n<a href=\"$url?razd=search&search_url=$search_url&seach=$seach&$twt=$i";
$line.= "\" title=\"$perp $i\" class=all>Назад</a>&nbsp;&nbsp;&nbsp;&nbsp;";
}
}
}
if(strlen($line)>"11"){return $line = array($line,$first,$second); }
else{ return FALSE; }
}
echo"<center>
<!-- Start search -->
<table border=1 bordercolor=#757575 cellspacing=0 cellpadding=0>
<form name='form1' method='get' action='.'>
<input type='hidden' name='razd' value='search'>
<input type='hidden' name='search_url' value='1'>
<tr><td><input name=seach value=\"$seach\" style=\"font-size:10px; width:94\"></td><td>
<INPUT align=left border=1 width=15 src='images/search2.gif' type=image
valign='center' alt='Найти!'></TD>
</form>
</tr>
</table>
<!-- end search --></center>";
if ($search_url)
{
$count_buk=strLen($seach);
if ($count_buk<="2")
{echo"Поисковое слово не может содержать меньше трех букв.";}
else{
if ($seach!=""and$seach!="::")
{
$cpages=0;
$dirname = "files/";
$dir = @opendir($dirname);
while (($file = @readdir($dir)) !== false)
{
$kk_1 = @file("$dirname/$file");
$x=0; while ($x < count($kk_1)) :
if (!eregi("$seach", $kk_1[$x])) {}
else {
$row=explode("::",$kk_1[$x]);
list($id,$razd,$cat,$namer,$name,$opis)=$row;
$start=Strrpos($opis,$seach);
$opis_new=substr($opis, $start-50,200);
$name=str_replace("$seach", "<b style='color:black'>$seach</b>", $name);
$opis_new=str_replace("$seach", "<b style='color:black'>$seach</b>", $opis_new);
$cpages++;
$mytext[$cpages]="<a href='?razd=$razd&cat=$cat&id=$id' class=all><b>$namer - $name</b></a><br>...$opis_new...";
}
$x++;
endwhile;
}
if ($cpages=="0")
{
echo"Поиск не дал результатов? Попробуйте задать более короткий запрос,
либо ввести слова не используя окончаний.";
}
else
{
if (isset($_GET)) {foreach ( $_GET as $key => $value ) {$$key=$value;}}
$last = $cpages-1;
if($page==""){$page="1";}
$lines=$cpages+1;
$adres = '';
$line_arr = navigator("Страница ",$page,10,5,$lines,$adres,'page',$search_url,$seach);
$line = $line_arr[0];
$first = $line_arr[1];
$second = $line_arr[2];
if($line != '')
{
echo"<p>$line \n </p>";
}
else{
echo"";
}
for ( $i = $lines-$first-1; $i >= $lines-$second; $i--)
{
$nomber=$lines-$i;
echo"<p align='Justify'>$mytext[$i]</p>";
}
echo"<p>$line \n </p><p>\n </p>";
echo"Результаты поиска: По запросу <b>\"$seach\"</b> надено страниц - $cpages.";
}
}
}
}
?>

С большим трудом откопал и добил этот скрипт, но проблема в том, что он ищет в базах строгие соответствия, если введены два и больше слов, а как сделать так, чтобы он анализировал строку, и выводил ее даже в том случае, если слова стоят на расстоянии друг от друга?
P.S. В регулярных выражениях я очень не(

   

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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