Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Hakukone

Kuohu [13.08.2005 16:44:28]

#

Hakua voi käyttää kahdella eri tavalla:

1. Tavallinen: Skripti etsii hakusanaa käyttäjän syöttämältä sivulta.
http://koti.mbnet.fi/harpakka/m_hakukone.php

2. Paikallinenhaku: Hakusanaa etsitään käyttäjän listaamista tiedostoista.
http://koti.mbnet.fi/harpakka/test/haku/haku.php

Jos paikallinenhaku on päällä eikä haluta että se etsii sanaa myös PHP:n lähdekoodista, tulee tiedoston osoitteeksi antaa koko URL.

<?php

//*******************************************************
//paikallinen haku
$localsearch = 0;

//jos paikallinen haku on päällä, listaa tiedostot joista haetaan
$files = array();
$files[] = "index.php";
$files[] = "muuta.php";
$files[] = "linkit.php";
$files[] = "palaute.php";
//*******************************************************

$caps = $_GET['caps'];

$keyword = $_GET['keyword'];
$keyword = str_replace(" ", "", $keyword);

$target = $_GET['target'];
$target = str_replace("http://", "", $target);

?>

<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Hakusana: <input type="text" name="keyword" size="24" value="<?php if ( $keyword != null ) { echo $keyword; } else { echo ""; } ?>" />

<?php if ( $localsearch == 0 ) { ?>
<br />Kohde: <input type="text" name="target" size="35" value="<?php if ( $target != null ) { echo "http://$target"; } else { echo "http://"; } ?>" />
<?php } ?>

<br />Sama kirjainkoko: <input type="checkbox" name="caps" value="yes" <?php if ( $caps == "yes" ) { echo "checked=\"checked\""; } ?> /> Kyllä
<br /><input type="submit" name="submit" value="Hae" />
</form>

<?php

if ( $keyword != null )
{



function search($target, $keyword, $caps)
{
	$file = file("$target");

	for ( $i=0; $i<count($file); $i++ )
	{
		$file[$i] = str_replace("<", " <", $file[$i]);
		$file[$i] = str_replace(">", "> ", $file[$i]);
		$file[$i] = str_replace(".", " ", $file[$i]);
		$file[$i] = str_replace(",", " ", $file[$i]);
		$file[$i] = str_replace("\"", " ", $file[$i]);
		$file[$i] = str_replace("/", " ", $file[$i]);
		$file[$i] = str_replace("(", " ", $file[$i]);
		$file[$i] = str_replace(")", " ", $file[$i]);
		$file[$i] = str_replace("[", " ", $file[$i]);
		$file[$i] = str_replace("]", " ", $file[$i]);
		$file[$i] = str_replace("!", " ", $file[$i]);
		$file[$i] = str_replace("?", " ", $file[$i]);
		$file[$i] = str_replace("-", " ", $file[$i]);

		$data[$i] = preg_replace("/\r\n|\n\r|\n|\r/", "", $file[$i]);
		$word = explode(" ", $data[$i]);

		for ( $j=0; $j<count($word); $j++ )
		{
			if ( $caps == "yes" )
			{
				if ( $keyword == $word[$j] )
				{
				return true;
				}
			}
			else
			{

				if ( strtolower($keyword) == strtolower($word[$j]) )
				{
				return true;
				}
			}
		}
	}
	return false;
}


if ( $localsearch == 1 )
{
	$fresult = 0;
	for ( $i=0; $i<count($files); $i++ )
	{
		$result = search($files[$i], $keyword, $caps);


		if ( $result == true )
		{
			$fresult = 1;
			echo "<p>Hakusana \"$keyword\" löydettiin tiedostosta <a href=\"$files[$i]\" target=\"new\">$files[$i]</a>.</p>\n";
		}
	}
	if ( $fresult == 0 )
	{
		echo "<p>Hakusana \"$keyword\" ei löytynyt mistään tiedostosta.</p>\n";
	}
}
else
{

	$result = search("http://$target", $keyword, $caps);

	if ( $result == true )
	{
		echo "<p>Hakusana \"$keyword\" löydettiin osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n";
	}
	else
	{
		echo "<p>Hakusana \"$keyword\" ei löytynyt osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n";
	}
}



}

?>

tsuriga [14.08.2005 16:20:39]

#

Aika vähän kommentteja koodin puolella, eikä tuo hae kuin kokonaisia sanoja, mahdollisesti regexp-haku tai osittaisten sanojen haku olisi poikaa.

tgunner [15.08.2005 13:57:36]

#

Olisit saanut kommentoida vähän enemmän tuota koodiasi, kuten tsuriga jo mainitsi, ja suosittelisin, ettet kirjoittaisi noin tiiviisti koodejasi, kuten:

<br />Sama kirjainkoko: <input type="checkbox" name="caps" value="yes" <?php if ( $caps == "yes" ) { echo "checked=\"checked\""; } ?> /> Kyllä
<br /><input type="submit" name="submit" value="Hae" />
</form>

Tontttu [10.09.2006 17:56:58]

#

Ei toimi mulla. Heittää kokoajan indexiin, ku koittaa hakee.

Codeprofile [10.11.2006 14:54:30]

#

Miten sen koko osoitteen saisi näkymään siinä hakukoneen etusivulla? Eli siis että siihen tulisi vaikkapa:
"Hakusana ''hakusana'' löytyi osoitteesta http://codeprofile.bdsm.fi/jotain.html/#kohdan_nimi."
Että se hakisi koko sivustosta niin, että siihen tulisi täsmälleen sen osoite ja nimetty kohta.

Pollapoju [11.08.2008 15:02:26]

#

Ei toimi linkki.

Tuomas213 [15.02.2010 12:39:00]

#

Liian vähän kommentteja tämmöselle PHPtä osaamattomalle.
Miten tuosta saa niin, että nettisivulta haetaan otsikoita ja ne tulostetaan iframen sisälle?
Eli voisiko joku auttaa osaamatonta?

Vastaus

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

Tietoa sivustosta