The article Forum v PHP a MySQL - 5. diel is written by PaBi3
Posledny diel serialu Forum v PHP a MySQL Vam prinesie hotovu "prevozu" schopnu aplikaciu, ktoru je odporucane si upravit podla seba.
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 "<h2>Forum</h2>n"; menu(); // volanie funkcie pre menu $strana   = 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){     echo "V databaze sa momentalne nenachadzaju ziadne clanky!<br />n";     require_once("layout/bottom.php");     exit(); } if(isset($_GET['zobrazit'])){     if($_GET['zobrazit'] == $zobrazit){     $zobrazit = ceil($zobrazit);         if($_GET['strana']){             if($_GET['strana'] == $strana--){                 $strana = ceil($strana*$zacni);                    $sql = mysql_query("SELECT id_temy, nadpis, datum FROM temy ORDER BY uprava DESC LIMIT $strana, $zobrazit");                    while($stlpec = mysql_fetch_object($sql)){                       $id_temy = $stlpec->id_temy;                       $nadpis = $stlpec->nadpis;                       $datum = $stlpec->datum;                       echo "<div class="tema">n";                       echo "<strong><a href="?id=$id_temy" title="$nadpis">$nadpis</a></strong><br />n";                       echo "<small>[ Datum:$datum ]</small>n";                       echo "</div>n";                   }               }          }     } } else {       $sql = mysql_query("SELECT id_temy,nadpis,datum FROM temy ORDER BY uprava DESC LIMIT 0, $zacni");       while($stlpec = mysql_fetch_object($sql)){             $id_temy = $stlpec->id_temy;             $nadpis  = $stlpec->nadpis;             $datum   = $stlpec->datum;             echo "<div class="tema">n";             echo "<strong><a href="?id=$id_temy" title="">$nadpis</a></strong><br />n";             echo "<small>[ Datum:$datum ]</small>n";             echo "</div>n";       }    }    while($cislo != $pocet){         $cislo++;         echo "<a href="?strana=$cislo&amp;zobrazit=$zacni" title="$cislo">$cislo</a> n";    } } 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: <? #index.php require_once("config.php"); require_once("functions.php"); include_once("layout/top.php"); if(isset($_GET['id'])){       if($_GET['id'] == $id)       {             zobraz_temu($id);       } } elseif(isset($_GET['tema'])) {       vytvor_temu(); } else {       zobraz_temy($zacni); } include_once("layout/bottom.php"); mysql_close(); ?> 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->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.
Fórum v PHP a MySQL - 5. diel Návrat

Fórum v PHP a MySQL - 5. diel