Vyhľadávač v PHP a MySQL 2.

6. listopadu 2002

V druhom článku o vyhľadávači si vytvoríme dodatočný formulár pre vyhľadávanie, odkazy na viaceré nájdené strany a formulár pre napísanie čísla strany, na ktorú sa chceme dostať. Dodatočný formulár sa zíde zväčša pri vyhľadávaní mien a adries, kde môžeme uviesť podmienky pre lepšie vyhľadanie. V našom príklade vyhľadávame internetové stránky.

V dodatočnom formulári máme možnosť zobraziť slovenské, české alebo všetky stránky. Prostredníctvom formulárového prvku SELECT si vyberieme možnosť, ktorá nám najlepšie vyhovuje. V prípade, že by išlo napríklad o vyhľadávanie adries, môžeme vyhľadávať podľa mesta. Podmienka sa dá ľahko prepísať. Ďalej nám tento formulár ponúka zoradenie výsledkov podľa určitej položky a to v dvoch možnostiach – od A po Z alebo od Z po A.

V spodnej časti nám pribudnú odkazy na viacej stránok. Doteraz sme mohli prechádzať na predchádzajúcu alebo nasledujúcu stranu. Teraz sa nám ich v číslach vypíše viacej a klikneme na odkaz tej, ktorú chceme vidieť. Pokiaľ je stránok veľa, tak sa vypíše len určitý počet odkazov. To nám znemožní ísť týmto spôsobom na stranu, ktorej odkaz nieje k dispozícii. K tomu je však vyhotovený menší formulár, do ktorého sa napíše číslo strany. Po týchto úpravách už bude vyhľadávač vyzerať naozaj prakticky a nič nebude brániť v pohodlnom vyhľadávaní. Podrobnejšie si opíšeme všetky vyhotovené zmeny.

<!–kde budeme vyhľadávať (určené ako podmienka)–>
Kde: <select name=“kde“ class=“select“>
        <option value=“sk“>Slovensko</option>
        <option value=“cz“>Česká republika</option>
        <option value=“vsade“>Všade</option>
        </select>
<!-podľa ktorej položky chceme záznamy zoradiť–>
Zoradiť podľa: <select name=“zoradit“ class=“select“>
                        <option value=“nezoradit“>nezoradiť</option>
                        <option value=“Datum“>dátumu od najstaršieho</option>
                        <option value=“Datum DESC“>dátumu od najnovšieho</option>
                        <option value=“Nazov“>názvu od A po Z</option>
                        <option value=“Nazov DESC“>názvu od Z po A</option>
                        <option value=“Kde“>krajín od A po Z</option>
                        <option value=“Kde DESC“>krajín od Z po A</option>
                        </select>

Toto je dodatočná časť pre vyhľadávanie. Pomôže pri lepšom vyhľadaní toho správneho výsledku. Okruh nájdených záznamov sa tak ešte viac zmenší alebo sa aspoň vyhovujúcejšie zoradí podľa niektorého z položiek. Tie môžete ľubovoľne meniť, ako všetky ostatné časti, podľa vašich potrieb.

if($zoradit!=“nezoradit“): $orderby = „ORDER BY $zoradit“;
                              else: $orderby = „“;
endif;

Vytvorili sme premennú $orderby, ktorá určuje, podľa čoho chceme údaje zoradiť. Pokiaľ ich zoradiť nechceme, tak je táto premenná prázdna a nijako nenaruší beh skriptu. Hodnoty premennej $zoradit získavame z dodatočného formuláru pre vyhľadávanie.

if($kde!=“vsade“): $krajina = „AND (Kde = ‚$kde‘)“;
                     else: $krajina = „“;
endif;

Vytvorili sme premennú $krajina, ktorá bude slúžiť ako časť už existujúcej podmienky. Preto aj obsahuje AND. Táto premenná nám zaručí, že sa zobrazia len záznamy, v ktorých v položke „Kde“ bude len tá krajina, z ktorej stránku hľadáme, alebo rovno všetky krajiny. Táto časť skriptu zmenší počet hľadaných záznamov a vyhľadávanie sa stane prehľadnejším.

$result = mysql_query(„SELECT * FROM vyhladavac WHERE (Nazov like ‚%$slovo%‘) OR (Popis like ‚%$slovo%‘) $krajina“);

Oproti minulému článku sa nám zmenilo aj prvé vyhľadávanie. Na jeho konci pribudla premenná $krajina, ktorá patrí k podmienke. Zmenilo sa nám aj druhé vyhľadávanie:

$vysledok = mysql_query(„SELECT * FROM vyhladavac WHERE (Nazov like ‚%$slovo%‘) OR (Popis like ‚%$slovo%‘) $krajina $orderby LIMIT $od,$do“);

