Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Hakukoneprobleema

juplin [26.01.2006 19:32:40]

#

Tässä olisi tällainen hakukone, mutta siinä on pieni ongelma:

Formi

<form method="GET" action="haku.php">
Hakusana:<br><input type="text" name="search"><br><br><input type="submit" value="Hae!">
</form>

haku.php

<?php
$haku = strtolower(trim($_GET['search']));
if (empty($haku)) { Tyhja(); die; }
if (file_exists("hakusanat.txt") or TiedostoaEiLoydy())
$hakusanat = file("hakusanat.txt");
for ($i = 0; $i < count($hakusanat); $i++)
{
$tiedot = explode("|", $hakusanat[$i]);
if (eregi($haku, $tiedot[0]))
$laskuri++;
}
if ($laskuri == 0) { EiTuloksia(); }
unset ($hakusanat);
unset ($i);
unset ($tiedot);
if ($laskuri == 1) { $laskuri = $laskuri." sivu"; }
if ($laskuri > 1) { $laskuri = $laskuri." sivua"; }
echo "<p>Löydetty yhteensä $laskuri hakusanalla <b>".chr(34).trim($_GET['search']).chr(34)."</b>.</p>\n";
$hakusanat = file("hakusanat.txt");
for ($i = 0; $i < count($hakusanat); $i++)
{
$tiedot = explode("|", $hakusanat[$i]);
if (eregi($haku, $tiedot[0]))
echo "<p><a href=\"$tiedot[3]\">$tiedot[1]</a><br>$tiedot[2]</p>\n";
}
function Tyhja() {
echo "<p>Käyttääksesi hakukonetta, sinun täytyy kirjoittaa ensin hakusana.</p>";
die; }

function TiedostoaEiLoydy() {
echo "<p>Haun suorittamisessa tapahtui virhe.</p>";
die; }

function EiTuloksia() {
echo "<p>Haun tulokset sanalla <b>".chr(34).trim($_GET['search']).chr(34)."</b>.</p>\n";
echo "<p>Ei valitettavasti löytynyt yhtään sivustoa, mikä vastaisi antamaasi hakusanaa.</p>";
die; }
?>

hakusanat.txt

flight of the phoenix|Nimi|Selostusta sivusta|http://www.osoite.com|

Osaisitko joku sanoa, että miten hakukone toimisi sillain, että riippumatta sanajärjestyksestä, löytäisi hakukone aina kohteen, mihin hakusanoiksi on määritelty sanat jotka hakuun kirjoittaa?

Esim. jos hakusanoiksi on merkitty vaikka "flight of the phoenix" ja ne on kirjoitettu tuossa järjestyksessä hakusanoiksi, löytää kone nyt jos hakee ihan millä tahansa noista sanoista pelkästään, tai vaikka haulla "flight of the", tai "of the", tai "the phoenix" jne. mutta jos esim hakee hakusanalla "flight the phoenix", tai vaikka "of phoenix" jne. se ei enää löydäkään mitään.

Eli osaisiko hakukone mitenkään poimia tiedot riippumatta siitä missä järjestyksessä hakusanat kirjoittaa, tai vaikka jonkun sanan jättää välistä pois?

ps: kyllä, tämä koodi on muunneltu versio sivuilla aikaisemmin olleesta koodista.

Blaze [26.01.2006 20:06:27]

#

Explodeta $haku välilyönnillä, että saat taulun, jossa on käyttäjän antamat hakusanat. Sitten vertaile niitä yksi kerrallaan tuota $tiedot[0]:aa vastaan (minä muuten käyttäisin eregin sijasta strposia, nopeampi) ja jos sana löytyy, niin jatka vertailua seuraavalla sanalla. Jos jotain sanoista ei löydy, voit heti lopettaa loopin ja todeta, että ko. sivu ei vastaa hakusanoja.

juplin [26.01.2006 20:48:00]

#

Juu tiesin että tuolla explodella sen saisi toteutettua, mutta en osaa tehdä koodia sillain että se toimisi tuossa. Osaisitko tehdä esimerkin? =)

Blaze [27.01.2006 10:41:01]

#

Olis ollu helpompaa kirjottaa suoraan koodia kun toi selostus :) Ajattelin vaan pedagogiselta näkökannalta, oppii enemmän kun sen koodin loppujen lopuksi kirjoittaa itse.

No, jos nyt pseudoa:

explodeta
looppaa äsken saatu taulu läpi {
  if(tällä kierroksella vertailtavaa sanaa EI löydy listasta) {
    // Tätä sanaa ei löytynyt, kyseessä ei ole kriteerien mukainen sivu
    aseta joku eioo-flagi
    poistu loopista
  }
}
if(eioota ei oo asetettu) {
  lisää sivu hakutuloksiin
}

Muista nollata eioo ennen seuraavaa sivua.

juplin [27.01.2006 17:34:29]

#

Kiitoksia avusta, en käyttänyt ihan tuota neuvoa, mutta sain jo ongelman korjattua, ja hakukone skulaa loistavasti... =)

"Ajattelin vaan pedagogiselta näkökannalta, oppii enemmän kun sen koodin loppujen lopuksi kirjoittaa itse"

Olet aivan oikeassa, näin yritänkin yleensä toimia, mutta joskus ei vaan onnaa... ;)

Vastaus

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

Tietoa sivustosta