Archív Inet.sk Pôvodný autor: Rasťo Turek
03. 03. 2004 o 00:00 11023x

Ako na jednoduché vyhľadávanie v MySQL

Konečne dnes zúročíme naše vedomosti z oblasti MySQL a ukážeme si, ako vytvoriť pekné a jednoduché vyhľadávanie v MySQL. Toto vyhľadávanie bude vedieť prehľadávať len jednu databázu, jednu tabuľku a hlavne len jeden stĺpec. Nechcem moc zasahovať hlbšie, pretože to by som chcel prebrať v ďalšej budúcnosti a teda rozšírené (fulltextové) vyhľadávanie si necháme na potom. Poďme si rozobrať náš script.
Ako na jednoduché vyhľadávanie v MySQL

Analýza scriptu
Je jasné, čo potrebujeme aby script robil. Po zadaní požiadavky do poľa formuláru by nám mal dokázať prehliadať stĺpec tabuľky, ktorý si určíme. Teda tzv. pevné vyhľadávanie, keďže ho nebudeme aplikovať na iné stĺpce tabuľky. Samozrejme záleží len na Vašej šikovnosti a vedomostiach, či si po jednoduchej úprave nedokážete script rozšíriť, mne však ide len o teoretické vysvetlenie a praktickú funkčnú ukážku. Tu by som rad podotkol, že pri mojom článku o odosielaní mailov pomocou php som narazil na dlho preberanú otázku „Vypnuté globálne premenné“ a teda celý script bude upravený pre php 4.1.0 a vyššie.

Teória
Keďže sme si príkaz pre predávanie požiadaviek zaoberali už v minulých článkoch, teraz ho tu rozoberať nebudem. Ale samozrejme že Vám podrobne vysvetlím príkaz na prehľadávanie databáze. Týmto príkazom je samozrejme mysql_query poprípade mysql_db_query. Rozdielom medzi nimi je, že mysql_query pracuje s aktuálnou databázou, ktorú práve používame a mysql_db_query pracuje s databázou, ktorú mu určíme a teda požiadavka pre prvý vyzerá asi takto:

mysql_query("SELECT * FROM tabuľka")

a pre mysql_db_query takto:

mysql_db_query("databaza","SELECT * FROM tabuľka")

Jedine v tomto je rozdiel. Poďme však späť k téme. Aby sme MySQL povedali, čo chceme spraviť, musíme použiť jeden s hore spomínaných príkazov. Teda medzi úvodzovky zadáme:

mysql_query("SELECT * FROM tabuľka WHERE stĺpec LIKE "výraz"");

Takže teraz si presne vysvetlíme celý príkaz. SELECT teda vyber * všetko FROM z tabuľka tabuľky WHERE zo stĺpca LIKE tento výraz. Tento príkaz nám zabezpečí, že mysql prehľadá všetky dáta v tomto stĺpci a vyberie všetky dáta zodpovedajúce zadanému výsledku.

Je však mnoho spôsobov zadania výrazu, keďže návštevník nemôže vedieť, či sa u Vás napríklad nachádzajú informácie o základnej doske typu ASUS a tak nezadá presný typ ale stačí len ASUS. No čo ak nevie, ako sa výraz, ktorý hľadá presne píše? Tak namiesto „počítač“ zadá len „poč“ a čaká, že mu Váš script ponúkne možnosti a on si už len vyberie. Aj toto sa dá mysql povedať a teda ak chcete aby hľadaný výraz hľadalo mysql s hocijakou príponou doplníte za LIKE "b%". Teraz akýkoľvek výraz začínajúci písmenom b bude vyhodnotený ako pravda a teda bude ponúknutý ako výsledok vyhľadávania. Čiže ak návštevník hľadal výraz Bavlna, tak ju nájde. Samozrejme že nájde aj výraz Banán, Brazília a prakticky všetky výrazy začínajúce na b.

Ďalšou možnosťou je, že návštevník bude vedieť, že výraz ktorý hľadá končí napríklad na sql. Teda zadá výraz „sql“ a bude čakať, že mu Váš script vráti všetky možné výrazy končiace na sql. Aby ste mu mohli aj toto zabezpečiť, a ponúkli mu všetky výsledky doplníte podmienku takto LIKE "%sql". Teraz mu Váš script môže vypísať informácie napríklad o MySQL, ale aj o MsSQL, PostgreSQL alebo OracleSQL a iných, o ktorých máte zmienku v databáze.

