Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Yksinkertainen haku

llr [21.06.2005 10:42:01]

#

Haku joka etsii 'sanan', kaikista tiedostoista jotka ovat $kansion sisällä. Myöhemmin voikin lisäillä tuen monelle sanalle. Ja sitten vielä jälkeenpäin myöhemmin sama preg_matchilla.

<?php

if(isset($_POST["hakusana"])) {
   $haku = $_POST["hakusana"];
}
$sanatyhteensa = 0;
$sivutyhteensa = 0;
$yhteensa = 0;
$osumat = 0;
$kansio = "./Sivut/";
$offset = 5;

//Haun alustus
   if ($dh = opendir($kansio)) {
       while(($luettava = readdir($dh)) !== false) {
       if ($luettava != "." && $luettava != "..") {
          $tiedostomuoto = filetype($kansio.$luettava);
          //Alikansiot
          if($tiedostomuoto <> "dir") {
             $tiedosto = file($kansio.$luettava);
             //Tiedostonimi
             $taulukko[$sivutyhteensa][0] = $luettava;
             for($i = 0; $i < count($tiedosto); $i++) {
                //Poistetaan html
                $tiedosto[$i] = strip_tags($tiedosto[$i]);
                //Sijoitetaan sanat taulukkoon
                $tempsanat = explode(" ", $tiedosto[$i]);
                $tempsanat = str_replace("\n", "", $tempsanat);
                $tempsanat = str_replace("\r", "", $tempsanat);
                //Listataan sanat taulukkoon
                for($a = 0; $a < count($tempsanat); $a++) {
                   $taulukko[$sivutyhteensa][$yhteensa+1] = $tempsanat[$a];
                   $yhteensa++;
                   $sanatyhteensa++;
                }
             }
             $yhteensa = 0;
             $sivutyhteensa++;
          }
       }
       }
       closedir($dh);
   }

//Etsitään sanaa
if(isset($haku)) {
   for($i = 0; $i < $sivutyhteensa; $i++) {
   $alisolut = count($taulukko[$i], COUNT_RECURSIVE);
      for($a = 1; $a < $alisolut; $a++) {
        if( strtolower($taulukko[$i][$a]) == strtolower($haku) )  {
         $osumat++;
            //Tulostus
               echo "<br><hr size=\"1\"><b><a href=\"index.php?s=".$taulukko[$i][0]."&linkit=".$polku."\">".$taulukko[$i][0]."</a></b><br>"; for($s = $a-$offset; $s < $a; $s++) { echo @$taulukko[$i][$s]." "; } echo " <u>".@$taulukko[$i][$a]."</u> "; for($s = $a+1; $s < $a+6; $s++) { echo @$taulukko[$i][$s]." "; } echo "...";
               echo "<br><hr size=\"1\">";
         }
      }
   }
}

//Statsit
if($osumat == 0) {
   echo "<br><b>Ei löytynyt yhtäkään sivua joka vastaa hakuasi:</b> $haku";
} else {
   echo "<br><b>Löytyi $osumat osumaa hakusanalla:</b> $haku";
}
   echo "<br>Etsittiin $sivutyhteensa sivun joukosta jotka sisälsivät yhteensä $sanatyhteensa sanaa.";

?>

anttipanda [30.06.2005 11:48:21]

#

Pieni ehdotus, tämän rivin:

if($taulukko[$i][$a] == $haku or $taulukko[$i][$a] == $haku2 or $taulukko[$i][$a] == $haku3 or $taulukko[$i][$a] == $haku4)

voisi korvata esim. tämmöisellä:

if( strtolower($taulukko[$i][$a]) == strtolower($haku) )

Haku toimisi täysin isoista ja pienistä riippumatta, ja saa pois nuo haku2,haku3 ja haku4:n.

T.M. [04.07.2005 01:35:42]

#

Uh... aikamoista purkkaa.
Miksi pitää tehdä erillinen taulukko tiedoille joista etsitään? Joo-o... Parempiakin vinkkejä jätetty hyväksymättä :/

llr [07.07.2005 02:26:56]

#

Anttipandan neuvosta väärti. Löytyhän sieltä virhekin, eli statsit kohdassa tulostettiinkin kuinka monen rivin joukosta etsittiin eikä sanan.

Onhan toi taulukkoon listaus kyllä aivan turha. Voisihan sen haun tarkistaa suoraankin ilman taulukoita. No toivotaan, että joku tästä jotain oppii.

Tässä vielä haku toiminnassa: http://koti.mbnet.fi/smannila/testi/index.php

makas [25.07.2005 19:33:23]

#

Ei tämä huono ole, ihan hyvä. Muistakaa jätkät ,että jokaisella on oma tapa koodata... =)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta