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
-
Certifikáty Entrust ztratí důvěru Google Chrome
8. července 2024 -
Zvýšení výkonu WiFi signálu: Jak a proč používat WiFi zesilovače
28. června 2023 -
Proč investovat do nejvýkonnějších VPS s AMD EPYC procesory
14. června 2024 -
Jak nainstalovat šablonu ve WordPressu
23. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024