Fórum v PHP a MySQL - 5. diel

Posledný diel seriálu Fórum v PHP a MySQL Vám prinesie hotovú "prevozu" schopnú aplikáciu, ktorú je odporúčané si upraviť podľa seba.

Upozornenie

Po malej prestávke som sa vrátil k seriálu o fóre v PHP a MySQL jazyku. V článku chcem upozorniť na to, že bol skritizovaný štýl syntaxe. Konkrétne ide o zápis superglobálnych polí a polí. Príklad môjho kódu: $GLOBALS[kod]. Príklad správneho alebo lepšie povedané odporúčanejšieho kódu je: $GLOBALS['kod'] alebo taktiež je možné použiť aj úvodzovky. Tieto spôsoby sa veľmi neodlišujú ale určite používať kód štýlom $GLOBALS[kod] nieje nefunkčné iba neodporúčané. Teraz by som sa vrátil k primárnej téme seriálu - vývoj diskusného fóra.

Čo bude nové?

Ak sa ma pýtate čo nové pribudne vo fóre tak to bude samozrejme sľub v závere minulého článku - stránkovanie. Ďalší cieľ, ktorý bol plánovaný je anti-spam. V podstate nepôjde o nič zložité iba pridanie jedného riadku k výpisom s databázy. Email sa nebude upravovať pri zápise do databázy ale pri načítaní zmení jeho tvar. Vrátim sa ešte k tomu stránkovaniu. Funkcia stránkovania bude obsahovať jeden paramenter, ktorý bude odčakávať číslo. Číslo bude predstavovať počet zobrazených tém na stránku.

Úprava kódu

Kód by mal byť teraz prepracovanejší hlave funkcia zobraz_temy(). Bude obohatená o stránkovanie. Funkcia už v podstate bola vysvetlená mierne v časti článku Čo bude nové?.
Zdrojový kód bude vyzerať nasledovne:
function zobraz_temy($zacni){

echo "<h2>Fórum</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 databáze sa momentálne nenachádzajú žiadne články!<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>[ Dátum:$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>[ Dátum:$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 môžete podrobne preštudovať a zistíte, že celé stránkovanie je založené iba na podmienkach. Samozrejme iba v tomto prípade. Spôsobov ako ho vytvoriť je nespočetne.

Jednu malú úpravu by sme mohli urobiť len tak pre radosť. Bude to pridanie premennej $zacni do súboru config.php. Tento postup je iba odporúčaný a nie vyžadovaný. Ale nech je to teda pokope, tak to dodržíme. Ďalší postup bude upravenie súboru index.php.
Zdrojový kód je nasledovný:

<? #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 už teraz vložený do funkcie zobraz_temy(). Je to vlastne premenná, ktorá je už dopredu definovaná v konfiguračnom súbore config.php. Ďalšia úprava bude anti-spam. Urobíme ho jednoducho. Stačí ak pri výpise s databázy zmeníte načítaný reťazec.
Príklad:
$email = $zaznam->email;

$email = Str_Replace("@"," (at) ",$email);

Pri každom takomto výpise sa email upraví s tvaru email@domena.tld na tvar email(at)domena.tld. Rovnako si môžete zmeniť aj bodku alebo podobne. Posledná zmena sa týka funkcie zobraz_temu(). Vyhľadajte časť funkcie kde sa zapisuje príspevok do databázy k téme a pridajte tam tento riadok.
mysql_query("UPDATE temy SET uprava=NOW() WHERE id_temy='$id'");
V kódoch fóra sú aj komentáre takže Vám budú nápomocné. Bude tam popis typu "čo robí čo". Odporúčam si naštudovať aj tento článok, ak chcete mať ostrú aplikáciu umiestnenú na internete.

Zdrojové kódy

Celý zdrojový kód diskusného fóra stiahnete tu!

Záver

Toto by bola asi finálna úprava a fórum by Vám malo slúžiť na začiatok dobre. Po čase ho dokážete upraviť aj sami. Verím, že to dokážete už aj teraz. Seriál nadväzoval na základy PHP, ktoré učí seriál PHP pre začiatočníkov do určitých dielov, ktoré boli spomänuté v minulých častiach seriálu.

08.09.2005 17:28

PaBi3

Programovanie