<?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='canonical' href='http://pabi3.com/blog/php-jednoduche-vyhladavanie-v-mysql/' />
<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. V clanku by som chcel znazornit, ako take vyhladavanie moze vyzerat.</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 nie je 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).
Nasledne vyhladava obsah databazy a pokusa sa najst zadany retazec. Ak ma pole $retazec viac ako jeden
prvok, zacne cyklicky vyhladavat v databaze dalsie hodnoty pola.
Je jedno kolko ich je, pretoze cyklus for ich bude vyhladavat
donekonecna kym nevycerpa vsetky hodnoty pola.

Nakoniec vyskusame napisat do formulara retazec php a cakat
na vysledok. Zobrazi sa nam zaznam z databazy, ktory sme tam na zaciatku clanku vlozili. Skuste si do databazy vlozit
este viac clankov a vyhladavat ich obsah. Tento kod je len taka mala kostra pre vyhladavanie.
Nie je bezpecny pre pouzitie pretoze nie su osetrene odosielane data &ndash; to necham na vas.</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>

