Dnes: 21. ledna 2018    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Databázový stroj
    (Database Engine)

    Pod pojmem Database Engine (tedy pod databázovým strojem) se obvykle rozumí jádro databázového serveru a základní obslužné programy tohoto jádra (například zajišťující vzdálené připojení uživatelů). Lze tedy říci, že databázový stroj je podmnožinou databázového serveru, přičemž pod pojmem databázový server je nutné vidět vybavení (typicky softwarové) pracující nad danou databází a zajišťující veškeré činnosti (včetně všech potřebných komunikací), které nad danou databází mají být zajišťovány.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Databáze a PHP XIII.


    [Vývoj] - Ve třináctém pokračování našeho rozsáhlého seriálu věnovaného problematice PHP ve spojení s databázovými technologiemi si dokončíme praktický příklad diskusního webového fóra. Hlavním tématem tohoto dílu bude problematika rekurzivního zobrazování diskusního stromu a čtení příspěvků.



    V minulých pokračováních jsme se zabývali aplikací umožňující provozování jednoduchého diskusního fóra. Zdánlivě je před námi ještě mnoho potřebného kódu, ale ve skutečnosti se zbývající činnost aplikace dá provádět malými obměnami již probíraných částí. V podstatě nyní zbývá zavést funkci, která by svým rekurzivním charakterem umožnila rozbalovaní jednotlivých větví fóra až na požadovanou úroveň a dále ještě stránka umožňující čtení existujících příspěvků, kde se propojí informace z našich dvou databázových tabulek (hlavička zprávy + vlastní obsah zprávy).

    Výpis základních témat (výchozí zobrazení) provádíme již kódem, který je obsažen na základní straně (index.php). Dojde-li k požadavku rozbalení některé větve na základě využití sestaveného odkazu tématu, bude již využit kód funkce rozbalit(). Část kódu rozbalování větve se opakuje z logiky výpisu základních témat. Zdrojový kód by šel v tomto místě zestručnit, ale bylo by to na úkor čitelnosti a přehlednosti. Parametrem funkce rozbalit() je jednoznačně určující ID příspěvku a druhý parametr $odsun zajišťuje případné doplňující odsazování odkazu pro zobrazení závislosti jednotlivých příspěvků (přednastavené odsazování je řešeno pouze podle počtu povinného přidávaného Re: k titulku).

    Informace o aktuálním stavu stromu jsou získávány z globální proměnné $pole_strom. Samozřejmě je rozděleno zpracování řádku (hlavičky příspěvku) podle toho, jestli se jedná o další pod-větev tématu nebo prozatím o list bez reakce. Potřebné odkazy jsou sestaveny pomocí již popsaných funkcí. Nejdůležitější část funkce je však na samém konci, kde je umístěna podmínka s vyvoláním téže funkce (funkce volá sebe sama). Tím je zajištěno rekurzivní rozbalování větví až na požadovanou úroveň. Teprve až v okamžiku, kdy zpracování dojde při rozbalování konkrétní větve k poslední reakci, dojde k ukončení volané funkce rozbalit() a řízení (výpis) je navrácen do úrovně základních témat.

    // Rekurzivní funkce pro rozbalování jednotlivých větví diskuse
      function rozbalit($ID,$odsun=0){
        global $pole_strom, $barva;
    
        $dotaz="select * from hlavicka where rodic=".$ID;
        $vysledek=mysql_query($dotaz);
    
        if(!$vysledek):
          die("<b>Chyba v konzistenci stromu diskuse</b>");
        else:
          // zobrazení podvětve stromu diskuse
          for($i=0;$i<mysql_num_rows($vysledek);$i++){   
            // výpis témat větve
            // nastavení barvy řádku ve výpisu
            if($barva%2) $pozadi="#A4CAF4"; else $pozadi="#EEFAFA";
            echo "<tr bgcolor=\"$pozadi\">\n";
    
            $asoc_pole=mysql_fetch_array($vysledek);
            $ID=$asoc_pole["ID_prispevku"];
    
            // Zjištění odsunu oproti rodiči
            $odsun=substr_count($asoc_pole["titulek"],"Re:");  
            // vrací počet nálezů
    
            $odsunuti="";
            for($j=0;$j<$odsun;$j++)     
               // optické odsunutí odpovědí doprava
              $odsunuti.="<img src=\"./obr/mezera.gif\">";
    
            echo "<td>"."<b>   $odsunuti".odkaz($ID)
                  .$asoc_pole["autor"]."</b></td>\n"; 
                      // sestavení odkazu pro větev
    
            echo "<th width=\"60%\">";
            if(empty($odkaz))         // sestavení odkazu pro list
               echo "<a href=\"./cteni.php?cislo=$ID\""
                    ."\">".$asoc_pole["titulek"]."</a>";
            else
               echo $asoc_pole["titulek"];
            echo "</th>\n";
            echo "<th width=\"15%\">".$asoc_pole["cas"]."</th>\n";
            echo "</tr>\n";
            $barva=!$barva;     // střídání barev sloupců výpisu témat
    
            if($pole_strom[$ID]){  
                 // zobrazit i vnořené části - rekurzivní běh funkce
              rozbalit($ID);
            }
          }
        endif;
      }
    

    Poslední částí tohoto jednoduchého fóra je vytvoření strany, která nám umožní číst příspěvky a případně na ně reagovat. Vyvolat lze tento skript využitím odkazu spojeného s titulkem požadovaného příspěvku. Zde se zastavím ukázkou jen na několika místech zdrojového kódu, úplný výpis potřebného skriptu můžete získat z odkazu na soubor cteni.php.

    V prvním úryvku kódu je zobrazeno získání informací o příspěvku včetně obsahu. Informace jsou spojeny na základě jednoznačného ID_prispevku z obou tabulek hlavicka a text. Proběhne-li načtení v pořádku, jsou příslušné údaje doplněny do formuláře, který slouží ve stejné formě i pro zadání nového příspěvku.

    <?
      include "./otvdb.php";
      $dotaz="select hlavicka.ID_prispevku,autor,titulek,text.zprava".
             " from hlavicka,text".
             " where hlavicka.ID_prispevku=$cislo and".
             " text.ID_prispevku=$cislo";
      $vysledek=mysql_query($dotaz);
      if(mysql_num_rows($vysledek)>0)
        $asoc_pole=mysql_fetch_array($vysledek);
      else{
        echo "Došlo k chybě při zobrazování obsahu zprávy.";
           }
    ?>
    

    Text je v jednotlivých polích zobrazen jen v režimu čtení. Nejdůležitější je tento požadavek pro naformátovaný tvar titulku příspěvku. Ke každé odpovědi na příspěvek je totiž přidána předpona Re:, což se děje opakovaně pro každou další úroveň zanoření příspěvku. Počet těchto předpon je, jak už bylo naznačeno, využit pro správné odsazení tohoto příspěvku v hierarchii fóra.

    <td colspan="2">
        <textarea name="telo"  rows="6" cols="40" readonly>
          <? echo $asoc_pole["zprava"] ?>
        </textarea>
    </td>
    

    Diskuse

    Ze stránky lze odejít dvěma předpřipravenými tlačítky – Zpět a Odpovědět. První možnost zajistí návrat na hlavní stranu index.php bez jakékoli změny. Druhá možnost nabízí vytvoření nové reakce na tento příspěvek. Zpracování by zde pokračovalo skriptem pridat.php, který je už předpřipravený pro tento případ.

    Tímto se nám tedy uzavřel základní kruh aplikace fóra. Přidávat lze samozřejmě další součásti typu přihlašování se k systému, filtrování příspěvků fóra podle zájmu, administrativní promazávání příspěvků apod. Jde však už o rozšiřování, které není nutnou součástí pro základní funkci. Zde nám šlo především o zobrazení základních vazeb jednotlivých příspěvků a principu uchování jejich závislostí. Ať jste si již aplikaci zkusili poskládat nebo ne, doufám, že vám byl tento výklad alespoň zčásti k užitku.

    Pokud však požadujete hotové fórum a jde vám pouze o získání zdrojového kódu k použití, lze na Internetu nalézt volně použitelné systémy. Jedním z nich je třeba projekt Phorum, který je šířený jako Open Source. Opět se samozřejmě jedná o způsob publikování a čtení příspěvků s využitím relační databáze, zde však podstatně zdokonalený.

    Související články:
    Databáze a PHP XIV. (09.06.2005)
    Databáze a PHP XII. (19.05.2005)
    Databáze a PHP XI. (12.05.2005)
    Databáze a PHP X. (07.05.2005)
    Databáze a PHP IX. (29.04.2005)
    Databáze a PHP VIII. (20.04.2005)
    Databáze a PHP VII. (07.04.2005)
    Databáze a PHP VI. (24.03.2005)
    Databáze a PHP V. (10.03.2005)
    Databáze a PHP IV. (01.03.2005)
    Databáze a PHP III. (22.02.2005)
    Databáze a PHP II. (15.02.2005)
    Databáze a PHP I. (08.02.2005)

    ( Celý článek! | Autor: Martin Pokorný | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1557 hl.)
    Do 1 000,- Kč 
     (1074 hl.)
    Do 10 000,- Kč 
     (1003 hl.)
    Do 25 000,- Kč 
     (1385 hl.)
    Do 50 000,- Kč 
     (1019 hl.)
    Do 75 000,- Kč 
     (1183 hl.)
    Více než 75 000,- Kč 
     (1022 hl.)

    Celkem hlasovalo: 8243


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena