|
|
|
| <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 <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> ";
}
}
}
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. В регулярных выражениях я очень не( | |
|
|
|
|
|
|
|
для: babilonian
(07.11.2005 в 02:19)
| | Код не читал
разделяешь строку explode на массив
ишешь по отдельности но выводишь вместе
наверное так
цикл от 0 до кол-ва элементов массива
if(элемент массива совпадает ) то вывести | |
|
|
|
|
|
|
|
для: babilonian
(07.11.2005 в 02:19)
| | Ищите сначала одно слово, записывайте результаты во временную таблицу, и в этой временной таблице ищите второе слово. Правда буде весело, если слов 7))))))
P.S. Такой большое количество чужого кода меня всегда пугает... | |
|
|
|
|
|
|
|
для: 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;
}
}
}
}
?> | |
|
|
|
|
|
|
|
для: 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 - нет. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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;
?>
|
| |
|
|
|