Tu okrem premennej $krajina pribudla premenná $orderby, ktorá určuje zoradenie výsledkov. Keďže prvé vyhľadávanie nám iba zisťuje počet nájdených záznamov, je tam premenná $orderby zbytočná.

Odkazy na strany vytvoríme pomocou podmienok a cyklu. Pokiaľ máme počet strán väčší ako jednu, ale menší ako desať, necháme vypísať odkazy na všetky strany. Odkazom nieje tá strana, na ktorej sa nachádzame. Jej číslo sa nám zvýrazní.

if($pocet_stran>1 && $pocet_stran<10):
    echo „<div align=\“center\“ class=\“normal\“> Strany: „;
        for($a=0;$a<$pocet_stran;$a++) {
          $e = $a+1;
          if($strana==$e):
          echo „<b>$e</b>&nbsp;“;
          else:
          echo „<a href=\“vyhladavac.php?strana=$e&slovo=$slovo&zoradit=$zoradit&kde=$kde\“>$e</a>&nbsp;“;
          endif;
        };
    echo „</div>“;

V URL uchovávame všetky potrebné premenné, ktoré potrebujeme aj na ďalších stranách záznamov. Pokiaľ by sme niektorú premennú vynechali, tak by sa vyhľadávač správal inak. Dôsledok by mohol byť napríklad taký, že by sa zmenil počet nájdených záznamov a tým aj počet strán. Táto časť vyhľadávača je veľmi dôležitá. Teraz si ukážeme ďaľšiu možnosť, ktorá sa môže naskytnúť. Ak je počet strán väčší ako desať, nebudeme vypisovať všetky strany. Mohlo by ich byť aj viac ako sto či tisíc (záleží od množstva záznamov v databáze) a pri takom počte by bolo hľadanie tej správnej strany dosť zdĺhavé a neprehľadné. Miesto toho sa nám zobrazia tri bodky a odkaz na úplne poslednú stranu. Aj tu platí, že strana, na ktorej sa nachádzame sa zvýrazní, pokiaľ je medzi vypísanými odkazmi. Tu je ukážka:

elseif($pocet_stran>10):
  echo „<div align=\“center\“ class=\“normal\“> Strany: „;
    for($a=0;$a<7;$a++) {
      $e = $a+1;
      if($strana==$e):
      echo „&nbsp;<b>$e</b>“;
      else:
      echo „&nbsp;<a href=\“vyhladavac.php?strana=$e&slovo=$slovo&zoradit=$zoradit&kde=$kde\“>$e</a>“;
      endif;
    };
    if($strana==$pocet_stran): echo „…<b>$pocet_stran</b>“;
                                     else: echo „…<a href=\“vyhladavac.php?strana=$pocet_stran&slovo=$slovo&zoradit=$zoradit&kde=$kde\“> $pocet_stran </a>“;
    endif;
  echo „</div>“;
endif;

A teraz si vytvoríme jednoduchý formulár pre rýchly prechod na akúkoľvek stranu. Tento formulár sa nám oplatí zobrazovať iba ak je väčší počet strán. My sme si tento počet nastavili na 5. Je zbytočné vytvárať tento formulár, pokiaľ je počet strán do 5. V takom prípade sa predsa veľmi jednoducho dostaneme na konkrétnu stranu aj bez potreby vypisovať jej číslo.

if($pocet_stran>5):
    echo „<div align=\“center\“ class=\“normal\“><form action=\“vyhladavac.php?slovo=$slovo&zoradit=$zoradit&kde=$kde\“ method=\“post\“>Prejsť na stranu č. <input name=\“strana\“ class=\“textinput\“ size=\“3\“>&nbsp;<button type=\“submit\“ class=\“button\“>Choď</button></form></div>“;
endif;

Na záver ešte uvediem použité kaskádové stýly:

<style type=“text/css“>
  <!–
  a:link {text-decoration:none; color:#0054A8}
  a:visited {text-decoration:none; color:#0054A8}
  a:hover {text-decoration:underline; color:#0054A8}
  a:active {text-decoration:underline; color:#0054A8}
  .small {FONT-SIZE: 10px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; margin-left:7; margin-right:7;}
  .normal {FONT-SIZE: 12px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; margin-left:7; margin-right:7;}
  .big {FONT-SIZE: 14px; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; margin-left:7; margin-right:7;}
  .button {font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background: #6EACF9; font-style: bold; color: #10408F;}
  .textinput {BACKGROUND-COLOR: #6EACF9; BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; COLOR: #10408F; BORDER-BOTTOM: silver 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;}
  .select {FONT-SIZE: 9pt; BACKGROUND-COLOR: #6EACF9; BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; COLOR: #10408F; BORDER-BOTTOM: silver 1px solid; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;}
  –>
  </style>

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *