<?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/forum-v-php-a-mysql-5-diel/' />
<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 Forum v PHP a MySQL - 5. diel is written by PaBi3
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>
Posledny diel serialu Forum v PHP a MySQL
Vam prinesie hotovu "prevozu" schopnu aplikaciu, ktoru je odporucane si upravit podla seba.</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>
Upozornenie
Po malej prestavke som sa vratil k serialu o fore v PHP a MySQL jazyku. V clanku
chcem upozornit na to, ze bol skritizovany styl syntaxe. Konkretne ide o zapis
superglobalnych poli a poli. Priklad mojho kodu: $GLOBALS[kod].
Priklad spravneho alebo lepsie povedane odporucanejsieho kodu je: $GLOBALS['kod']
alebo taktiez je mozne pouzit aj uvodzovky. Tieto sposoby sa velmi neodlisuju ale
urcite pouzivat kod stylom $GLOBALS[kod] nieje nefunkcne iba neodporucane.
Teraz by som sa vratil k primarnej teme serialu - vyvoj diskusneho fora.

Co bude nove?
Ak sa ma pytate co nove pribudne vo fore tak to bude samozrejme slub v zavere minuleho
clanku - strankovanie. Dalsi ciel, ktory bol planovany je anti-spam. V podstate
nepojde o nic zlozite iba pridanie jedneho riadku k vypisom s databazy. Email sa nebude
upravovat pri zapise do databazy ale pri nacitani zmeni jeho tvar. Vratim sa este k
tomu strankovaniu. Funkcia strankovania bude obsahovat jeden paramenter, ktory
bude odcakavat cislo. Cislo bude predstavovat pocet zobrazenych tem na stranku.

Uprava kodu
Kod by mal byt teraz prepracovanejsi hlave funkcia zobraz_temy(). Bude
obohatena o strankovanie. Funkcia uz v podstate bola vysvetlena mierne v casti
clanku Co bude nove?.
Zdrojovy kod bude vyzerat nasledovne:

function zobraz_temy($zacni){

echo "&lt;h2&gt;Forum&lt;/h2&gt;n";

menu(); // volanie funkcie pre menu


$strana&nbsp;&nbsp;&nbsp;= urlencode($_GET['strana']);

$zobrazit = urlencode($_GET['zobrazit']);




$pocet = mysql_num_rows(mysql_query("SELECT id_temy FROM temy"));

$pocet = ceil($pocet/$zacni);

if($pocet == NULL){


&nbsp;&nbsp;&nbsp;&nbsp;echo "V databaze sa momentalne nenachadzaju ziadne clanky!&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;require_once("layout/bottom.php");

&nbsp;&nbsp;&nbsp;&nbsp;exit();

}



if(isset($_GET['zobrazit'])){

&nbsp;&nbsp;&nbsp;&nbsp;if($_GET['zobrazit'] == $zobrazit){


&nbsp;&nbsp;&nbsp;&nbsp;$zobrazit = ceil($zobrazit);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_GET['strana']){

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_GET['strana'] == $strana--){


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$strana = ceil($strana*$zacni);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql = mysql_query("SELECT id_temy, nadpis, datum FROM temy ORDER BY uprava DESC LIMIT $strana, $zobrazit");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while($stlpec = mysql_fetch_object($sql)){


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$id_temy = $stlpec-&gt;id_temy;

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$datum = $stlpec-&gt;datum;


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo
"&lt;div class="tema"&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo
"&lt;strong&gt;&lt;a href="?id=$id_temy" title="$nadpis"&gt;$nadpis&lt;/a&gt;&lt;/strong&gt;&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;echo
"&lt;small&gt;[ Datum:$datum ]&lt;/small&gt;n";


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo
"&lt;/div&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

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

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

} else {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql = mysql_query("SELECT id_temy,nadpis,datum FROM temy ORDER BY uprava DESC LIMIT 0, $zacni");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while($stlpec = mysql_fetch_object($sql)){


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$id_temy = $stlpec-&gt;id_temy;

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$datum&nbsp;&nbsp;&nbsp;= $stlpec-&gt;datum;


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;div class="tema"&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;strong&gt;&lt;a href="?id=$id_temy" title=""&gt;$nadpis&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;n";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;small&gt;[ Datum:$datum ]&lt;/small&gt;n";


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

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

&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;while($cislo != $pocet){

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cislo++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;a href="?strana=$cislo&amp;amp;zobrazit=$zacni" title="$cislo"&gt;$cislo&lt;/a&gt; n";


&nbsp;&nbsp;&nbsp;}

}


Funkciu si mozete podrobne prestudovat a zistite, ze cele strankovanie je zalozene
iba na podmienkach. Samozrejme iba v tomto pripade. Sposobov ako ho vytvorit je
nespocetne.

Jednu malu upravu by sme mohli urobit len tak pre radost. Bude to pridanie premennej
$zacni do suboru config.php. Tento postup je iba odporucany a
nie vyzadovany. Ale nech je to teda pokope, tak to dodrzime. Dalsi postup bude
upravenie suboru index.php.
Zdrojovy kod je nasledovny:


&lt;? #index.php

require_once("config.php");

require_once("functions.php");

include_once("layout/top.php");



if(isset($_GET['id'])){

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_GET['id'] == $id)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zobraz_temu($id);

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

} elseif(isset($_GET['tema']))

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vytvor_temu();

} else

{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zobraz_temy($zacni);

}



include_once("layout/bottom.php");

mysql_close();

?&gt;




Parameter $zacni je uz teraz vlozeny do funkcie zobraz_temy().
Je to vlastne premenna, ktora je uz dopredu definovana v konfiguracnom subore
config.php. Dalsia uprava bude anti-spam. Urobime ho jednoducho.
Staci ak pri vypise s databazy zmenite nacitany retazec.
Priklad:

$email = $zaznam-&gt;email;

$email = Str_Replace("@"," (at) ",$email);


Pri kazdom takomto vypise sa email upravi s tvaru email@domena.tld na
tvar email(at)domena.tld. Rovnako si mozete zmenit aj bodku alebo podobne.
Posledna zmena sa tyka funkcie zobraz_temu(). Vyhladajte cast funkcie kde
sa zapisuje prispevok do databazy k teme a pridajte tam tento riadok.

mysql_query("UPDATE temy SET uprava=NOW() WHERE id_temy='$id'");

V kodoch fora su aj komentare takze Vam budu napomocne. Bude tam popis typu "co robi co".
Odporucam si nastudovat aj tento clanok,
ak chcete mat ostru aplikaciu umiestnenu na internete.

Zdrojove kody
Cely zdrojovy kod diskusneho fora stiahnete tu!

Zaver
Toto by bola asi finalna uprava a forum by Vam malo sluzit na zaciatok dobre.
Po case ho dokazete upravit aj sami. Verim, ze to dokazete uz aj teraz.
Serial nadvazoval na zaklady PHP, ktore uci serial PHP pre zaciatocnikov do
urcitych dielov, ktore boli spomanute v minulych castiach serialu.</block>
</form>
<base href='http://pabi3.com/' />
<title>Fórum v PHP a MySQL - 5. diel</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/forum-v-php-a-mysql-5-diel/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>Fórum v PHP a MySQL - 5. diel</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>

