PHP - jednoduché vyhľadávanie v MySQL

Vyhľadávanie v PHP a MySQL je súčasťou takmer každej webovej aplikácie. Zdrojové kódy a vysvetlenie fungovania malého vyhľadávania nájdete v tomto článku.

Možností ako vyhľadávať v databáze MySQL reťazce pomocu PHP je veľa. Asi najlepším a najrýchlejším spôsobom vyhľadávania je, ak využívate databázové indexy. V tomto článku sa nimi ale zaoberať nebudeme ale prejdem na vyhľadávanie bez ich pomoci. Ako prvé čo by sme si mali vytvoriť alebo predstaviť je tabuľka s ktorou bude PHP a databáza pracovať.

CREATE TABLE clanky(

id MEDIUMINT UNSIGNED NOT NULL auto_increment,

nadpis VARCHAR(96) NOT NULL,

obsah TEXT NOT NULL,

PRIMARY KEY(id)

);
Vyhľadávanie bude fungovať rozšírene(viz. roz. vyhľadávanie) urobíme si prostý formulár a ten bude pre vyhľadávanie zatiaľ stačiť. Na výber bude zadanie reťazca a potom vybranie akým spôsobom chcete vyhľadávať. Či v nadpise alebo v obsahu článku. Prvé čo spravíme bude vloženie textu resp. článku do tabuľky. Môžeme si vybrať akýkoľvek text napr. tento:
INSERT INTO clanky(nadpis,obsah) VALUES(

'Konfigurácia PHP a Apache',

'PHP sa konfiguruje veľmi lahko. Apache je veľmi dobrý server a dobre sa mi s ním
pracuje. Mám rád aj jeho mod-rewrite.'

)
Nadpis bude "Konfigurácia PHP a Apache". Ostatný text bude obsah článku uložený v stĺpci "obsah". Myslím, že teraz môžeme pristúpiť k súboru na pripojenie do databázy. Súbor sa bude volať mysql.php. Vložíme do neho nasledujúci kód:
<?php #mysql.php

$dbc = mysql_connect("localhost","login","heslo") OR die("Chyba spojenia!<br />n");

       mysql_select_db("databaza") OR die("Systém nenašiel tabuľky!<br />n");

?>


Ak nerozumiete niektorým funkciám môžete si ich bližšie preštudovať v článku PHP pre začiatočníkov - Databázy, 11.diel. Teraz ak už sme pripojený do databázy a pripravený vyhľadávať reťazec môžeme začať. Prvé čo urobíme je súbor vyhladavanie.php a vložíme do neho nasledujúci kód:
<?php #vyhladavanie.php

require_once("mysql.php");



if(isset($_GET[retazec])){

    if(empty($_GET[retazec])){


        $retazec = FALSE;

        $error = "Nezadali ste reťazec pre vyhľadávanie!<br />n";

    } else {

        $retazec = $_GET[retazec];


    }

    if($_GET[podla] == "nadpis"){

        $podla = "nadpis";

    } elseif($_GET[podla] == "obsah"){


        $podla = "obsah";

    }

        if($retazec){

            echo "Výsledky vyhľadávania <strong>$retazec</strong>!<br />n";


            $retazec = explode(" ",$retazec);

            $sql = "SELECT nadpis FROM clanky WHERE $podla LIKE '%".$retazec[0]."%'";


            for ($num=1;$num<count($hladaj);$num++) {

                $sql .= "$sql AND $podla LIKE '%".$hladaj[$num]."%'";


            }

            $sql = "$sql ORDER BY id DESC";

            $vysledok = mysql_query($sql);

            $pocet = mysql_num_rows($vysledok);


            if($pocet == NULL){

                die("Zadaný reťazec sa v databáze nenachádza!<br />n");

            }

            while($zaznam = mysql_fetch_object($vysledok)){


                $nadpis = $zaznam->nadpis;

                echo "$nadpis<br />n";

            }

            unset($nadpis);

            echo "<hr />Výsledkov: <strong>$pocet</strong> | <a href='javascript:history.back()' title='Späť'>Späť</a><br />n";


        } else {

            echo $error;

        }

} else {

    echo "<form action='{$_SERVER[PHP_SELF]}' method='get'>n";

    echo "      <fieldset><legend>Zadajte reťazec</legend>n";


    echo "            Text:<br /><input name='retazec' type='text' /><br />n";

    echo "            Hľadaj...<br /><select name='podla'>n";

    echo "                <option value='nadpis'>V nadpise</option>n";


    echo "                <option value='obsah'>V obsahu</option>n";

    echo "            </select><br /><br />n";

    echo "            <input type='submit' value='Vyhľadaj' />n";


    echo "      </fieldset>n";

    echo "</form>n";

}

?>


V zdrojovom kóde si môžete všimnúť formulár na spodku stránky. Pokiaľ nieje odoslaný zobrazí sa. Ihneď po jeho vyplnení a odoslaní sa spracuje. Spracovanie prebieha, tak že sa zadaný reťazec premení na pole pomocou funkcie explode(" ",$retazec). Zadaný reťazec rozdelí na polia len tam kde sú medzeri. Následne vyhľadáva obsah databázy a pokúša sa nájsť zadaný reťazec. Ak má pole $retazec viac ako jednu hodnotu, tak začne vyhľadávať pomocou cyklu v databáze ďalšie hodnoty pola s databázy. Je jedno koľko ich je, pretože cyklus for ich bude vyhľadávať donekonečna kým nevyčerpá všetky hodnoty pola.

Teraz by ste si nakoniec ešte mohli vyskúšať napísať do formulára reťazec php a čakať na výsledok. Zobrazí sa vám záznam s databázy, ktorý sme tam v úvode článku vložili. Skúste si do databázy vložiť ešte viac článkov a vyhľadávať ich obsah. Tento kód je len taká malá kostra pre vyhľadávanie. Nieje bezpečný pre použitie pretože niesú ošetrené odosielané dáta. To je na pár riadkov ale to až nabudúce. Toto vyhľadávanie je určené pre malé tabuľky s malým počtom stĺpcov.

27.08.2005 17:13

PaBi3

Programovanie