A je tu ešte jedna možnosť zadania výrazu, ktorý nespadá do predošlých kategórií a tou je ak návštevník nepozná spôsob uchovania záznamu o údajoch jeho záujmu vo Vašej databázi a tak zadá stred výrazu, ktorým si je naprosto istý. Ak napríklad hľadá v databázi s menami a hľadá trebárs všetky mená, ktoré obsahujú „ure“. Tomuto výrazu môžu zodpovedať mená ako Šurek, Murek, Kurek, Jurek a množstvo iných ale s týmito sa stretávam takmer denne :o). Tomu, kto pozorne čítal celý článok od začiatku určite prišlo na um, že takýto výraz môžete vyhľadať úplne jednoducho a teda doplníte podmienku takto LIKE "%ure%". Teraz si zaručíte, že výrazy budú vyhľadané aj prvým, druhým a samozrejme hlavne tretím spôsobom. Tento spôsob využijeme aj my v našom scripte. Chcem podotknúť, že existuje viac spôsobov pre vyhľadávanie v MySQL ale tými sa ja už zaoberať v článku nebudem, keďže sú len ekvivalentami k predošlému spôsobu. Ale viac o nich nájdete v manuále MySQL o ktorom som písal nedávno v predošlom článku.

Teraz si spravíme prípravu aplikácie pre vyhľadávanie a podrobne si rozoberiem možné problémy a vylepšenia.

Príprava aplikácie pre vyhľadávanie
Neoddeliteľnou súčasťou všetkých aplikácií využívajúcich MySQL je konfiguračný súbor config.php, ktorý sme si vytvorili už v predošlých článkoch. Teda samozrejme že ho použijeme aj teraz a to prvú variantu bez použitia funkcie. Ďalej si musíme spraviť návrh databáze v ktorej budeme vyhľadávať a samozrejme v neposlednom rade script, ktorý toto vyhľadávanie zabezpečí. Nezabudnite, že od verzie php 4.1.0 a vyššej je funkcia register_globals vypnutá a tak budeme pred každú volanú premennú pridávať $_POST, $_GET, $_REQUEST a $_SERVER. Vždy to závisí od toho, odkiaľ sa snažíme premennú zaregistrovať (získať). Keďže som sa tomuto ešte nevenoval, narýchlo Vám skúsim vysvetliť, ako to funguje.

Ak používate php od verzie 4.1.0 musíte pred premenné pridávať reťazec, ktorý Vám zabezpečí získanie premennej. Táto možnosť funguje už od php 3 ale začala sa používať až od php 4, keďže sa vývojari php snažia zvýšiť bezpečnosť php a teda funkcia register_globals bude z php v ďalších verziách (myslím že už od verzie 5.0) úplne odstránená. Tento spôsob využívajte nasledovne:

$_POST['premenná']  namiesto $premenná

V konečnom dôsledku teda použijete:

$_POST – keď získavate premenné z formulára pomocou metódy POST
$_GET - keď získavate premenné z formulára alebo riadku pre zadanie url pomocou metódy GET
$_REQUEST - keď získavate premenné z akéhokoľvek zdroja akýmkoľvek spôsobom, teda zaregistruje akúkoľvek premennú
$_SERVER - keď získavate premenné od serveru ako príkladom aktuálnu adresu scriptu, ktorý práve používate ($PHP_SELF)

Ak sa Vám však nechce používať tento spôsob, tak tu máte malý kód prebratý z interval.cz, ktorý Vám zaregistruje všetky premenné a teda už nemusíte používať tento spôsob zápisu pre získanie premenných.

foreach($_REQUEST as $ind => $val)
{
 $val=addslashes($val);
 eval("$".$ind."=\"".$val."\";");
}

Chcem však upozorniť, že tento script nekopírujem, lebo by som ho nevedel napísať, ale preto, lebo ho nemá zmysel písať znovu, keď to už niekto spravil predo mnou. Ja aj tak vo všetkých svojich scriptoch používam spôsob osobitného zápisu, je to bezpečnejšie. Toto len pre tých, ktorí by sa radi vybúrili v diskusii.
Keďže sme už prebrali celý základ, navrhneme si databázu.
Databázu si spravíme jednoduchú a do nej naplníme niekoľko záznamov.

