Dnes: 29. dubna 2017    | 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?
    Replikace
    Replikace slouží pro zajištění konzistentnosti dvou a více databází, nejčastěji pak o stejné struktuře v rámci distribuovaného zpracování. Vyspělé SŘBD replikace podporují, případně lze použít řešení třetích stran či replikační logiku zajistit vlastními postupy.

    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.
    Jak na ankety ve Firebirdu podruhé


    [Vývoj] - Různé ankety na internetu jsou již běžnou záležitostí. Dovolují vám získat informace o tom, co si návštěvníci webu přejí, co je zajímá či v případě softwaru jakou funkci nejvíce postrádají. Stejně tak, jako jsou běžné ankety, jsou běžné i různé návody na jejich vytvoření. Nejčastější kombinace, kterou nalezneme v návodech je využití PHP a nějakého formátu souboru pro uložení dat, případně MySQL. My si v tomto krátkém seriálu ukážeme, jak vytvářet ankety za pomoci pouze databázové platformy Firebird. Dnes se mj. podíváme na možnost využití uložených procedur při ošetřování vícenásobného hlasování.



    Jak jsme již řekli na začátku prvního dílu, pokusíme se celý systém anket realizovat pouze za pomoci standardních prostředků databázové platformy Firebird. V předchozím dílu jsme vytvořily pouze tabulky – tedy podklad pro ankety. Nebylo na tom nic, co by nešlo využít i na jiných databázích a zároveň jsme si řekli, že tabulky máme znormalizovány. Dnes si ukážeme některé další vlastnosti Firebirdu, které můžeme u anketního systému využít.

    Asi základní operací v anketním systému – kromě vytvoření ankety a daných odpovědí – je zaznamenání hlasu uživatele. Zde je toto realizováno triviálním vložením záznamu do tabulky ANKETA_HLASOVANI. Jak již bylo řečeno, pro lepší budoucí využití si zaznamenáme čas a IP adresu účastníka. Vzhledem k faktu, že ankety jsou ve velké většině na webu, musíme IP adresu účastníka ošetřit přímo na straně skriptu (řešení na straně databáze není možné).

    Uložení času již ovšem můžeme přímo na FB lehce realizovat. Stačí využít proměnnou current_timestamp, která nám dovoluje získat aktuální datum a čas serveru kde je FB v provozu. Vzhledem k tomu, že tato proměnná pracuje na úrovni sekund, pro velký počet vložení doporučuji využít techniky programovacího jazyka a pracovat na úrovní milisekund, hlavně kvůli pozdějšímu sčítání hlasů. Zbytek je velice jednoduchý. Insert příkaz by mohl vypadat například takto:

    INSERT INTO anketa_hlasovani (id, id_odpoved, ip, cas) 
      VALUES (NULL, %cislo_odpovedi%, %ip%, CURRENT_TIMESTAMP);
    

    Parametry %cislo_odpovedi% a %ip% jsou dodány skriptem, který vložení provede.

    Další akcí, která je neméně důležitá, je zcela určitě získání počtu hlasů u jednotlivých odpovědí – neboť k čemu by nám byla ankety, když bychom neměli její výsledky, případně je nemohli prezentovat. Patrně každého napadne, že někteří "chytří" uživatelé budou chtít kliknout vícekrát a zmanipulovat tím výsledek. Většinou se toto řeší různými cookies a blokováním hlasování nebo omezením hlasování z jedné IP na daný časový interval. Toto však vyžaduje spolupráci webové stránky a my se snažíme maximálně vystačit s prostředky serveru. Proto sice dovolíme víceré vložení záznamu do databáze, ale při výsledném sčítání tyto duplicitní hlasy budeme ignorovat.

    My blokaci postavíme na principu IP a času (vida, jak se nám nyní tyto údaje hodí). Omezíme tedy hlasování na maximálně jeden hlas z jedné IP za jeden den. Nepochybně je toto možné omezit i na jiný časový interval, záleží jen na vás. Pro sečtení hlasů využijeme uložených procedur, které nám nabízí vysokou flexibilitu při získávaní výsledků z databáze.

    SET TERM ^ ;
    
    CREATE PROCEDURE ANKETA_HLASY_PRO_ODPOVED_MULTI (
        ID_ODPOVED INTEGER)
    RETURNS (
        SOUCET INTEGER)
    AS
    DECLARE VARIABLE POCET INTEGER;
    DECLARE VARIABLE DATUM DATE;
    BEGIN
      SOUCET = 0;
    
      /* pekne po castech */
      FOR SELECT DISTINCT CAST(cas AS DATE) FROM anketa_hlasovani
        WHERE id_odpoved=:ID_ODPOVED
        INTO :DATUM
      DO
      BEGIN
        POCET = 0;
    
        /* spocitame kolik je hlasu */
        SELECT COUNT(DISTINCT ip) FROM anketa_hlasovani
          WHERE id_odpoved=:ID_ODPOVED 
          AND CAST(cas AS DATE)=:DATUM
          INTO :POCET;
        SOUCET = SOUCET + POCET;
      END
      SUSPEND;
    END
    
    ^
    
    SET TERM ; ^
    

    Procedura nejprve vybere všechna (neopakující se) data (po dnech) pro danou odpověď a pro každé toto datum vypočítá počet unikátních odpovědí. Tyto jednotlivé počty jsou vždy přičítány k výsledku, který je nakonec navrácen.

    Jak jste si jistě všimli, procedura umožňuje ve své podstatě hlasovat vícekrát pro různé odpovědi (a počítat je samozřejmě) – jedná se tedy o anketu, kde můžete vybrat i více odpovědí. Zajisté také někoho napadlo, proč toto řešíme tak složitě, když můžeme využít jiných postupů přímo na databázi. Více o rozhodnutí pro použití uložených procedur si povíme příště a ukážeme si také, jak modifikovat naši blokaci pouze pro jedinou možnou odpověď od uživatele.

    Případné dotazy můžete napsat pod článek do diskuze nebo do našeho diskuzního fóra.

    Související články:
    Jak na ankety ve Firebirdu potřetí (19.12.2005)
    Jak na ankety ve Firebirdu poprvé (22.10.2005)

    ( Celý článek! | Autor: Jiří Činčura | Počet komentářů: 5 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

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

    Nic 
     (1128 hl.)
    Do 1 000,- Kč 
     (821 hl.)
    Do 10 000,- Kč 
     (786 hl.)
    Do 25 000,- Kč 
     (1048 hl.)
    Do 50 000,- Kč 
     (809 hl.)
    Do 75 000,- Kč 
     (943 hl.)
    Více než 75 000,- Kč 
     (788 hl.)

    Celkem hlasovalo: 6323


    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ář
    <<  Duben  >>
    PoÚtStČtSoNe
         12
    3456789
    10111213141516
    17181920212223
    24252627282930

    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