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

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

stßhnout - jen MX [76 kB]
|