Jak na vlastní katalog stránek v PHP – pokročilé hledání
V předchozím článku jsme se podívali na základní jednoduché vyhledávání nad databází odkazů. Dnes se zaměříme na jistě zajímavější část, a to na vyhledávání pokročilé. Kromě možnosti vyhledání přesné fráze (jak tomu bylo v podstatě u základního vyhledání), budeme nyní implementovat například logické AND a OR nad všemi zadanými řetězci. Uživateli také nabídneme setřídění výstupu dle různých kritérií.
Formulář
Nejprve si zadefinujme formulář, jehož kód bude umístěn na začátku skriptu advanced.php:
|
Ve výsledné stránce bude formulář vypadat nějak takto:
Advanced.php
Tento skript bude mít velmi jednoduchou strukturu. Na jeho začátku se vždy zobrazí formulář a ve zbytku se zobrazí nalezené odkazy. Jak poznáme, že máme hledat a zobrazit odkazy? Jednoduše, prostě tak, že skript byl zavolán s parametrem AKCE. Struktura tohoto skriptu by mohla být znázorněna takto:
|
Parametry skriptu
Pokud tedy uživatel v našem katalogu stránek klikne na odkaz [Pokročilé hledání], zavolá se skript advanced.php. Jelikož byl zavolán samostatně, bez jakýchkoliv parametrů (tedy parametr AKCE je nedefinován), zobrazí se pouze formulář a část, která je uvedená v těle příkazu IF se neuplatní. V momentě kdy uživatel v tomto skriptu zadá něco na vyhledání, tak máme v definici formuláře zajištěno, že se skript advanced.php zavolá znovu, a to s definovaným parametrem AKCE.
Kromě parametru AKCE jsou předány ještě parametry další. Parametr RETEZEC (přístupný přes proměnnou $retezec) obsahuje řetězec slov, které uživatel zadal. Dále parametrem TYP rozlišíme, jaký způsob vyhledání uživatel chce. Tímto parametrem v podstatě ovlivníme tvorbu příslušného SQL dotazu. Poslední volbou uživatele je, jakým způsobem chce setřídit výsledek. To zjistíme pomocí hodnoty v parametru TRIDIT. Tolik k popisu jednotlivých parametrů ve formuláři, abychom přesně věděli, k čemu nám budou sloužit.
Zdrojový kód
Nyní je správný čas se podívat na zdrojový text. Vzhledem k tomu, že základní vyhledávání (v našem případě parametr TYP=1, přesná fráze) jsme řešili v minulém článku, dnes se tedy už zaměřím pouze na AND a OR, tzn. když bude na vstupu TYP=2 nebo TYP=3. Nyní budeme programovat tělo příkazu IF (viz struktura skriptu).
|
Popis kódu
Nejprve musíme sestrojit SQL dotaz. Pro každý typ bude vypadat trochu jinak. Pro rozšířené hledání ze vstupního řetězce nejprve odstraníme diakritiku a pak řetězec rozdělíme na jednotlivá slova (k tomu slouží příkaz split). Po té musíme vygenerovat pomocný řetězec, který např. pro TYP=2 bude vypadat takto: ASCII_TEXT LIKE ‚%slovo1%‘ OR ASCII_TEXT LIKE ‚%slovo2‘ OR …, pro TYP=3 to bude stejné, až na spojku, která zde bude AND. Tento řetězec získáme tak, že do něj nejprve uložíme „ascii_text LIKE ‚%$seznam_slov[0]%'“ a dále k tomu řetězci postupně přidáváme (to nám zajišťuje cyklus for) další podmínky oddělené logickou spojkou pro každé vyskytující se slovo v původně zadaném řetězci uživatelem.
Pro hledání v URL uživatel vyplní textové pole „ret_url“. Při konstrukci dotazu pro případ TYP=4 bereme v úvahu proměnnou $ret_url a obsah proměnné $retezec ignorujeme.
Jakmile máme pomocný řetězec vygenerován, tak pomocí něj připravíme celý dotaz. Na závěr dotazu ještě přiřetězíme konstrukci ORDER BY …, pokud si uživatel přeje výstup setřídit.
Pak už se připojíme k databázi, provedeme dotaz a vrácené odkazy zobrazíme ve formě seznamu <UL>. Tento úsek je podobný, jako v předchozím díle.
A co bezpečnost?
Máme zde práci z formulářem, je potřeba myslet na to, že nikdy nevíme, kdo k našim stránkám přistoupí. Zejména je potřeba zkontrolovat, zdali zadaný řetězec uživatelem neobsahuje nějaké nepěkné znaky (např. tagy HTML, apod. – sami si můžete vyzkoušet, co by to se stránkami udělalo ;-). Dále vidíme, že hodnota parametru TYP může nabývat pouze hodnot 1 až 4. Je tedy dobré udělat na začátku test, zdali hodnoty všech parametrů jsou v definovaných rozsazích. Znovu připomínám, že je potřeba během práce s databází ošetřovat všechny chybové stavy. Kvůli větší přehlednosti zde ošetření chyb neuvádím.
Tím máme probrané základní procházení sekcemi, zobrazování odkazů a vyhledávání nad nimi. V příštím díle se podíváme na realizaci přidání odkazu do katalogu uživatelem.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Jak lze snadno upravovat soubory v PDF?
14. září 2023 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024