home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2001 November / MICD2001_11_NR1.iso / Www / WebArea / index.php@id=4 < prev    next >
Text File  |  2001-09-26  |  29KB  |  487 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4//PL">
  2. <html>
  3. <head>
  4. <title>WEB-AREA.org - serwis webmaster≤w</title>
  5. <link href="style.css" rel="stylesheet" type="text/css">
  6. <LINK REL="SHORTCUT ICON" HREF="favicon.ico"> 
  7. <meta http-equiv="Creation-date" content="28.08.2001">
  8. <meta http-equiv="Reply-to" content="web-area@web-area.org">
  9. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  10. <meta name="author" content="Jakub & Jan Filipowscy">
  11. <meta name="description" content="Serwis webmasterow. Znajdziesz tu kilka kursow popularnych internetowych jezykow programowania takich jak: HTML, CSS, WML, SGML, XML, PHP, Perl i Java. Zamiescilismy tu rowniez wiele skryptow JavaScript, PHP i CGI. Przeczytac mozna kilka artykulow i sciagnac kilka szablonow. Dla poczatkujacych jest dzial BeginnerZone. ">
  12. <meta http-equiv="keywords" content="WEB-AREA, web-area, web area, web, area, WEB-AREA.org, web-area.org, webara.org,strefa webmastera, strefa, webmastera, webmaster, WEBMASTER, Webmaster, tworzenie stron www, www, strona www, internet, world wide web, design, designerswo, designer, programowanie, jΩzyki, jΩzyk programowania, php, cgi, html, java, javascript, sgml, wml, PHP, CGI, HTML, Java, JavaScript, SGML, WML, wap, standarty, skrypty php, skrypty cgi, applety java, aplety, aplety java, aplety javy, applety javy, javascripty, JavaScripty, skrypty javy, publikowanie witryny, witryna, tworzenie witryn, tworzenie sklep≤w internetowych, edytory html, tekstowe edytory html, projekt syf, szablony, Szablony, free, darmowe, zadarmo, subskrypcja, lista mailingowa, mailing list, lista subskrypcyjna, bannery, formularze, liczniki, ksiΩgi go╢ci, linki, fora, pliki i operacje na nich, statystyki, wyszukiwarki, rankingi, darmowe skrypty, Jakub Filipowski, Jan Filipowski, katalog, Katalog stron zwi▒zanych z tematyk▒ webmasterstwa, webmasterswo, magazyn www, style, CSS, XML, ASP, jΩzyki skryptowe, generatory, anarchizm">
  13. </head>
  14. <body>
  15.  
  16.  
  17. <div align="left">
  18. <table border="0" cellpadding="0" cellspacing="0" width="770">
  19. <tr>
  20. <td width="770" valign="top" colspan="3">
  21.  
  22.     <table border="0" cellpadding="0" cellspacing="0" width="770">
  23.     <tr>
  24.     <td width="166" valign="top"><a href="index.php"><img src="img/logo.gif" border="0" width="166" height="70" alt="WEB-AREA.org - serwis webmaster≤w"></a></td>
  25.     <td width="604" height="70" background="img/gora.gif" align="right"><iframe src="banner.php" MARGINWIDTH="0" MARGINHEIGHT="0" HSPACE="0" VSPACE="0" FRAMEBORDER="0" SCROLLING="NO" WIDTH="468" HEIGHT="60">
  26. </iframe></td>
  27.     </tr></table>
  28.  
  29. </td>
  30. </tr><tr>
  31. <td width="770" valign="top" colspan="3">
  32.     <table border="0" cellpadding="1" cellspacing="0" width="770">
  33.         <tr><form method="post" action="szukaj.php">
  34.         <td width="260">    <input type="text" name="zapytanie" size="15"> <input type="submit" value="SZUKAJ"> <span class="m"><a href="index.php@url=redakcja_2Fszukaj">Jak szukaµ?</a></span></td></form>
  35.         <td width="510">
  36.         
  37.         <p align="center">
  38.         <a href="index.php@id=206" class="gora">Konkurs</a>   
  39.         <a href="subskrypcja/nowa.php" class="gora">Za│≤┐ subskrypcjΩ</a>    
  40.         <a href="index.php@id=128" class="gora">Katalog</a>    
  41.         <a href="forum.php" class="gora">Forum</a>    
  42.         <a href="index.php@id=15" class="gora">BeginnerZone</a>
  43.         
  44.         </td>
  45.     </tr></table>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td width="142" valign="top">
  50.     
  51.     <br>
  52.     <table border="0" cellpadding="0" cellspacing="0" width="142">
  53.     <tr>
  54.     <td width="142" valign="top"><img src="img/menu.gif" border="0" width="142" height="13" alt="MENU"></td>
  55.     </tr>
  56.     <tr>
  57.     <td width="142" valign="top" background="img/okno1.gif">
  58.     <img src="img/s.gif" width="9" height="8"><b class="menu1">KURSY</b><br>
  59.       - <a href="index.php@id=50" class="menu">HTML</a><br>
  60.       - <a href="index.php@id=40" class="menu">CSS</a><br>
  61.       - <a href="index.php@id=62" class="menu">Java</a><br>
  62.       - <a href="index.php@id=145" class="menu">PHP</a><br>
  63.       - <a href="index.php@id=39" class="menu">CGI</a><br>
  64.       - <a href="index.php@id=5" class="menu">ASP</a><br>
  65.       - <a href="index.php@id=182" class="menu">WML</a><br>
  66.       - <a href="index.php@id=190" class="menu">XML</a><br>
  67.       - <a href="index.php@id=159" class="menu">SGML</a><br>
  68.  
  69.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SKRYPTY</b><br>
  70.       - <a href="index.php@id=78" class="menu">JavaScript</a><br>
  71.       - <a href="index.php@id=135" class="menu">PHP</a><br>
  72.       - <a href="index.php@id=30" class="menu">CGI</a><br>
  73.  
  74.     <img src="img/s.gif" width="9" height="8"><b class="menu1">INNE</b><br>
  75.       - <a href="index.php@id=59" class="menu">Szablony</a><br>
  76.       - <a href="forum.php" class="menu">Forum</a><br>
  77.       - <a href="index.php@id=61" class="menu">Webmasterska lista</a><br>
  78.       - <a href="index.php@id=128" class="menu">Katalog</a><br>
  79.       - <a href="index.php@id=15" class="menu">BeginnerZone</a><br>
  80.       - <a href="index.php@id=206" class="menu">Konkurs</a><br>
  81.     
  82.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SUBSKRYPCJA</b><br>
  83.       - <a href="subskrypcja/nowa.php" class="menu">Za│≤┐</a><br>
  84.       - <a href="subskrypcja/admin.php" class="menu">Administracja</a><br>
  85.  
  86.     <img src="img/s.gif" width="9" height="8"><b class="menu1">REDAKCJA</b><br>
  87.       - <a href="index.php@id=156" class="menu">Sk│ad</a><br>
  88.       - <a href="index.php@id=157" class="menu">Wsp≤│praca</a><br>
  89.       - <a href="index.php@id=158" class="menu">Reklama</a></td>
  90.     </tr>
  91.     <tr>
  92.     <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  93.     </tr></table>
  94.  
  95. </td>
  96. <td width="486" valign="top"><br>
  97.     <div align="center">
  98.     <table border="0" cellpadding="0" cellspacing="0" width="460">
  99.     <tr>
  100.     <td width="460" valign="top"><span class="nag">Przeszukiwanie stron</span>
  101. <p align="justify">Je┐eli jeste╢ autorem wiΩkszej witryny, to napewno zastanawia│e╢ siΩ kiedy╢ nad umieszczeniem na swojej stronie wyszukiwarki zasob≤w. Istnieje wiele takich aplikacji napisanych w Perlu i PHP, ale nigdy nie bΩd▒ one w 100% dostosowane do twojej strony. Dlatego pomogΩ ci w napisaniu skromnej przeszukiwarki strony.</p>
  102. <p align="justify">Mamy do wyboru trzy warianty co do samego odnajdywania stron. Pierwsza to po prostu przeszukiwanie stron umieszczonych w jakim╢ katalogu. Druga to przeszukiwanie bazy danych z zawarto╢ci▒ wszystkich tekst≤w, kt≤re na swojej stronie zamieszczasz. I wreszcie trzecia - przeszukiwanie na podstawie s│≤w kluczowych. W tym artykule opisze wszystkie trzy typy, razem z kodami ╝r≤d│owymi. Najpierw jednak musimy utworzyµ dokument HTML, w kt≤rym umieszczeny bΩdzie formularz przeszukiwarki. BΩdzie on mia│ postaµ:<br>
  103. <pre><html>
  104. <body>
  105. <form method="post" action="szukaj.php">
  106. <input type="text" name="lancuch">
  107. <input type="submit value="OK">
  108. </form>
  109. </body>
  110. </html></pre>
  111. </p>
  112. <h3>Przeszukiwarka plik≤w</h3>
  113. <p align="justify">W tym rodzaju przeszukiwania, najprostszym je┐eli chodzi o u┐yte technologie, ale najtrudniejszym algorytmicznie, u┐ywaµ bΩdziemy rekurencji. Rekurencja istnieje wtedy, je┐eli w jakiej╢ funkcji wywo│ujemy ni▒ sam▒. Dla przyk│adu gdy chcemy obliczyµ 4! (1*2*3*4) mo┐emy to zapisaµ tak:<br><br>
  114. $l = 1;<br>
  115. for($i=1;$i<=4;$i++) $l*=$i;<br>
  116. echo $l;<br><br>
  117. Lub tak:<br><br>
  118. <pre>function silnia($l) {
  119.         if($l>1) {
  120.                 $wyn = $l*silnia($l-1);
  121.                 return $wyn;
  122.         }
  123.         else return 1;
  124. }
  125. $wyn = silnia(4);
  126. echo $wyn;</pre>
  127. <p align="justify">W pierwszym przypadku tworzymy pΩtle w kt≤rej zmienna l jest mno┐ona przez kolejne warto╢ci i. W drugim przypadku tworzymy funkcjΩ silnia() w kt≤rej sprawdzamy czy parametr l jest wiΩkszy od 1, je┐eli tak to funkcja zwraca warto╢µ tej parametru i funkcji silnia o parametrze o jeden mniejszym, je┐eli nie zwraca warto╢µ 1. Tak wiΩc wydaje siΩ, ┐e wszystko to jest liczone od ty│u (zaczynaj▒c od 4). Ot≤┐ nie. Liczone jest w takiej samej kolejno╢ci jak pierwsza mo┐liwo╢µ. To koniec teorii, teraz praktyka, czyli wracamy do przeszukiwarki...</p>
  128. <p align="justify">Pierwsze co musimy napisaµ to sam element przeszukiwawczy. Wygl▒da on tak:<br><br>
  129. <pre>function szukaj($w) {
  130.   global $ilosc;
  131.   global $co;
  132.   global $katal;
  133.   $kat = dir($w);
  134.   $i=0;
  135.   while($nazwa=$kat->read()) {
  136.     $tab[$i]=$nazwa;
  137.     ++$i;
  138.     }
  139.     for($i=0;$i<count($tab);$i++) {
  140.        if(strpos($tab[$i],".")==0&&$i>1) {
  141.        szukaj($w."/".$tab[$i]);
  142.         }
  143.     else {
  144.        list($nazwa, $rozszerz) = explode(".",$tab[$i]);
  145.        if($rozszerz=="htm") {
  146.           $il=sprawdz($w."/".$tab[$i]);
  147.           if($il>0) {
  148.           $ilosc[] = $il;
  149.                $co[] = $tab[$i];
  150.        $katal[] = $w;
  151.           }
  152.                             }
  153.                      }
  154.         }
  155. }</pre>
  156. <p align="justify">BΩde t│umaczy│ po linijce. Pierwsza to oczywi╢cie nag│≤wek funkcji o jednym parametrze: w. Oznacza on katalog, kt≤ry funkcja ma przeszukaµ. MuszΩ tutaj dodaµ, ┐e rekurencja nie jest potrzebna przy serwisach, w kt≤rych strony przechowywana jest w g│≤wnym katalogu i katalogach, w kt≤rych ju┐ nie ma katalog≤w. Trzy kolejne linie ustalaj▒, ┐e ilosc, co i katal co zmiennymi globalnymi. S▒ to zmienne typu tablicowego i to w nich bΩdziemy przechowywaµ odpowiednio: ilo╢µ wyszukanych s│≤w odpowiadaj▒cych zapytaniu, nazwΩ pliku z rozszerzeniem oraz katalog w kt≤rym owy siΩ znajduje. W kolejnej linijce tworzymy obiekt kat klasy dir(), zdefiniowanej pierwotnie przez tw≤rc≤w PHP. Klasa posiada metody pozwalaj▒ce odczytywaµ nazwy zawartych w katalogu plik≤w i innych katalog≤w. KlasΩ tΩ wywo│ujemy dla warto╢ci naszego parametru w (katalogu przeszukiwanego). Tworzymy zmienn▒ i o warto╢ci 0, kt≤ra bΩdzie przechowywa│a ilo╢µ element≤w znajduj▒cych siΩ w katalogu. Dalej jest pΩtla odczytuj▒ca nazwy tych element≤w i umieszczaj▒ca je w tablicy o nazwie tab. No i kolejna pΩtla. Tym razem sprawdzamy na pocz▒tku tej pΩtli czy w nazwie elementu katalogu jest kropka (czyli czy jest plikiem), je┐eli nie to wywo│ujemy funkcjΩ szukaj dla parametru o warto╢ci tego katalogu kt≤ry teraz jest przeszukiwany + znak "/" + nazwa elementu katalogu. Je┐eli tak to dzielimy nazwΩ na dwie czΩ╢ci: nazwΩ i rozszerzenie. Potem sprawdzamy czy rozszerzenie jest r≤wne "htm", czyli czy jest dokumentem html. Oczywi╢cie mo┐na to zmieniµ na dowolne rozszerzenie. Zapisuje warto╢µ funkcji sprawdz(), kt≤rej bΩdzie za chwilΩ, do zmiennej il. Je┐eli il bΩdzie wiΩkszy od 0 (czyli w pliku bΩd▒ wystΩpowa│y wyrazy o warto╢ci takiej samej jak zapytanie) to dodajemy do tablic globalnych ilosc, co i katal odpowiednie warto╢ci: ilo╢µ wyraz≤w pasuj▒cych do zapytania, nazwa pliku wraz z rozszerzeniem oraz katalog w kt≤rym znajduje siΩ owy plik. I to koniec naszej pΩtli i funkcji. Je┐eli nie zrozumia│e╢ to albo przeczytaj to jeszcze raz, albo uwierz, ┐e to dzia│a...</p>
  157. <p align="justify">Teraz zabierzemy siΩ za funkcjΩ sprawdzaj▒c▒ ile jest wyraz≤w pasuj▒cych do zapytania, czyli do sprawdz(). Oto jej listing:<br><br>
  158. <pre>function sprawdz($plik) {
  159.   global $lancuch;
  160.   $il=0;
  161.   $file = fopen($plik,"r");
  162.   while(!feof($file)) {
  163.     $linia = strtoupper(fgets($file,100));
  164.     $pozycja = strpos($linia,$lancuch[0]);
  165.     if(is_integer($pozycja)) {
  166.       while(is_integer($pozycja)) {
  167.         $l=strstr($linia,$lancuch);
  168.         $m=strstr($linia,".".$lancuch);
  169.         if(strlen($l)>0&&!$m) {
  170.           $linia=substr($l,strlen($lancuch)-1);
  171.           ++$il;
  172.                 }
  173.           else break;
  174.           $pozycja = strpos($linia,$lancuch[0]);
  175.             }    
  176.         }
  177.     }
  178.     fclose($file);
  179.     return $il;
  180. }</pre>
  181. <p align="justify">Pierwsza linia to oczywi╢cie nag│≤wek funkcji sprawdz() z parametrem plik. To w│a╢nie plik, w kt≤rym bΩdziemy szukali zapytania. Potem ustalana jest zmienna lancuch jako globalna. Zmienna lancuch przechowuje zapytanie z wyszukiwarki. NastΩpnie ustalamy warto╢µ zmiennej il, przechowuj▒cej ilo╢µ odnalezionych wyraz≤w, jako 0. Otwieramy do odczytu nasz plik. Tworzymy pΩtle ko±cz▒c▒ siΩ w momencie odczytania pliku do ko±ca. Pobieramy liniΩ z pliku i zamieniamy wszystkie literki na wielkie. Potem pobieramy pozycjΩ pierwszego znaku z zapytania w lini. Je┐eli jest wiΩksza od zera to tworzymy pΩtle, kt≤ra bΩdzie dzia│a│a, a┐ w linii pierwszego znaku z zapytania nie bΩdzie. Odnajdujemy pierwsze wyst▒pienie zapytania i od tego miejsca zapisujemy liniΩ w zmiennej l. Potem wyszukujemy jeszcze w pliku │a±cucha o warto╢ci: "."+zapytanie. Sprawdzamy czy odnaleziono zapytanie w linii, poprzez sprawdzenie d│ugo╢ci │a±cucha l, oraz czy przed tym odnalezionym zapytaniem znajdowa│a siΩ kropka (jest to istotne, je┐eli przy wyszukiwaniu nie chcemy braµ pod uwagΩ link≤w i osoba szukaj▒ca mo┐e poszukiwaµ zwrot≤w PHP i HTML, poniewa┐ na stronie mog▒ znajdowaµ siΩ odno╢niki do stron o rozszerzeniu .php i .html). Je┐eli kropki nie odnalaz│ a odnaleziono to zapytanie, skrypt ucina przeszukiwan▒ liniΩ od miejsca pocz▒tku odnalezionego │a±cucha do jego ko±ca i zwiΩksza ilo╢µ odnalezionych zapyta±. W innym wypadku przerywa pΩtle. Potem znowu wyszukuje miejsca pierwszego wyst▒pienia pierwszego znaku z zapytania. To ko±czy pΩtle, zapytanie i pΩtle sprawdzaj▒c▒ czy jest ju┐ koniec pliku. Potem zamykamy ten plik i zwracamy warto╢µ zmiennej il, czyli ilo╢µ odnalezionych zapyta± w pliku. I to koniec ten funkcji. Zastosuj siΩ do instrukcji podanej pod koniec ostatniego opisu funkcji.</p>
  182. <p align="justify">No i teraz zako±czenie naszego skryptu, czyli korzystanie z funkcji szukaj() i wy╢wietlanie wynik≤w przeszukiwania. Oto listing:<br><br>
  183. <pre>$ilosc = array();
  184. $co = array();
  185. $katal = array();
  186. $lancuch = strtoupper($lancuch);
  187. szukaj("/www");
  188. $zmienna=0;
  189. if(count($ilosc)>0) {
  190.     for($i=0;$i<count($ilosc);$i++)
  191.         for($j=$i+1;$j<count($ilosc);$j++) 
  192.             if($ilosc[$j]>$ilosc[$i]) {
  193.                 $zmienna=$ilosc[$j];
  194.                 $ilosc[$j]=$ilosc[$i];
  195.                 $ilosc[$i]=$zmienna;
  196.                 $zmienna=$co[$j];
  197.                 $co[$j]=$co[$i];
  198.                 $co[$i]=$zmienna;
  199.                 $zmienna=$katal[$j];
  200.                 $katal[$j]=$katal[$i];
  201.                 $katal[$i]=$zmienna;
  202.             }
  203.     for($i=0;$i<count($ilosc);$i++) {
  204.     echo "W <a href=\"".$katal[$i]."/".$co[$i]."\">
  205.     ".$katal[$i]."/".$co[$i]."
  206.     </a> znaleziono ".$ilosc[$i]." takich wyra┐e±<br>\n";
  207.     }
  208. }
  209. else echo "Nie znaleziono!";</pre>
  210. <p align="justify">Na pocz▒tku tworzymy trzy puste tablice o nazwach: ilosc, co i katalog, kt≤rych funkcje wyja╢ni│em wcze╢niej. Potem wszystkie literki z zapytania, kt≤re przechowujemy w zmiennej lancuch, zamieniamy na wielkie. Jest to potrzebne przy przeszukiwaniu, je┐eli chcemy, ┐eby skrypt nie zwraca│ uwagi na wielko╢µ liter. Potem uruchamiamy nasz▒ funkcjΩ szukaj() dla parametru l r≤wnemu dok│adnemu adresowi katalogu w kt≤rym jest strona (u mnie "/www"). Je┐eli chcesz przetestowaµ ten skrypt u siebie w domu na Windowsie, to wiedz, ┐e aby przeszukaµ dowolny katalog, dajmy c:\www, musisz wpisaµ tak jak ja /www. Przy c:\www\costam wpisujesz /www/costam. Wracam do skryptu... Nadajemy zmiennej warto╢µ 0. Zmienna bΩdzie u┐ywana do porz▒dkowania informacji w tablicach jako miejsce gdzie bΩdziemy chwilowo przechowywaµ informacje z kom≤rki tablicy. Je┐eli ilo╢µ element≤w z tablicy ilosc (i zarazem wszystkich innych) jest wiΩksza od zera to porz▒dkujemy informacje z tablic. W innym wypadku wy╢wietlamy napis "Nie znaleziono!". Na czym polega porz▒dkowanie informacji. Ot≤┐ ustawimy tak elementy tablic, by u│o┐y│y siΩ w kolejno╢ci od najwiΩkszej ilo╢ci odnalezionych wyraz≤w w pliku do najmniejszej. Zrobimy to tzw. metod▒ b▒belkow▒. Zworzymy pΩtle for od 0 do ko±ca tablic (o zmiennej przechowuj▒cej stan pΩtli i), w niej drug▒ pΩtle od aktualnej warto╢ci w pΩtli pierwszej (czyli warto╢ci i) do ko±ca tablic (o zmiennej przechowuj▒cej stan pΩtli j). W niej pytamy siΩ czy warto╢µ elementu tablicy ilosc o indeksie j jest wiΩksza od elementu o indeksie i. Je┐eli tak zapisujemy do naszej zmiennej zmienna warto╢µ elementu tablicy o indeksie j, jako ten element podstawiamy kom≤rkΩ o indeksie i, a jako kom≤rkΩ tablicy o indeksie i podstawiamy warto╢µ zmiennej, czyli poprzedni▒ warto╢µ elementu j tablicy ilosc. Tak samo robimy przy kolejnych tablicach. Ko±czymy zapytanie, potem obie pΩtle. Tworzymy pΩtle for od 0 do ko±ca tablicy ilosc. Wypisuje ona taki tekst: "W <a href="katalog/costam.htm">katalog/costam.htm</a> znaleziono x takich wyra┐e±", gdzie katalog to katalog w kt≤rym znajduje siΩ strona (oczywi╢cie katalog≤w mo┐e byµ wiΩcej), a costam to nazwa strony i x to liczba odnalezionych wyra┐e±. I tym ko±czymy pierwsz▒ wyszukiwarkΩ. Oto jej listing:<br>
  211. <pre><?PHP
  212. function sprawdz($plik) {
  213.     global $lancuch;
  214.     $il=0;
  215.     $file = fopen($plik,"r");
  216.     while(!feof($file)) {
  217.         $linia = strtoupper(fgets($file,100));
  218.         $pozycja = strpos($linia,$lancuch[0]);
  219.         if(is_integer($pozycja)) {
  220.         while(is_integer($pozycja)) {
  221.         $l=strstr($linia,$lancuch);
  222.         $m=strstr($linia,".".$lancuch);
  223.         if(strlen($l)>0&&!$m) {
  224.         $linia=substr($l,strlen($lancuch)-1);
  225.         ++$il;
  226.         }
  227.         else break;
  228.         $pozycja = strpos($linia,$lancuch[0]);
  229.         }    
  230.         }
  231.     }
  232.     fclose($file);
  233.     return $il;
  234. }
  235. function szukaj($w) {
  236.     global $ilosc;
  237.     global $co;
  238.     global $katal;
  239.     $kat = dir($w);
  240.     $i=0;
  241.     while($nazwa=$kat->read()) {
  242.         $tab[$i]=$nazwa;
  243.         ++$i;
  244.     }
  245.     for($i=0;$i<count($tab);$i++) {
  246.                 if(strpos($tab[$i],".")==0&&$i>1) {
  247.             szukaj($w."/".$tab[$i]);
  248.                 }
  249.         else {
  250.             list($nazwa, $rozszerz) = explode(".",$tab[$i]);
  251.             if($rozszerz=="htm") {
  252.               $il=sprawdz($w."/".$tab[$i]);
  253.                 if($il>0) {
  254.                   $ilosc[] = $il;
  255.                   $co[] = $tab[$i];
  256.                   $katal[] = $w;
  257.                 }
  258.             }
  259.         }
  260.         }
  261. }
  262. $ilosc = array();
  263. $co = array();
  264. $katal = array();
  265. $lancuch = strtoupper($lancuch);
  266. szukaj("/www");
  267. $zmienna=0;
  268. if(count($ilosc)>0) {
  269.     for($i=0;$i<count($ilosc);$i++)
  270.         for($j=$i+1;$j<count($ilosc);$j++) 
  271.             if($ilosc[$j]>$ilosc[$i]) {
  272.                 $zmienna=$ilosc[$j];
  273.                 $ilosc[$j]=$ilosc[$i];
  274.                 $ilosc[$i]=$zmienna;
  275.                 $zmienna=$co[$j];
  276.                 $co[$j]=$co[$i];
  277.                 $co[$i]=$zmienna;
  278.                 $zmienna=$katal[$j];
  279.                 $katal[$j]=$katal[$i];
  280.                 $katal[$i]=$zmienna;
  281.             }
  282.     for($i=0;$i<count($ilosc);$i++) {
  283.     echo "W <a href=\"".$katal[$i]."/".$co[$i]."\">
  284.     ".$katal[$i]."/".$co[$i]."
  285.     </a> znaleziono ".$ilosc[$i]." takich wyra┐e±<br>\n";
  286.     }
  287. }
  288. else echo "Nie znaleziono!";
  289. ?></pre></p>
  290. <h3>Przeszukiwarka bazy danych</h3>
  291. <p align="justify">Przeszukiwanie bazy danych jest o wiele │atwiejsze, a to dlatego, ┐e bazy danych s│u┐▒ w│a╢nie │atwiejszemu wyszukiwaniu. Wystarczy wpisanie <code>SELECT * FROM tabela WHERE kolumna='3'</code> i wy╢wietl▒ nam siΩ wszystkie wiersze bazy, kt≤rych kolumna ma warto╢µ 3. Jednak jak pewnie zauwa┐y│e╢ zapytanie SQL szuka tylko kolumny o tej warto╢ci i ┐adnej innej. Przy przeszukiwaniu bazy w celu znalezienia jakiego╢ wyra┐enia kolumna na pewno nie bΩdzie mia│a takiej samej warto╢ci jak szukane wyra┐anie. S│owo to bΩdzie siΩ znajdowa│o w╢r≤d dziesi▒tek, setek a nawet tysiΩcy innych wyraz≤w. Dlatego ┐eby znale╝µ jakie╢ wyra┐enie w ca│ej zawarto╢ci kolumny nale┐y u┐yµ zapytania SQL <code>SELECT * FROM tabela WHERE kolumna LIKE '%$zapytanie%'</code>. Wtedy zostan▒ odnalezione wszystkie wiersze w kt≤rych kolumna zawiera szukane zapytanie. Zapewne zauwa┐y│e╢ znaczki "%" ko│o zmiennej zapytanie. To w│a╢nie one oznaczaj▒, ┐e mog▒ istnieµ znaki ko│o zapytania. Jeden znak obok zapytania jest oznaczany "_". No to zabierzmy siΩ za skrypt. Oto jego tre╢µ:<br>
  292. <pre><?PHP
  293. $pol = mysql_connect();
  294. mysql_select_db("jasio");
  295. $wyn = mysql_query("SELECT * FROM strony WHERE zawartosc 
  296.     LIKE '%$lancuch%' ORDER BY id");
  297. $id = array();
  298. $il = array();
  299. $tytul = array();
  300. if(mysql_num_rows($wyn)>0) {
  301.         while($tab = mysql_fetch_array($wyn)) {
  302.         $ill = 0;
  303.         do {
  304.         $l = strstr($tab['zawartosc'],$lancuch);
  305.         $m = strstr($tab['zawartosc'],".".$lancuch);
  306.         if(strlen($l)>0&&!$m) {
  307.         $tab['zawartosc'] = substr($l,strlen($lancuch));
  308.         ++$ill;
  309.         } else break;
  310.         $pozycja = strpos($tab['zawartosc'],$lancuch[0]);
  311.         } while(is_integer($pozycja));
  312.         $il[] = $ill;
  313.         $id[] = $tab['id'];
  314.         $tytul[] = $tab['tytul'];
  315.         }
  316.         for($i=0;$i<count($il);$i++)
  317.         for($j=$i+1;$j<count($il);$j++)
  318.             if($il[$j]>$il[$i]) {
  319.                 $zmienna=$il[$j];
  320.                 $il[$j]=$il[$i];
  321.                 $il[$i]=$zmienna;
  322.                 $zmienna=$id[$j];
  323.                 $id[$j]=$id[$i];
  324.                 $id[$i]=$zmienna;
  325.                 $zmienna=$tytul[$j];
  326.                 $tytul[$j]=$tytul[$i];
  327.                 $tytul[$i]=$zmienna;
  328.             }
  329.     for($i=0;$i<count($il);$i++) {
  330.     echo "W <a href=\"strona.php?id=".$id[$i]."\">
  331.         ".$tytul[$i]."</a>
  332.          odnaleziono ".$il[$i]." 
  333.          takich wyra┐e±!<br>\n";
  334.     }
  335. }
  336. else echo "Wyraz≤w pasuj▒cych do zapytania nie odnaleziono!";
  337. ?></pre>
  338. <p align="justify">Pierwsze trzy linijki to rozpoczΩcie skryptu PHP, │▒czenie siΩ do systemu baz danych MySQL i wyb≤r bazy danych. Teraz szukamy w tabeli strony w kolumnie zawartosc nasz lancuch. Za│o┐y│em tutaj, ┐e tabela jest tworzona przez polecenie:<br>
  339. <pre>CREATE TABLE strony(
  340. id int,
  341. autor varchar(30),
  342. email varchar(30),
  343. tytul text,
  344. zawartosc text)</pre>
  345. <p align="justify">Teraz tworzymy trzy tablice: id, il i tytul, kt≤re bΩd▒ przechowywa│y odpowiednio id odnalezionej strony, ilo╢µ wyst▒pie± wyra┐enia na tej stronie i tytu│ strony. Teraz sprawdzamy czy ilo╢µ wierszy obiΩtych zapytaniem SQL jest wiΩksza od zera. Je┐eli nie to wy╢wietla siΩ napis: "Wyraz≤w pasuj▒cych do zapytaniem nie odnaleziono!". Je┐eli tak to tworzymy pΩtle, kt≤ra "╢ci▒ga" nazwy i warto╢ci kolumn z wynik≤w wyszukiwania. Przypisujemy zmiennej ill warto╢µ 0. Zmienna ta bΩdzie przechowywa│a ilo╢µ wyst▒pie± │a±cucha w aktualnej stronie. Teraz otwieramy pΩtle do while(), dzia│aj▒c▒ do p≤ki w zmiennej tab['zawartosc'] odnajdywany jest pierwszy znak z │a±cucha. W pΩtli przypisujemy warto╢µ zmiennej l r≤wn▒ odciΩtej od pocz▒tku wyst▒pienia naszego zapytania a┐ do ko±ca zawarto╢ci strony. Potem przypisujemy zmiennej m warto╢µ odciΩtej od fragmentu: ".$lancuch" do ko±ca zawarto╢ci strony. Teraz sprawdzamy czy │a±cuch siΩ zawiera w zawarto╢ci strony, czyli czy dlugo╢µ l jest wiΩksza od 0 oraz czy m ma warto╢µ FALSE, czyli czy przed wystΩpuj▒cym w bazie │a±cuchu nie znajduje siΩ kropka. Je┐eli zapytanie bΩdzie mia│o warto╢µ TRUE to ucinamy zmienna tab['zawartosc'] do miejsca gdzie ko±czy│o siΩ w niej wyra┐enie szukane i zwiΩkaszmy ill o 1. Je┐eli warto╢µ FALSE to przerywamy pΩtle. Sprawdzamy potem pozycjΩ pierwszej litery zapytania w zmiennej tab['zawartosc'], czyli zmiennej przechowuj▒cej zawarto╢µ ca│ej strony. Potrzebne to jest do pΩtli. Po zako±czeniu pΩtli dodajemy do tablic il, id i tytul nowe elementy zawieraj▒ce informacje o tej stronie. Potem ko±czymy pΩtle "╢ci▒gaj▒c▒" wiersze do tablicy i sortujemy informacje zawarte w tablicach id, il i tytul metod▒ b▒belkow▒ wed│ug warto╢ci il. Na ko±cu wy╢wietlamy wyniki wyszukiwania. Tutaj za│o┐y│em, ┐e skryptem wy╢wietlaj▒cym poszczeg≤lne strony jest strona.php, a identyfikatorem strony jest id. I to wszystko je┐eli chodzi o przeszukiwarkΩ bazy.</p>
  346. <h3>Przeszukiwanie bazy ze s│owami kluczowymi</h3>
  347. <p align="justify">Jest to najprostszy algorytmicznie spos≤b do przeszukiwania stron. Nie potrzebne bΩdzie ju┐ tu sortowanie wed│ug ilo╢ci znalezionych wyra┐e±, bo przecie┐ bΩdziemy operowali na s│owach kluczowych. BΩdzie nam tu potrzebna tabela utworzona w ten spos≤b:<br>
  348. <pre>CREATE TABLE strony(
  349. id int,
  350. autor varchar(30),
  351. email varchar(30),
  352. tytul text,
  353. slowak text,
  354. zawartosc text,
  355. data date)</pre>
  356. <p align="justify">Kolumna slowak to oczywi╢cie s│owa kluczowe, a data to data dodania strony. Oto ca│y skrypt przeszukiwarki:
  357. <pre><?PHP
  358. $pol = mysql_connect();
  359. mysql_select_db("jasio");
  360. $lancuch = strtolower($lancuch);
  361. $wyn = mysql_query("SELECT * FROM teksty WHERE slowak 
  362.         LIKE '%$lancuch%' ORDER BY id");
  363. if(mysql_num_rows($wyn)>0) {
  364.         while($tab = mysql_fetch_array($wyn)) {
  365.                 echo "<p align=\"justify\">
  366.     <a href=\"strona.php?id=".$tab['id']."\">
  367.     ".$tab['tytul']."</a><br>
  368.     <div align=\"right\">
  369. <a href=\"mailto:".$tab['email']."\">".$tab['autor']."</a>
  370.         ".$tab['data']."</div>\n";
  371.         }
  372. }
  373. else echo "Nie znaleziono!";
  374. mysql_close($pol);
  375. ?></pre>
  376.  
  377. <p align="justify">Na pocz▒tku │▒czymy siΩ z baz▒ "jasio", potem zamieniamy wszystkie literki z zapytania na ma│e. Wyszukujemy w bazie wierszy kt≤rych kolumna slowak zawiera lancuch porz▒dkuj▒c wed│ug wielko╢ci id (od najmniejszego do najwiΩkszego). Je┐eli ilo╢µ takich wierszy jest wiΩksza od 0, czyli je┐eli istniej▒ takie wiersze, to w pΩtli "╢ci▒gamy" informacje z bazy do tablicy asocjacyjnej i wy╢wietlamy tekst. Zak│ada│em w nim, ┐e skryptem ob│uguj▒cym strony jest strona.php. Je┐eli nie ma wierszy w kt≤rych kolumnie slowak zawarty jest lancuch to wy╢wietla tekst: "Nie znaleziono!".</p>
  378. <h3>Zako±czenie</h3>
  379. <p align="justify">Mam nadzieje, ┐e ten artyku│ przybli┐y│ wam chocia┐ troche metody przeszukiwawcze. Oczywi╢cie wszystkie skrypty, kt≤re tu umie╢ci│em s▒ mojego autorstwa i mo┐esz ich u┐ywaµ na swojej stronie.</p>
  380. <p align="right">Autor: <a href="mailto:yashke@poczta.fm?Subject=Przeszukiwanie stron">Jan Filipowski</a></p><br></td>
  381.     </tr></table>
  382.     </div>
  383. </td>
  384. <td width="142" valign="top">
  385.  
  386.         <br>
  387.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  388.         <tr>
  389.         <td width="142" valign="top"><img src="img/login.gif" border="0" width="142" height="13" alt="LOGIN"></td>
  390.         </tr>
  391.         <tr>
  392.         <td width="142" valign="top" background="img/okno1.gif">
  393.         
  394.             
  395.             <div align="center">
  396.             <table cellpadding="0" cellspacing="2" border="0" width="98%">
  397.             <form method="post" action="subskrypcja/login.php">
  398.             <tr><td width="30%"><span class="t">Login:</span></td><td width="68%"><input type="text" name="login" size="15" class="login"></td></tr>
  399.             <tr><td width="30%"><span class="t">Has│o:</span></td><td width="68%"><input type="password" name="haslo" size="15" class="login"></td></tr>
  400.             
  401.             <tr><td colspan="2"><center><input type="image" src="img/ok.gif"></td></tr>
  402.             </form></table></div>
  403.         
  404.         </td>
  405.         </tr>
  406.         <tr>
  407.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  408.         </tr></table>
  409.  
  410.         <br>
  411.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  412.         <tr>
  413.         <td width="142" valign="top"><img src="img/art.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  414.         </tr>
  415.         <tr>
  416.         <td width="142" valign="top" background="img/okno1.gif">
  417.         
  418.         <span class="m">
  419.         
  420.          -<a href="index.php@id=1" class="menu">"Edytory HTML'a"</a><br>
  421.          -<a href="index.php@id=2" class="menu">"Publikowanie witryny"</a><br>
  422.          -<a href="index.php@id=3" class="menu">"PHP w domu"</a><br>
  423.          -<a href="index.php@id=4" class="menu">"Przeszukiwanie stron"</a><br>
  424.          -<a href="index.php@id=204" class="menu">"Wprowadzenie do Javy"</a><br>
  425.          -<a href="index.php@id=210" class="menu">"Grafika w PHP"</a>
  426.         </span>
  427.         
  428.         </td>
  429.         </tr>
  430.         <tr>
  431.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  432.         </tr></table>
  433.         
  434.         <br>
  435.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  436.         <tr>
  437.         <td width="142" valign="top"><img src="img/stat.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  438.         </tr>
  439.         <tr>
  440.         <td width="142" valign="top" background="img/okno1.gif"><div align="left"><table border="0" cellpadding="0" cellspacing="0" width="138"><tr><td width="138"><ol><li><a href="index.php@id=135" class="stat">PHP - przyk│adowe skrypty</a> <span class="maleczarne">(1491)</span><br><li><a href="index.php@id=59" class="stat">Szablony 1</a> <span class="maleczarne">(833)</span><br><li><a href="index.php@id=145" class="stat">Kurs PHP</a> <span class="maleczarne">(817)</span><br><br><span class="maleczarne">ú▒cznie: 24043</span>        </ol>
  441.         <center><a href="http://stat.webmedia.pl/cgi-bin/anal?webarea" target="_blank">
  442. <img border=0 src="http://stat.webmedia.pl/cgi-bin/stat?webarea&stat4ur" alt="stat4u" width="40" height="10"></a></center>
  443.         </td></tr></table></div>
  444.         </td>
  445.         </tr>
  446.         <tr>
  447.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  448.         </tr></table>
  449.         
  450.         <br>
  451.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  452.         <tr>
  453.         <td width="142" valign="top"><img src="img/sponsor.gif" border="0" width="142" height="13" alt="SPONSOR"></td>
  454.         </tr>
  455.         <tr>
  456.         <td width="142" valign="top" background="img/okno1.gif"><br>
  457.         <center><EMBED src="img/beep2.swf" quality=high bgcolor=#000000 WIDTH=120 HEIGHT=30></center>                            
  458.         </td>
  459.         </tr>
  460.         <tr>
  461.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  462.         </tr></table>
  463.  
  464.         <br>
  465.             <div align="center"><table border="0" cellpadding="2" cellspacing="0" width="120">
  466.             <tr>
  467.             <td width="120"><a href="button.php@id=1" target="_blank"><img src="img/cgi.gif" border="0"></a></td>
  468.             </tr>
  469.             <tr>
  470.             <td width="120"><a href="button.php@id=2" target="_blank"><img src="img/ygreg.gif" border="0"></a></td>
  471.             </tr>
  472.             <tr>
  473.             <td width="120"></td>
  474.             </tr>
  475.             </table>
  476.             </div>
  477.         
  478.  
  479. </td>
  480. </tr>
  481. <tr>
  482. <td width="770" valign="top" colspan="3" align="right"><br><br><span class="m">All rights reserved by <a href="mailto:web-area@web-area.org">J&J Filipowscy Design & Code</a></td>
  483. </tr></table></div>
  484.  
  485.  
  486. </body>
  487. </html>