Wyszukiwarka w PHP oparta na plikach tekstowych i tablicy
PHP + MySQL Aktualizacja: 25.07.2017

Wyszukiwarka w PHP oparta na plikach tekstowych i tablicy

W dzisiejszych czasach człowiek jest zapracowany, spieszy się wszędzie i nie ma czasu. Kiedy siada przed komputerem to często jest tak, że chce odnaleźć szukane treści jak najszybciej to możliwe. Dlatego webmasterzy zamieszczają wyszukiwarki na stronach internetowych - w celu usprawnienia, żeby gość nie musiał przeglądać setek podstron. Nie bądźmy gorsi i udostępnijmy takie narzędzie. Porada przedstawia dwa sposoby: operując na plikach tekstowych lub tablicy.

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>

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';
}
?>

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.

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.

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.

Autor: . Tagi: , , , . Źródło obrazek główny: Pixabay.

Dodaj komentarz

8 komentarzy do "Wyszukiwarka w PHP oparta na plikach tekstowych i tablicy"

avatar
najnowszy najstarszy oceniany
adam perlakowski
Gość

jak zrobić by wyszukiwanie globalne w internecie było? jak zmienić kod?

Grzesiek
Gość

Sposób #3: Tablica bez sortowania - pomoże ktoś?^^
Potrzebuję zrobić wyszukiwanie po tagach, bez sortowania, tak by w bazie do jednej frazy przypisać kilka linków a nie jak w przykładzie kilka fraz do jednego linku, bez żadnego sortowania, numerowania itd. tylko w kolejności jeden po drugim z bazy :)

adam_per
Gość

witam,
a mi po wykonaniu wyszukiwarki sposobem "tekstowym" wyskakuje taki komunikat (tak jakby linia 9 eregi była niepoprawna):
n
Warning: eregi() expects parameter 2 to be string, array given in C:xampphtdocsfirmawyszukiwarka.php on line 9

Warning: eregi() expects parameter 2 to be string, array given in C:xampphtdocsfirmawyszukiwarka.php on line 9

Warning: eregi() expects parameter 2 to be string, array given in C:xampphtdocsfirmawyszukiwarka.php on line 9

Brak wyników

pozdrawiam

Mariusz
Gość

Witam.
Zamieściłem Twój skrypt i przyznam, że tego właśnie szukałem. Jednak mam pytanie czy da się zrobić tak aby opcja "szukaj" był np. w prawej kolumnie tabeli, a wyniki wyświetlały się w lewej kolumnie tabeli?

Pozdrawiam

Bartosz Stefanicki
Gość

Jasne, jest taka możliwość. Blok #wyszukiwarka-form zawiera sam formularz, resztę możesz ustawić w CSS.

Bartosz Stefanicki
Gość

@Dawid:

Odpowiedź otrzymasz w komentarzu. Dodałeś do skryptu funkcję header() - wysyła ona surowy nagłówek do przeglądarki, jest przydatna ale należy pamiętać, że przed wywołaniem nie można wysyłać żadnego tekstu.

Przeczytaj tu: http://itporady.pl/php-mysql/cannot-modify-header-information-co-zrobic/

Dawid
Gość

Właśnie korzystam z twojego skryptu wyszukiwarka. Pozmieniałem trochę to tak, żeby po wpisaniu frazy od razu pokazywała się strona ta co jest po lewej stronie " | ". Bo jest tak: adres strony | frazy . I mam do cb prośbę. Otóż mam taki problem opisany forum webcentral.pl http://webcentral.pl/php-mysql-f11/problem-z-zmienna-w-header-location-t12134.html .
Prosze cię napisz do mnie na e-mail'a lub gg 10413758 .