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.