Większość rozbudowanych serwisów zawiera bardzo dużo danych. Mogą być to zarówno artykuły, jak i jakieś programy oraz innego rodzaju ciekawostki. Ponieważ zbiory takie mogą być ogromne, ciężko jest znaleźć interesującą nas rzecz.
Przy setkach, a nawet tysiącach możliwościach znajdujących się w serwisie zwykły podział na kategorie nie wystarczy. Do tego celu stworzono właśnie wyszukiwarkę, która po podaniu odpowiedniej frazy przeszukuje zbiory danych i zwraca wszystkie pasujące do niej elementy. Na pierwszy rzut oka może się wydawać, że stworzenie takiej wyszukiwarki jest trudne, ale to nie prawda. Oczywiście jest to także uzależnione od efektów jakich się spodziewamy. Im więcej wymagamy od naszego skryptu ,tym więcej musimy włożyć w niego pracy. Mam jednak na celu zwrócenie uwagi na ogólną strukturę budowy wyszukiwarki, więc będzie się ona składała z w miarę prostego kodu.
Ponieważ wyszukiwarka będzie wykorzystywała do działania bazę MySQL, powinieneś umieć się nią posługiwać. Jeśli jeszcze nie potrafisz to zapoznaj się z odpowiednim artykułem.
Na początek stworzymy przykład bazy, na którym będziemy się opierać. Załóżmy, że mamy prosty system news’ów oparty na bazie MySQL. Nie będę tworzył tu całego systemu, ale zwrócę uwagę jakie powinna zawierać pola tabela z danymi. Możesz później w celach doświadczalnych wprowadzić do niej przykładowe dane. Tak więc tabela musi zawierać następujące pola:
| id mediumint (10) AUTO_INCREMENT tytul varchar (50) autor varchar (50) data varchar (14) tresc text |
Pole 'id’ zdefiniuj jako klucz. Jeśli stworzyłeś już tabele odpowiadającą tej, którą przed chwilą pokazałem, to możemy przystąpić do budowy formularza, który będzie obsługiwał wyszukiwarke. W tym celu otwórz dowolny edytor tekstowy, np. Notatnik i postępuj według wskazówek.
Pole ‘id’ zdefiniuj jako klucz.
Jeśli stworzyłeś już tabele odpowiadającą tej, którą przed chwilą pokazałem, to możemy przystąpić do budowy formularza, który będzie obsługiwał wyszukiwarke. W tym celu otwórz dowolny edytor tekstowy, np. Notatnik i postępuj według wskazówek.
<form method=get>
<input type=text name=fraza value=<? print $fraza; ?> size=20>
<input type=submit value=Szukaj>
</form>
Podany wyżej kod po przepisaniu zapisz pod nazwa ‘form.php’. Teraz będzie on przechowywał formularz, za pomocą którego będziemy podawać informacje, które chcemy znaleźć. Teraz otwórz czysty dokument i przystąpimy do skonstruowania odpowiedniego kodu:
| <html> </head> </head> <body> <center> <table cellpadding=0 cellspacing=0 width=750> <? if (isset($fraza)) { if ($fraza != ‘’) { // Ustawienia: $dbhost = ‘www.serwis.pl’; // nazwa hosta z bazą MySQL $dbuser = ‘login’; // nazwa użytkownika do bazy MySQL $dbpass = ‘hasło’; // hasło użytkownika do bazy MySQL $dbname = ‘baza’; // nazwa bazy, w której znajduje się tabela z danymi $nt = ‘news’; // nazwa tabeli z danymi w bazie MySQL if ($lacze = @mysql_connect($dbhost, $dbuser, $dbpass)) { if (mysql_select_db($dbname)) { $query = „SELECT count(*) FROM $nt WHERE tytul LIKE '%$fraza%’ OR autor LIKE '%$fraza%’ OR data LIKE '%$fraza%’ OR tresc LIKE '%$fraza%’ ORDER BY data DESC LIMIT $limit_g”; $result = mysql_query($query); if ($result && mysql_num_rows($result) != 0) { while ($rekord = mysql_fetch_array($result)) { $lp = $rekord[’id’]; $tytul = $rekord[’tytul’]; $autor = $rekord[’autor’]; $data = $rekord[’data’]; $tresc = $rekord[’tresc’]; print “<tr><th width=100% height=* bgcolor=blue>:: $tytul [ $data ]</th></tr>\n <tr>\n <td width=100% height=* align=right bgcolor=lightblue>\n <div align=justify>$tresc</div>\n <i><b>$autor</b></i> \n </td>\n </tr>\n <tr><td height=5></td></tr>\n”; } } else { print “<tr><th width=100% height=* bgcolor=blue>:: Brak nowości</th></tr>\n <tr>\n <td width=100% height=* align=center bgcolor=lightblue>\n Przykro nam, ale na serwisie nie znaleziono żadnych nowości spełniających kryteria !\n </td>\n </tr>\n”; } } else { print “<tr><th width=100% height=* bgcolor=blue>:: Błąd bazy</th></tr>\n <tr>\n <td width=100% height=* align=center bgcolor=lightblue>\n Nie można otworzyć bazy… Spróbuj ponownie…\n </td>\n </tr>\n”; } } else { print “<tr><th width=100% height=* bgcolor=blue>:: Błąd bazy </th></tr>\n <tr>\n <td width=100% height=* align=center bgcolor=lightblue>\n Nie można nawiązać połączenia z bazą danych… Spróbuj ponownie…\n </td>\n </tr>\n”; } } else { include(‘form.php’); } } else { include(‘form.php’); } ?> </table> </center> </body> </html> |
Podany kod zapisz w pliku o nazwie ‘search.php’. Teraz wprowadź do bazy pare przykładowych danych i sprawdź czy wszystko działa. Jeśli na potkasz problemy to sprawdź czy wszystko dobrze przepisałeś, ewentualnie spróbuj sam poprawić błędy.
Jak zapewne zauważyłeś na początku sprawdzamy, czy istnieje zmienna ‘$fraza’, dzięki czemu wiemy kiedy należy wyświetlić formularz, a kiedy wyniki. Później musisz sam uzupełnić dane konfiguracyjne. Kiedy już to zrobisz sprawdzamy czy udało nam się połączyć z bazą i w przypadku nie powodzenia wyświetlamy stosowny komunikat. Skoro jednak udało się nam połączyć z bazą to przystępujemy do przeszukania zasobów. Posłużyło nam do tego proste zapytanie do bazy MySQL, za pomocą funkcji mysql_query(), w którym wykorzystaliśmy specyficzny element.
Chodzi mi tu o parametr ‘LIKE’, który wyszukuje w bazie elementy podobne do tego, który został podany po słowie kluczowym. Dodatkowo zastosowałem tu znaki ‘%’ (procentu), które przeszukją elementy, które mogą zawierać znaki przed i po wpisaniu wyszukiwanej frazy. Więcej na ich temat możesz przeczytać w dokumentacji MySQL i PHP. Reszta konstrukcji to tylko wyświetlenie zwróconych przez zapytanie danych. W sumie bodowa całego skryptu nie jest skomplikowana. Podany kod można rozbudować o wiele bardziej, ale to już pozostawiam w twoich rękach. Powodzenia.