CREATE TABLE inet (
id int(8) auto_increment,
meno varchar(100) not null,
priezvisko varchar(100) not null,
sex char(1) not null,
PRIMARY KEY id(id)
) TYPE=MyISAM

a samozrejme si ju naplníme údajmi, ktorými sú meno, priezvisko a pohlavie (sex) dotyčnej osoby. Tu sú údaje:

INSERT INTO inet VALUES (1, 'Rastislav', 'Turek', 'm');
INSERT INTO inet VALUES (2, 'Peter', 'Polakovic', 'm');
INSERT INTO inet VALUES (3, 'Dusana', 'Zahovorova', 'f');
INSERT INTO inet VALUES (4, 'Petra', 'Kovacova', 'f');
INSERT INTO inet VALUES (5, 'Jaroslav', 'Michalak', 'm');
INSERT INTO inet VALUES (6, 'Matus', 'Bukva', 'm');
INSERT INTO inet VALUES (7, 'Zuzana', 'Cundorova', 'f');

Už máme navrhnutú databázu a teraz si vytvoríme script pre vyhľadávanie a samozrejme si ho popíšeme a vysvetlíme.

<?php
include("config.php"); // pripojíme súbor config php pre pripojenie k databázi
?>
<!-- Html script pre vyhľadávanie -->
<form action="index.php" method="get">
Hladanie: <input type="text" name="search">
<input type="submit" name="send" value="Vyhladaj">
</form>

<?php
$sql=mysql_query("SELECT * FROM inet WHERE meno LIKE \"%".$_GET['search']."%\"");
// príkaz mysql pre vyhľadávanie

echo "<table border=\"1\">"; // tabuľka s rámčekom
echo "<tr><td>Meno</td><td>Priezvisko</td><td>Pohlavie</td></tr>"; // popis stĺpcov v tabuľke

if($_GET['send']=="Vyhladaj") // podmienka pre spustenie vyhľadávacieho scritpu
{
 while($zaznam=mysql_fetch_object($sql))
// cyklus pre načítanie všetkých záznamov z databáze
 {
 echo "<tr><td>$zaznam->meno</td><td>$zaznam->priezvisko</td><td>$zaznam->sex</td></tr>";
 // výsledok vyhľadávania zobrazovaný do stránky
 }
}

echo "</table>"; // ukončenie tabuľky
?>

Keď si celý script prezriete zistíte, že je úplne jednoduchý na pochopenie. Na začiatku scritpu si nainkludujeme súbor config.php pre pripojenie k databázi. Potom si vytvoríme jednoduchý formulár, ktorým budeme zasielať vyhľadávaný výraz. Potom nasleduje príkaz pre MySQL na vyhľadávanie v tabuľke.  Ďalej si vytvoríme tabuľku s obrámovaním a popis jednotlivých stĺpcov. Nasleduje podmienka, ktorá overí, či bolo stlačené tlačítko „vyhľadaj“ ak bolo, tak pomocou cyklu si vypíšeme všetky údaje do stránky. Nakoniec si cyklus a podmienku uzavrieme a rovnako uzavrieme aj tabuľku. A to je celý script, ktorý dokáže prehľadávať stĺpec tabuľky a tak vypisuje nájdené dáta do stránky.

Zhrnutie
Tento script je dosť ľahký a tak by pre trošku skúsenejších nemal byť problém jeho zaradenie do vlastných stránok. Samozrejme script nie je ošetrený proti chybám, cudziemu vniknutiu a nenájdeniu výsledku. Odporúčam ošetriť si script, aby nedochádzalo k rozhorčeniu návštevníkov, keď mu script nič nevypíše a on sa bude naďalej snažiť vyhľadávať výraz. Script sa dá samozrejme rozšíriť aj na ďalšie funkcie, poprípade na prehľadávanie viacerých stĺpcov či tabuliek. Prajem Vám veľa úspešných hodín strávených pri písaní aplikácií v php.

Rastislav Turek // break.sk

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies