PHP

Поиск

Попробуем сначала сформулировать, что же должен делать поиск на сайте. В самом простом варианте поисковой системе сайта необходимо уметь: первое - получить от пользователя запрос - что тот найти желает. Второе - из всей информации, которая может быть показана пользователю, поисковая система должна выбрать те разделы или страницы, которые содержат поисковую фразу. Ну, и третье - показать, что нашлось или сообщить, что ничего не нашлось. Итак, простейшая поисковая система сайта и ее код:

$find=$_GET['find'];
$replace="<font color=#00f0ff size=+1>".$find."</font>";
if($find) {$out=""; $n=0; $i=0;
while($i<count($chapter)):
foreach ($page[$i] as $string){
if(stristr($string,$find)){
$search_res[$n]=$string;
$search_res[$n]=str_ireplace($find,$replace,$search_res[$n]);
$out=$out.nl2br($search_res[$n]);
$n=$n+1;
}}
$i++;
endwhile;
if($n==0)$out="<font size=+2>Искали, искали и ничего не нашли...</font>";
}

Разберем подробнее. Система предназначена для сайта, конструкцию которого мы рассмотрели раньше, содержащем информацию в виде двумерного массива страниц (для одномерного массива система еще проще). Первое - как и договаривались - получение запроса от пользователя, самое главное - не забыть добавить в input type=text формы выражения name=find, чтобы скрипт знал, откуда брать поисковую фразу, action=index.php и method=GET, чтобы и форма знала, куда послать и как. Получаем запрос:

$find=$_GET['find'];

Запрос получили, теперь выделим его другим цветом (это действие не обязательно) и в выделенном виде поместим в переменную $replace:

$replace="<font color=#00f0ff size=+1>".$find."</font>";

Дальше - самое главное - основной цикл обработки запроса. Итак: если есть запрос, то обнуляем два счетчика (это то что одной буквой), а переменную $out освобождаем, записав в нее пустоту:

if($find) {$out=""; $n=0; $i=0;

Начинаем цикл, смысл которого: пока переменная $i меньше числа глав:

while($i<count($chapter)):

то, если в какой-нибудь из страниц главы встретилась фраза запроса (функция stristr($string,$find) ищет фразу $find в строке $string, не обращая внимание на регистр букв; если регистр букв имеет значение, используют функцию strstr()):

if(stristr($string,$find)){

присоединяем эту страницу к общему массиву найденных страниц, присваиваем ей номер

$search_res[$n]=$string;

и заменяем поисковую фразу в тексте ей же, но другого цвета, с помощью функции str_ireplace(что, чем, где) - без учета регистра букв:

$search_res[$n]=str_ireplace($find,$replace,$search_res[$n]);

Формируем то, что мы покажем пользователю:

$out=$out.nl2br($search_res[$n]);

Увеличиваем счетчик найденных страниц на единицу:

$n=$n+1;

и переходим к следующей странице в этой же главе:

}}

а если глава закончилась - то переходим к следующей, увеличив на единицу счетчик глав:

$i++;

а если и все главы закончились - выходим из цикла.

endwhile;

И, наконец, если ничего не нашли - сообщаем об этом пользователю:

if($n==0)$out="<font size=+2>Искали, искали и ничего не нашли...</font>";}

Вот и все. Осталось вставить тот код в код сайта, вставлять нужно между последей точкой с запятой и знаками ?>. Получилось? Работает так же, как здесь? Тогда следующее - как регистрировать посетителей на сайте.

Рейтинг@Mail.ru