Wyszukiwarka w PHP oparta na plikach tekstowych i tablicy

Data aktualizacji: 22.04.2024r. Autor: Bartosz Stefanicki.

Wyszukiwarka w PHP oparta na plikach tekstowych i tablicy

Jak udostępnić użytkownikom wyszukiwarkę, która będzie oparta na plikach tekstowych lub tablicy w PHP? Proste rozwiązanie, które warto sprawdzić.

1. Pliki tekstowe

W tej części porady wyszukiwarka jest oparta na plikach tekstowych, którą stworzyłem na potrzeby własnej strony jakiś czas temu. Utworzymy trzy pliki - skrypt .php i dwa pliki .txt. Na początek zajmiemy się formularzem, który będzie odpowiedzialny za przesyłanie danych do skryptu.

<form action="wyszukiwarka.php" method="post">
<input name="wyszukiwarka" type="text">
<input type="submit" value="Szukaj">
</form>

1.1 Skrypt wyszukiwarki

Zapisujemy go w pliku wyszukiwarka.php - wklejamy do niego poniższy kod.

<?php
$wyszukiwarka = $_POST['wyszukiwarka'];

//warunek: jeżeli zmienna nie jest pusta
if (!empty($wyszukiwarka)) {
	echo "<ul>\n";
	$dane = file("dane.txt");

	for ($index=0; $index < count($dane); $index++) {
		$g = split(" | ", chop($dane[$index]));
		$eregi = eregi($wyszukiwarka, $dane);

		if (@eregi($wyszukiwarka, $dane[$index])) {
			echo '<li><a href="'.$g[0].'" title="'.$g[1].'">'.$g[1]."</a></li>\n";
			$bl = true;
		}
	}

	echo "</ul>";
}

//w przypadku braku wyników
if (!$bl) {
	echo 'Brak wyników';
}
?>

1.2 Baza danych w pliku tekstowym

Mamy formularz który wklejamy w miejsce, gdzie ma się wyświetlić wyszukiwarka oraz skrypt, który to wszystko napędza. Teraz utworzymy plik dane.txt czyli prostą bazę danych.

o-firmie.html | O firmie - zobacz historię naszej firmy
mapa-dojazdu.html | Mapa dojazdu - zobacz jak do nas dojechać
kontakt.html | Kontakt - jeżeli masz jakieś pytania - pisz śmiało!

To wszystko - stworzyliśmy wyszukiwarkę opartą na plikach tekstowych.

2. Tablica

Druga część porady zawiera wyszukiwarkę opartą na tablicy. Zawrzemy w niej dane które w poprzednim przykładzie były w plikach tekstowych. Wszystko jest proste i ogranicza się zaledwie do jednego pliku. Poniższy skrypt dodatkowo sortuje nasze wyniki (od rosnącego do malejącego, bądź na odwrót) i posiada ładniejszy interfejs.

2.1 Tworzymy plik wyszukiwarka.php

Wklejamy do niego poniższy kod.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title><?php if(isset($fraza) && $fraza != ""){ ?>Wyniki wyszukiwania<?php } else { ?>Wyszukiwarka<?php } ?> - Twoja strona</title>
	<link rel="stylesheet" type="text/css" href="css/style.css" />
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>

<div id="wyszukiwarka">
<div id="wyszukiwarka-form">
<?php
// Otrzymujemy dane
$sortowanie = $_POST['sortowanie'];
$fraza = $_POST['fraza'];

// Formularz - php i xhtml
echo '<form method="post" action="wyszukiwarka.php">
<p><input type="text" value="'.$fraza.'" name="fraza">
<select name="sortowanie">
<option value="1"';

if ($sortowanie==1) { echo ' selected="selected"'; } 

echo '>Sortuj: rosnąco </option>
<option value="0"';

if ($sortowanie==0) { echo ' selected="selected"'; }

echo '>Sortuj: malejąco </option>
</select>

