<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article PHP - jednoduche vyhladavanie v MySQL is written by PaBi3
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>
Vyhladavanie v PHP a MySQL je sucastou takmer kazdej webovej aplikacie. Zdrojove kody a vysvetlenie fungovania maleho vyhladavania najdete v tomto clanku.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Moznosti ako vyhladavat v databaze MySQL retazce pomocu PHP je vela. Asi najlepsim
a najrychlejsim sposobom vyhladavania je, ak vyuzivate databazove indexy. V tomto
clanku sa nimi ale zaoberat nebudeme ale prejdem na vyhladavanie bez ich pomoci.
Ako prve co by sme si mali vytvorit alebo predstavit je tabulka s ktorou bude
PHP a databaza pracovat.

CREATE TABLE clanky(

id MEDIUMINT UNSIGNED NOT NULL auto_increment,

nadpis VARCHAR(96) NOT NULL,

obsah TEXT NOT NULL,

PRIMARY KEY(id)

);

Vyhladavanie bude fungovat rozsirene(viz. roz. vyhladavanie)
urobime si prosty formular a ten bude pre vyhladavanie zatial stacit. Na vyber
bude zadanie retazca a potom vybranie akym sposobom chcete vyhladavat. Ci v nadpise
alebo v obsahu clanku.
Prve co spravime bude vlozenie textu resp. clanku do tabulky. Mozeme si vybrat
akykolvek text napr. tento:

INSERT INTO clanky(nadpis,obsah) VALUES(

'Konfiguracia PHP a Apache',

'PHP sa konfiguruje velmi lahko. Apache je velmi dobry server a dobre sa mi s nim
pracuje. Mam rad aj jeho mod-rewrite.'

)

Nadpis bude "Konfiguracia PHP a Apache". Ostatny text bude obsah clanku ulozeny
v stlpci "obsah". Myslim, ze teraz mozeme pristupit k suboru na pripojenie do
databazy. Subor sa bude volat mysql.php. Vlozime do neho nasledujuci kod:

&lt;?php #mysql.php

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql_select_db("databaza") OR die("System nenasiel tabulky!&lt;br /&gt;n");

?&gt;



Ak nerozumiete niektorym funkciam mozete si ich blizsie prestudovat v clanku
PHP pre zaciatocnikov - Databazy, 11.diel.
Teraz ak uz sme pripojeny do databazy a pripraveny vyhladavat retazec mozeme zacat.
Prve co urobime je subor vyhladavanie.php a vlozime do neho nasledujuci kod:

&lt;?php #vyhladavanie.php

require_once("mysql.php");



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

&nbsp;&nbsp;&nbsp;&nbsp;if(empty($_GET[retazec])){


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$retazec = FALSE;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$error = "Nezadali ste retazec pre vyhladavanie!&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;} else {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$retazec = $_GET[retazec];


&nbsp;&nbsp;&nbsp;&nbsp;}

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$podla = "nadpis";

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$podla = "obsah";

&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($retazec){

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "Vysledky vyhladavania &lt;strong&gt;$retazec&lt;/strong&gt;!&lt;br /&gt;n";


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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($num=1;$num&lt;count($hladaj);$num++) {

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$vysledok = mysql_query($sql);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$pocet = mysql_num_rows($vysledok);


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($pocet == NULL){

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die("Zadany retazec sa v databaze nenachadza!&lt;br /&gt;n");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while($zaznam = mysql_fetch_object($vysledok)){


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$nadpis = $zaznam-&gt;nadpis;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "$nadpis&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unset($nadpis);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;hr /&gt;Vysledkov: &lt;strong&gt;$pocet&lt;/strong&gt; | &lt;a href='javascript:history.back()' title='Spat'&gt;Spat&lt;/a&gt;&lt;br /&gt;n";


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $error;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

} else {

&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;form action='{$_SERVER[PHP_SELF]}' method='get'&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fieldset&gt;&lt;legend&gt;Zadajte retazec&lt;/legend&gt;n";


&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Text:&lt;br /&gt;&lt;input name='retazec' type='text' /&gt;&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hladaj...&lt;br /&gt;&lt;select name='podla'&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option value='nadpis'&gt;V nadpise&lt;/option&gt;n";


&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;option value='obsah'&gt;V obsahu&lt;/option&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/select&gt;&lt;br /&gt;&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type='submit' value='Vyhladaj' /&gt;n";


&nbsp;&nbsp;&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fieldset&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;/form&gt;n";

}

?&gt;



V zdrojovom kode si mozete vsimnut formular na spodku stranky. Pokial nieje odoslany
zobrazi sa. Ihned po jeho vyplneni a odoslani sa spracuje. Spracovanie prebieha,
tak ze sa zadany retazec premeni na pole pomocou funkcie explode(" ",$retazec).
Zadany retazec rozdeli na polia len tam kde su medzeri. Nasledne vyhladava obsah
databazy a pokusa sa najst zadany retazec. Ak ma pole $retazec viac ako jednu
hodnotu, tak zacne vyhladavat pomocou cyklu v databaze dalsie hodnoty pola s databazy.
Je jedno kolko ich je, pretoze cyklus for ich bude vyhladavat
donekonecna kym nevycerpa vsetky hodnoty pola.

Teraz by ste si nakoniec este mohli vyskusat napisat do formulara retazec php a cakat
na vysledok. Zobrazi sa vam zaznam s databazy, ktory sme tam v uvode clanku vlozili. Skuste si do databazy vlozit
este viac clankov a vyhladavat ich obsah. Tento kod je len taka mala kostra pre vyhladavanie.
Nieje bezpecny pre pouzitie pretoze niesu osetrene odosielane data. To je na par riadkov
ale to az nabuduce. Toto vyhladavanie je urcene pre male tabulky s malym poctom
stlpcov.</block>
</form>
<base href='http://pabi3.com/' />
<title>PHP - jednoduché vyhľadávanie v MySQL</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/php-jednoduche-vyhladavanie-v-mysql/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>PHP - jednoduché vyhľadávanie v MySQL</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>
