Поиск
Попробуем сначала сформулировать, что же должен делать поиск на сайте. В самом простом варианте поисковой системе сайта необходимо уметь: первое - получить от пользователя запрос - что тот найти желает. Второе - из всей информации, которая может быть показана пользователю, поисковая система должна выбрать те разделы или страницы, которые содержат поисковую фразу. Ну, и третье - показать, что нашлось или сообщить, что ничего не нашлось. Итак, простейшая поисковая система сайта и ее код:
$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>";}
Вот и все. Осталось вставить тот код в код сайта, вставлять нужно между последей точкой с запятой и знаками ?>. Получилось? Работает так же, как здесь? Тогда следующее - как регистрировать посетителей на сайте.