View file forum/search.php

File size: 7.38Kb
<?php
$frm="1";
require_once"../templates/start.php";

require ("../config.php"); //Подключаем настройки сайта. (config.php)
require ("../themes/$themes.php"); # Вставляем скин сайта.

if ($portal=="off") //Проверка включен портал или нет, если выключен, то выводим $offmes
  {
    print ("<center> $offmes </center>");
  }

if ($_SERVER['REMOTE_ADDR']==$ban)
  {
   print ("<center>Вам сюда нельзя!!! Вас забанили!!</center>");
  }else{
if ($portal=="on") //Проверка включен портал или нет, если включен, то выводим содержимое сайта
{

if(empty($action)){$action="index";}
$minfindme="1"; //минимальное кол-во символов в слове для поиска
echo'<b>Поиск</b><br>';

if($action=="index"){

echo'<form action="search.php?event=go&amp;action=search&amp;'.SID.'" method="post">
Запрос:
 <br><input type="text" name="findme"><br>
Тип:
<br><select name="ftype">
<option value="0">&quot;И&quot;
<option value="1" selected>&quot;ИЛИ&quot;
<option value="2">Вся фраза целиком
</select><br><br>
<input type="submit" value="Поиск"></form><hr>';

echo '<br>Язык запросов:<br>
"И" - должны присутствовать оба слова;<br>
"ИЛИ" - есть ХОТЯ БЫ одно из слов;<br>
"Вся фраза целиком" - в искомом документе ищите фразу на 100% соответствующую вашему запросу;<br>
Скрипт ищет все данные, которые начинаются с введенной вами строки. Например, при запросе "форум" будут найдены слова "форум", "форумы", "форумом"; и многие другие.<br>';


}



if($action=="search"){



// Разбиваем $findme на слова

$findme=stripslashes($findme);
$findmeword=explode(" ",$findme);
$wordsitogo=count($findmeword);

$findme=htmlspecialchars(trim(stripslashes($findme)));
if ($findme == "" || strlen($findme) < $minfindme) {echo "<br>Ваш запрос пуст, или менее $minfindme символов!";


echo'<br><br><a href="search.php?'.SID.'">К поиску</a>';
echo'<br><a href="index.php?'.SID.'">В форум</a>';
require_once"../templates/foot.php";
exit;}

// Открываем файл с темами формума и запоминаем имена файлов с сообщениями


// ПЕРВЫЙ цикл - считаем кол-во форумов (записываем в переменную $itogofid)
$mainlines = file("../data/dataforum/mainforum.dat");


$i=count($mainlines); $itogofid="0"; $number="0"; $oldid="0"; $nump="0";

do {$i--; $dt = explode("|", $mainlines[$i]);
if ($dt[0]!="razdel") {$itogofid++;} // $itogofid - общее кол-во форумов
} while($i > "0");


$fid=$itogofid;
do {
// ВТОРОЙ цикл - открываем файл с топиком (если он существует) и сохраняем в переменную $topicsid все имена тем
if (is_file("../data/dataforum/topic$fid.dat")) {
$msglines=file("../data/dataforum/topic$fid.dat");

if (count($msglines)>0) {

$lines = file("../data/dataforum/topic$fid.dat"); $i=count($lines);
do {$i--;  $dt = explode("|", $lines[$i]); $topicsid[$i]=$dt[7];} while($i > "0"); }


// ТРЕТИЙ цикл - последовательно открываем каждую тему

if (isset($topicsid)) {

$ii=count($topicsid);
do {$ii--;
$id = str_replace("\r\n","",$topicsid[$ii]);
$file=file("../data/dataforum/$id.dat");
$iii=count($file);


// ЧЕТВЁРТЫЙ цикл - последовательно ищем в каждой теме искомое сообщение
do {$iii--;
$lines = file("../data/dataforum/$id.dat");
$dt = explode("|", $lines[$iii]);


$msgmass=array($dt[4]); $gi="1"; $add="е <b>Текст</b> ";



///////////////////////////////////////////////

// Цикл по местам поиска (0,1,2,3,4) do {$dt=explode("|", $lines[$a1]);


do { $gi--;

$msg=$dt[4];
$msdat=$msgmass[$gi];
$stroka="0"; $wi=$wordsitogo;
// ЦИКЛ по КАЖДОМУ слову запроса !
do {$wi--;



// БЛОК УСЛОВИЙ ПОИСКА

    if ($ftype=="2")
        {
        if (stristr($msdat,$findme))     // ПОИСК по "ВСЕЙ ФРАЗЕ ЦЕЛИКОМ" БЕЗ учёта регистра
            {
             $stroka++;
             //$msg=eregi_replace($findme," <b><u>$findme</u></b> ",$msg);
            }
        }
     else {
           $str1=strtolower($msdat);
           $str2=strtolower($findmeword[$wi]);
           if ($str2!="" and strlen($str2) >= $minfindme)
              {
               if (stristr($str1,$str2)) // ПОИСК БЕЗ учёта регистра при равных прочих условиях
                  {
                   $stroka++;
                  // $msg=eregi_replace($findmeword[$wi]," <b><u>$findmeword[$wi]</u></b> ",$msg);
                  }
              }
          }




} while($wi > "0");  // конец ЦИКЛа по КАЖДОМУ слову запроса


// Подготавливаем результирующее сообщение, и если результат соответствует условиям - выводим его
if ($ftype=="0") {  if ($stroka==$wordsitogo) {$echoflag="1";}  }
if ($ftype=="1") {  if ($stroka>"0") {$echoflag="1";}  }
if ($ftype=="2") {  if ($stroka==$wordsitogo) {$echoflag="1";}  }



if (!isset($echoflag)) {$echoflag="0";}
    if ($echoflag=="1")
       {//$msg=str_replace("<br>", " &nbsp;&nbsp;", $msg); // заменяем в сообщении <br> на пару пробелов


if (strlen($msg)>150)
{
 $ma=strpos($msg,"<b>"); if ($ma > 50) {$ma=$ma-50;} else {$ma=0;}
 $mb=strrpos($msg,">b/<"); if (($mb+50) > strlen($msg)) {$mb=strlen($msg);} else {$mb=$mb+50;}

 $msgtowrite="..."; $msgtowrite.=substr($msg,$ma,$mb); $msgtowrite.="...";
 $msgtowrite=substr($msg,0,400);
}
else {$msgtowrite=$msg;}

if (!isset($m)) {echo '<br>По запросу "<b>'.$findme.'</b>" в пол'.$add.' найдено: <hr>'; $m="1"; }


if ($iii>$qq) {$page=floor($iii/$qq); $page=$page*$qq;} else {$page="0";}

if ($oldid!=$id and $number<50) {$number++; $msgnumber=$iii;
if ($nump>1) {$anp="$nump";} else {$anp="1";}



//$sercount[]=$msgtowrite;

echo"<div class=b>";
echo '<a href="index.php?fid='.$fid.'&amp;id='.$id.'&amp;page='.$page.'&amp;'.SID.'">'.$dt[3].'</a></div><div>';
echo 'Cообщение: '.$msgtowrite;
echo'<br>Совпадений: '.$anp.'</div>';
$echoflag="0"; $nump="0";} else {$nump++;} $oldid=$id;
	}

} while($gi > "0");  // конец ЦИКЛа по МЕСТУ поиска while($a1 < $u);

} while($iii > "0");

} while($ii > "0");

} // if isset($topicsid)

} // if файл topic$fid.dat НЕ пуст


$fid--;
} while($fid > "0");


if (!isset($m)) {echo "<br>По вашему запросу ничего не найдено.";}
echo'<br><a href="search.php?'.SID.'">К поиску</a>';
}



echo'<br><a href="index.php?'.SID.'">В форум</a>';
}}
require_once"../templates/foot.php";
?>