Flash Help
Flash
ActionScript
P°φklady





Webmaster

      Martin Hozφk
      hozikm@seznam.cz
      ICQ: 323756613


W3C Validita

      HTML 4.0 validnφ




Flash GuestBook

Poslednφ dobou jsem zaplaven dotazy, jak vytvo°it knihu nßvÜt∞v ve Flashi. Dnes si jednu takovou jednoduchou vytvo°φme. Jak jsem ji₧ zmi≥oval v kapitole "FAQ", Flash samotn² z bezpeΦnostnφch d∙vodu nem∙₧e zapisovat do soubor∙ (podobn∞ jako JavaScript).

Zßpis dat tedy budeme muset sv∞°it n∞jakΘmu serverovΘmu (pracuje na serveru) skriptu. Jß pou₧φvßm PHP, ale pou₧φt m∙₧ete i ASP a dalÜφ.


Hlavnφ princip FlashovΘ knihy nßvÜt∞v je v poΦßteΦnφm naΦtenφ dat ze souboru a nßslednΘ poslßnφ zm∞n PHP skriptu, kter² je zapφÜe zp∞t do souboru.

Funkce, kterou pou₧ijeme je:

loadVariables("zdroj", "cφlov² MC", [odesφlßnφ prom∞nn²ch] );

Funkce load variables naΦte ze souboru prom∞nnΘ a odeÜle je do cφlovΘho MovieClipu (pokud nechßme nßzev prßzdn², tak na hlavnφ Φasovou osu).

Zßrove≥ ale tato funkce umo₧≥uje, krom∞ naΦφtßnφ prom∞nn²ch, prom∞nnΘ i posφlat.

Pokud definujete do t°etφ polo₧ky POST nebo GET, budou se prom∞nnΘ i odesφlat (nastaven²m zp∙sobem)


Pokud v roletovΘm menu "Location" vyberete mφsto "Target" polo₧ku "Level", zm∞nφ se syntaxe takto:

loadVariablesNum("zdroj". "·rove≥ naΦtenΘ animace",  [odesφlßnφ prom∞nn²ch] );

Tento zp∙sob mß smysl jen tehdy, pokud je naΦteno vφce animacφ pomocφ p°φkazu loadMovie().