<input type="submit" value="Szukaj"></p>
</form></div>';

// Nasza baza danych
$bazadanych = array('firmie,nasza,naszej,firma,historia,historię,cennik,ceny' => '<a href="o-firmie.html" title="Przejdź na podstronę: o firmie">O firmie</a> - zobacz jak rozwijała się nasza firma',
'mapa,dojazdu,mapka,dojazd,kontakt' => '<a href="mapa-dojazdu.html" title="Przejdź na podstronę: mapa dojazdu">Mapa dojazdu</a> - nie wiesz jak do nas przyjechać?',
'kontakt,formularz,kontaktowy,mapa,mapka,dojazdu,dojazd' => '<a href="kontakt.html" title="Przejdź na podstronę: kontakt">Kontakt</a> - w razie problemów prosimy o kontakt',
'cennik,cenniki,zapłata,koszty,ceny,o firmie,firma' => '<a href="cennik.html" title="Przejdź na podstronę: cennik">Cennik</a> - koniecznie zobacz nasz cennik',
);

// Sortowanie danych z tablicy
if (isset($fraza) && $fraza != "") {
if ($sortowanie == 1) {
	natsort($bazadanych);
	$sortujemy = "rosnąco";
}else{
	arsort($bazadanych);
	$sortujemy = "malejąco";
}

// Wyświetlamy informację o wprowadzonych danych
echo "<div id='wyszukiwarka-wynik'>Poszukiwana fraza: ".$fraza.". Sortowanie: ".$sortujemy.".</div>\n<ol>\n";

// Wyświetlamy wynik wyszukiwania - linki oraz opis
foreach ($bazadanych as $wyraz => $adres) {
if (@eregi(quotemeta($fraza), $wyraz)) {
	echo "<li>".$adres."</li>\n";
	$bl = true;
}}

// Lub w przypadku braku - informujemy użytkownika o nie znalezieniu danych
if (!$bl){
	echo '<li class="wyszukiwarka-wynik-brak"><b>Nie znaleziono</b></li><li class="wyszukiwarka-wynik-brak">Niestety nie udało nam się odnaleźć wyniku, który mógłby spełnić Twoje kryteria wyszukiwania. Spróbuj ponownie.</li>';
}}

?></ol>
</div>
</body>
</html>

Omówmy powyższy kod, w tytule strony będzie się pojawiała informacja czy jest to tryb wyszukiwania czy też pokazywania wyników. Cała reszta jest dosyć prosta do zrozumienia.

2.2 Tworzymy katalog /css a w nim plik o nazwie style.css

Wklejamy do niego poniższy kod.

*{ margin:0; padding:0; }
#wyszukiwarka{
width: 425px;
margin: 20% auto 0 auto;
color: #555;
font: 13px Verdana;
border: 2px solid #ddd;
}

#wyszukiwarka-form{
padding: 10px;
background: #ddd;
}

#wyszukiwarka-wynik{
border-top: 1px solid #ccc;
padding: 10px;
background: #ededed;
border-bottom: 1px solid #ddd;
}

#wyszukiwarka ol{ margin: 7px 10px 10px 0; }
#wyszukiwarka li{ margin: 3px 0 0 31px; }
#wyszukiwarka li.wyszukiwarka-wynik-brak{ list-style-type: none; margin: 0 0 5px 10px; }
#wyszukiwarka a{ color: #444; text-decoration: none; }
#wyszukiwarka a:hover{ text-decoration: underline; }

Przedstawiłem dwa sposoby na zrobienie wyszukiwarki dla małej strony, która nie zawiera dużo informacji. Uważam że kod przeze mnie napisany jest zrozumiały, ale zawsze w przypadku pytań zapraszam do napisania komentarza.

Kategorie: PHP + MySQL. Tagi: #formularze, #php, #skrypty, #wyszukiwarki internetowe. Źródło obrazków: Pixabay, Font awesome.

Zobacz także

13 komentarzy