Jak na vlastní katalog stránek v PHP – vyhledávání
V předchozích dílech jsme se věnovali základnímu procházení katalogu stránek, nyní se podíváme na dva typy vyhledávání. Dnes se zaměříme na jednoduché hledání odkazů na základě jednoho klíčového výrazu.
Jednoduché hledání
Na hlavní stránku (do souboru index.php) vložíme na nějaké místo jednoduchý formulář, do kterého uživatel bude moci zadat výraz pro jednoduché vyhledání. HTML kód, který toto zajistí, by mohl vypadat takto:
|
Výsledek bude vypadat nějak takto:
Skript hledej.php
Pro výpis nalezených odkazů dle zadaného výrazu použijeme skript hledej.php (v praxi pravděpodobně nebudeme vyhledávání separovat do samostatného skriptu, ale naimplementujeme jej přímo v hlavním skriptu index.php – zde tak činím pouze pro lepší přehlednost). Na vstupu skriptu hledej.php je argument „retezec“, jehož hodnotu máme přístupnou pomocí proměnné $retezec.
Podíváme-li se na naše tabulky v databázi, zjistíme, že v tabulce ODKAZ máme atribut ASCII_TEXT, nad kterým budeme provádět vyhledávání. Ze vstupního řetězce ořežeme možnou diakritiku. Příslušným SELECTEM vybereme ty odkazy, kde bude splněna podmínka na existenci zadaného podřetězce (už bez diakritiky) ve sloupci ASCII_TEXT. Pro zobrazení jednotlivého odkazu potřebujeme znát jeho název, popis a url (viz předchozí díl). Také nás bude u každého odkazu zajímat, z jaké je sekce. Část skriptu, která tento úkol řeší, je následující:
|
Pár poznámek k uvedenému kódu. Nejprve ze vstupního řetězce pomocí funkce StrTr odstraníme diakritiku, to je nejspíš zřejmé. Pak sestrojíme SQL dotaz, který nám pro každý odkaz, kromě již uvedených atributů, bude vracet i číslo sekce, abychom ve výpisu mohli sekci zobrazit ve formě klikacího odkazu. (zavolá se skript index.php?sekce=$sekce_id).
Po provedení dotazu vypíšeme informaci, jaký řetězec jsme hledali a kolik záznamů bylo nalezeno. Po té začneme generovat seznam nalezených odkazů. Výpis každého odkazu je podobného tvaru, jak jsme si uváděli v předchozím díle s tím, že na nový řadek za ním, je uveden název sekce, ve které daný odkaz byl nalezen. Na název sekce lze kliknout a přenese nás na základní výpis odkazů v dané sekci. Nakonec po vygenerování celého seznamu nezapomeneme seznam uzavřít a skončit relaci s databází.
Zde bych měl připomenout, jakou hodnotu má pro každý odkaz atribut ASCII_TEXT. Tato hodnota obsahuje řetězec složený z názvu a popisu odkazu (bez diakritiky). Tento atribut se generuje automaticky při přidání odkazu. Uživatel zadá název, popis a další jiné informace, my ten název s popisem sloučíme, ořežeme diakritiku obdobným způsobem, jak je uvedeno v ukázce, a uložíme do ASCII_TEXT. Blíže se tomuto postupu budeme věnovat v díle, kde budeme řešit problém přidávání odkazu do katalogu stránek.
Na závěr mi dovolte ještě jednu poznámku. Pokud chceme, aby vyhledávání fungovalo bez ohledu na velikost písmen a diakritiku, máme samozřejmě i jiné možnosti, jak tento úkol implementovat. Můžete použít regulární výrazy v MySQL, které ovšem mají tu nevýhodu, že dotazy SQL s použitím regulárních výrazů jsou velmi pomalé. Proto bych tuto variantu obecně nedoporučoval. Naše varianta s atributem ASCII_TEXT nám zabírá více prostoru (každý záznam v tabulce je větší v podstatě o 240 bajtů), ale na druhou stranu je vyhledávání rychlé.
Pokročilé hledání
Jak jste si v úvodním příkladu jistě všimli, vedle tlačítka „Najdi“ je uveden odkaz [Pokročilé hledání], který bude odkazovat na skript advanced.php určeného pro složitější vyhledávání a obsah tohoto skriptu bude náplní příštího článku.
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
-
ZONER Webmail jako první v Česku přináší BIMI s VMC
11. července 2024 -
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023
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
stefan
Říj 13, 2009 v 21:25skoda, ze neni ukazka :-(
kasaf
Čvc 13, 2012 v 22:07zdravím, mám menší e-shop, vyhledávání mám, ale potřebuji s filtry(parametry), např. když chci něco vyhledat, tak aby si vybral například cenu vzestupně,atd.. prosím o nápad stačí mě nakopnout ať se chytnu.díky ;)