Tak₧e te∩ k samotnΘmu nßvodu:

  • nejprve si vytvo°φme formulß°ovΘ prvky (Input texty) podle pot°eby. Asi nejΦast∞jÜφ jsou "JmΘno", "Email", "Web" a "Vzkaz".

    T∞mto polφm p°i°adφme n∞jakΘ prom∞nnΘ. Jß mßm "name", "email", "web" a "message"

  • KlφΦov² snφmek, s t∞mito formulß°i zv∞tÜφme na velikost 2 snφmk∙

  • Dßle vytvo°φme prßzdn² MovieClip, vlo₧φme na scΘnu a pojmenujeme "check"

  • Vytvo°φme novou vrstvu a do prvnφho snφmku definujeme nßsledujφcφ p°φkazy:

    stop();
    system.useCodepage = true;
    
    name = "";
    email = "@";
    web = "http://";
    message = "";
    
    loadVariables("book.txt", "check");
    

    Nejprve zastavφme p°ehrßvßnφ animace (vysv∞tlφm pozd∞ji). Dßle musφme zakßzat k≤dovßnφ Unicode UTF-8. D∞lß to toti₧ znaΦnΘ problΘmy s Φeskou diakritikou (nevφm proΦ).
    Dßle jsou deklarovßny d°φve zmφn∞nΘ prom∞nnΘ.

    Nakonec zde mßme p°φkaz naΦφtajφcφ prom∞nnΘ ze souboru book.txt do MovieClipu check. Tento MovieClip zde nenφ pro legraci. Bude slou₧it ke kontrole, zda ji₧ bylo stahovßnφ dat ze souboru dokonΦeno Φi nikoliv. Tomuto MovieClipu definujeme nßsledujφcφ p°φkazy:

    onClipEvent (data) {
         _root.Play();
    }
    

    PovÜimn∞te si udßlosti. Udßlost "Data" nastane po ·sp∞ÜnΘm odeslßnφ prom∞nn²ch do MovieClipu (viz °φzenφ animace). Tφm mßme zaruΦeno, ₧e animace bude pokraΦovat a₧ tehdy, kdy₧ bude cel² obsah souboru naΦten.

  • Vytvo°φme novou vrstvu a do druhΘho kl. snφmku vlo₧φme Dynamic Text typu Multiline, kter² bude zobrazovat naΦtenou prom∞nnou ze souboru (check.book) a povolφme mu zobrazovßnφ HTML tag∙.

  • K formulß°ov²m prvk∙m umφstφme tlaΦφtko, kterΘmu definujeme tyto akce:

    on (release) {
    
    datum = new Date();
    
    if (name != "" && message != "") {
    
          name = "<p><b><font size=\"11px\" color=\"#D34A33\">"+name+"</font>
          zanechal(a) vzkaz "+datum.getDate()+"."+datum.getMonth()+" v "
          +datum.getHours()+":"+datum.getMinutes()+"</b></p>";
    
          message = "<p>"+message+"</p><p> </p><p> </p>";
    
          if (email != "@" && email != "") {
                    email = "<p><u><a href=\"mailto:"+email+"\">"
                    +email+"</a></u></p>";
          } else {
                    email = "";
          }
    
          if (web != "" && web != "http://") {
                    web = "<p><u><a href=\""+web+"\">"+web
                    +"</a></u></p><p> </p>";
          } else {
                    web = "";
          }
    
    

    Po stisku tlaΦφtka se nejprve vytvo°φ objekt Date(), kter² bude slou₧it k p°idßnφ ΦasovΘho ·daje do knihy. Dßle nßsleduje podmφnka, kterß kontroluje vypln∞nφ povinn²ch polo₧ek (jmΘno a vzkaz)

    Nßsledujφcφ p°φkazy p°idßvajφ HTML tagy k hodnotßm prom∞nn²ch name a message. Jen dodßm, ₧e je nutnΘ napsat p°ed ka₧dΘ uvozovky zp∞tnΘ lomφtko \ (aby nebyly chßpßny jako ActionScript operßtor)

    Dßle jsou upraveny na odkazy prom∞nnΘ email a web - pouze vÜak v p°φpad∞, ₧e byly vypln∞ny.

    Dßle:

    check.book = name+email+web+message+check.book;
    pridat = check.book;
    pridat = escape(pridat);
    loadVariables("book.php", "", "POST");
    name = "";
    email = "@";
    web = "http://";
    message = "";
    
    }
    }
    

    K prom∞nnΘ check.book je p°idßn nov² vzkaz a obsah knihy je zkopφrovßn po prom∞nnΘ pridat.

    Hodnota tΘto prom∞nnΘ je potΘ zak≤dovßna do formßtu URL-encoded (viz P°eddefinovanΘ funkce). Tφm se zajistφ aby nedoÜlo k chybnΘ interpretaci n∞kter²ch nestandardnφch znak∙ (nap°. uvozovek).
    (Dek≤dovßnφ po naΦtenφ provede Flash automaticky)

    Pak se odeÜlou prom∞nnΘ do skriptu book.php pomocφ HTTP kanßlu POST.

    Dal by se pou₧φt i p°φkaz getURL, ale to by prohlφ₧eΦ otevφral cφlovou strßnku, co₧ v tomto p°φpad∞ nenφ ₧ßdoucφ. P°i pou₧itφ loadVariables se odeÜlou jen prom∞nnΘ.
    Nakonec se vyma₧ou formulß°e.

  • Poslednφ, co musφme ud∞lat je p°idat do druhΘho snφmku p°φkaz:

    stop();
  • PHP strßnka book.php pak bude obsahovat nßsledujφcφ PHP skript:

    <?
    
    if ($pridat != "") {
        $fp = fopen("book.txt", "w");     fwrite($fp, "book=$pridat");     fclose($fp); } ?>

    Pokud nenφ prom∞nnß pridat prßzdnß, otev°φt soubor book.txt pro zßpis a zapsat do n∞j °et∞zec "book=[hodnota prom∞nnΘ pridat]"

    Prom∞nnΘ v souboru musφ b²t zapsßny jako p°i posφlßnφ metodou GET, tedy ve formßtu URL-encoded:

    promenna1=texttexttext&promenna2=texttexttext   à
    
    Jen podotknu, ₧e animace m∙₧e b²t klidn∞ p°φmo na strßnce book.php (jß ji tak mßm).
     
  • Pozn.:

    Ne₧ budete pou₧φvat tuto knihu na sv²ch strßnkßch, doporuΦuji zm∞nit nßzev prom∞nnΘ "pridat". Pokud by toti₧ n∞kdo znal nßzev prom∞nnΘ, mohl by lehce p°epsat cel² obsah knihy jednoduch²m odkazem book.php?pridat=fuckyou.
    Tuto chybu jsem samoz°ejm∞ ud∞lal a jedna chytrß hlava jφ vyu₧ila.
    BTW: u₧ to nemusφte zkouÜet - opravil jsem to...



Internet Explorer ProblΘm

IE ve svΘ nekoneΦnΘ moudrosti ponechßvß v cache otev°enΘ strßnky a proto nenφ mo₧nΘ po editaci souboru "book.txt" znovu naΦφtat jeho hodnotu pomocφ loadVariables - zm∞ny by se neprojevily

Dokonce i po obnovenφ [F5] si Flash natßhne hodnotu souboru z cache - proto taky je vzkaz p°idßn jak k prom∞nnΘ p°idat (ta se bude zapisovat), tak i do prom∞nnΘ check.book (kterß je zobrazovßna) a naΦφtßnφ tak nenφ nutnΘ.

Pokud zav°ete okno prohlφ₧eΦe, a otev°ete jej znovu, budou se ji₧ data natahovat ze serveru v po°ßdku.



ProhlΘdnout
prohlΘdnout


Stßhnout
stßhnout - jen MX [76 kB]






Nahoru

Copyright ⌐ Martin Hozφk - All rights reserved.
Flash are registered trademark of Macromedia Inc.