Umíme ve Flashi – 17. díl – návštěvní kniha III.

V dnešním díle dokončíme naší jednoduchou návštěvní knihu. Převedeme zpracování dat na stranu swf souboru, zápisům přidáme časový údaj a s využitím užitečné Tooltip komponenty umožníme zobrazení IP adresy odesílatele zprávy.

Závěrečná vylepšení

Vzhledem k jednoduchosti této návštěvní knihy se nebudeme pouštět do rozsáhlých inovací, ty si necháme na později, až se budeme věnovat základům spolupráce s MySQL databází. Mezi nejvýznamnější změny naší knihy bude patřit přenesení zpracování zpráv do swf souboru a zobrazení Tooltip nápovědy, která ukáže IP adresu odesílatele. Vzhledem k tomu, že pro nápovědu využijeme Tooltip komponentu, musíme si jí nejdříve nainstalovat. Její soubor si lze stáhnout zde.

Dvojklikem na rozbalený soubor se spustí Macromedia Extension Manager, pomocí kterého se provede instalace komponenty. Po úspěšné instalaci se můžeme podívat na samotnou úpravu souborů návštěvní knihy.

Úprava PHP kódu

Dosud jsme výpis v HTML formátu prováděli PHP skriptem, ovšem výhodnější je soustředit zpracování a formátování zpráv na jedno místo. Dále nám přibudou další dva údaje, které budeme zapisovat do jedné zprávy, jedná se o čas odeslání zprávy a IP adresu (název) počítače, odkud uživatel zprávu posílá. Upravený PHP soubor vypadá takto:

<?php
// zde prebereme promenné zaslané flashovým souborem
$Odeslano  = $HTTP_POST_VARS["Odeslano"];
$Jmeno   = $HTTP_POST_VARS["jmeno"];
$Email   = $HTTP_POST_VARS["mail"];
$Web   = $HTTP_POST_VARS["url"];
$Vzkazy  = $HTTP_POST_VARS["vzkaz"];
$Cas   = $HTTP_POST_VARS["dat"];
// odstranení lomítek z textu
$Odeslano = stripslashes($Odeslano);
$Jmeno   = stripslashes($Jmeno);
$Email   = stripslashes($Email);
$Web   = stripslashes($Web);
$Vzkazy  = stripslashes($Vzkazy);
$Cas   = stripslashes($Cas);

// soubor vzkazu
$NazevSouboru  = "gb.txt";
//pokud jsme poslali hodnotu promenné Odeslano="ano" budeme zapisovat
if ($Odeslano == "ano") {
 // otevreme soubor pr ctení a uložíme jeho obsah do promenné PuvodniVzkazy
 $fp  = fopen( $NazevSouboru,"r");
 $PuvodniVzkazy  = fread($fp, 80000);
 fclose( $fp );
 // naformátujeme nový vzkaz
 $ipName = gethostbyaddr($REMOTE_ADDR);
 $NovyVzkaz = "$Jmeno||$Email||$Web||$Vzkazy||$ipName||$Cas:::";
 // do promenné New spojíme púvodní vzkazy s novým
        $NoveVzkazy = "$NovyVzkaz$PuvodniVzkazy";
 // soubor prepíšeme novými vzkazy
 $fp = fopen( $NazevSouboru,"w");
 if(!$fp) die("&texts=nelze zapisovat do souboru: $NazevSouboru &");
 fwrite($fp, $NoveVzkazy, 800000);
 fclose( $fp );
}
// zde opet otevreme soubor se vzkazy
$fp  = fopen( $NazevSouboru,"r");
$Data  = fread($fp, 800000);
fclose( $fp );
// vzkazy z promenné Data vložíme do pole DataArray podle oddelovace ":::"
$PoleVzkazu = split (":::", $Data);
$pocetVzkazu = count($PoleVzkazu) - 1;

for ($n = 0; $n < $pocetVzkazu; $n++) {
echo "&text$n=";
 echo $PoleVzkazu[$n];
 echo "&";
  if (!$PoleVzkazu[$n]) {
echo "&";
   exit;
  }
 }

?>

Všimneme si nové proměnné „Cas“, která převezme časový údaj ze swf souboru a druhé proměnné „ipName“, do které vložíme název IP adresy stanice, ze které se zpráva odesílá. Je nutné si uvědomit, že v případě sdílených IP adres není tento údaj přímou adresou připojeného počítače.

Poslední změna v PHP souboru, která stojí za povšimnutí, se týká proměnné „NovyVzkaz“. V předchozím díle jsme v ní prováděli formátování zprávy, to jsme nyní vypustili a místo toho jsme použili symbol „||“ jako oddělovače, pomocí kterého ve flashi zpracujeme příslušnou zprávu. V jedné zprávě se tak vyskytnou položky, oddělené uvedeným znakem. Zprávu (proměnnou), načteme do flashe a pomocí metody „split()“ rozdělíme řetězec do pole, přesně podle symbolů „||”.

Pokud máme PHP soubor upraven, uložíme si jej pod názvem gb.PHP v UTF-8 kódování a můžeme se podívat na samotnou flashovou stránku návštěvní knihy.

Úprava návštěvní knihy

Otevřeme si zdrojový soubor z minulého dílu a zobrazíme si panel akcí prvního snímku. Nejdříve přidáme do funkce kontroly správnosti textových polí příkaz, který obarví špatně vyplněná pole červeně. Jedná se o změnu vlastnosti „borderColor“ příslušného textového pole. Opravená funkce bude vypadat následovně:

chckFields = function () {
 errText = "";
 if (form.jmeno.text.length<1) {
  errText += "Nebylo vyplěno jméno; ";
  form.jmeno.borderColor = 0xFF0000;
 }
 if (form.mail.text.length<1 || form.mail.text.indexOf("@") == -1) {
  form.mail.borderColor = 0xFF0000;
  errText += "Nesprávná emailová adresa; ";
 }
 if (form.urls.text.length<1) {
  form.urls.borderColor = 0xFF0000;
  errText += "Není zadaná www adresa; ";
 }
 if (errText.length>1) {
  textAlert = "Formulář nebyl správně vyplněn, prosím opravte tyto chyby:"+newline+errText;
  Alert.show(textAlert, "Vyskytly se chyby v odesílané zprávě", Alert.OK);
  return false;
 } else {
  return true;
 }
};

Další funkce „loadVzkazy“ přijde o přímý zápis textu do komponenty textového pole a nahradíme jej funkcí „parseText“, pomocí které zformátujeme získaný textový řetězec z PHP skriptu. Navíc doplníme odesílané proměnné o časový údaj, který si zjistíme novou funkcí „getDatum“. Upravená funkce „loadVzkazy“ bude vypadat takto:

loadVzkazy = function () {
 txts = new Object();
 var vzkazy:LoadVars = new LoadVars();
 vzkazy.onLoad = function(success:Boolean) {
  if (success) {
   txts = vzkazy;
   if (firstStart != false) {
    parseText();
   } else {
    form.gotoAndStop(2);
    parseText();
   }
   firstStart = false;
  } else {
   texty.text = "Chyba aplikace";
  }
 };
 var vzkaz:LoadVars = new LoadVars();
 vzkaz.jmeno = form.jmeno.text;
 vzkaz.vzkaz = form.vzkaz.text;
 vzkaz.mail = form.mail.text;
 vzkaz.url = form.urls.text;
 vzkaz.dat = getDatum();
 if (firstStart != false) {
  vzkaz.Odeslano = "ne";
 } else {
  vzkaz.Odeslano = "ano";
 }
 vzkaz.sendAndLoad("gb.php", vzkazy, "POST");
};

Část kódu, kde přiřazujeme funkci „loadVzkazy“ tlačítku pro odesílání, zůstává nezměněná. Připíšeme novou funkci „parseText“:

parseText = function () {
 texty.text = "";
 i = 0;
 while (eval("txts.text"+i) != undefined) {
  zapis = eval("txts.text"+i).split("||");
  newText = "";
  newText += "<i>"+zapis[5]+"</i><br>";
  newText += "<b><a href=\"asfunction:showTTP,"+zapis[4]+"\">Jméno odesílatele: </a></b>"+zapis[0]+"<br>";
  newText += "<b>Email odesílatele: </b><a href=\"
"+zapis[1]+"mailto:"+zapis[1]+"\">"+zapis[1]+"</a><br>";
  newText += "<b>Web odesílatele: </b><a href=\""+zapis[2]+"\">"+zapis[2]+"</a><br>";
  newText += "<b>Vzkaz: </b>"+zapis[3]+"<br><br><br>";
  
  i++;
 }
 texty.text +="<i>V knize je celkem:"+i+" zpráv</i><br><br>" + newText;
};

V této funkci převezmeme hodnotu, kterou jsme získali z PHP stránky a rozdělíme jí podle symbolu „||“ do pole „zapis“. Protože víme, kde se která část skrývá, můžeme rovnou formátovat text pro zápis do komponenty textového pole. U formátování jména si ale povšimneme zajímavého odkazu, který sem umístíme. Pokud totiž do HTML formátovatelného textového pole umístíme odkaz „asfunction:“, pomocí něj lze vyvolat jakoukoliv funkci, kterou si připravíme.

My možnosti využijeme pro zobrazení textu s IP adresou. Po kliknutí na tento odkaz se objeví název IP adresy, který jsme si do textu zprávy uložili.

Funkce, kterou voláme, se nazývá showTTP a předáváme jí proměnnou z pole „zapis[4]“, kde je uložená již zmíněná IP adresa. Funkci ale nemáme připravenou, ale než se pustíme do její konstrukce, přetáhneme z knihovny komponent nově nainstalovanou Tooltip komponentu a pojmenujeme její instanci „ttp“.

Posledním krokem bude vytvoření funkce pro zobrazení Tooltip nápovědy a funkce, která bude generovat aktuální datum:

texty.showTTP = function(msg) {
 ttp.tooltipText = msg;
 ttp.tooltipShow = true;
};
getDatum = function () {
 datum = "";
 date = new Date();
 den = date.getDay();
 if (den == 0) {
  datum += "Neděle";
 } else if (den == 1) {
  datum += "Pondělí";
 } else if (den == 2) {
  datum += "Úterý";
 } else if (den == 3) {
  datum += "Středa";
 } else if (den == 4) {
  datum += "Čtvrtek";
 } else if (den == 5) {
  datum += "Pátek";
 } else if (den == 6) {
  datum += "Sobota";
 }
 datum += "; "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
 return datum;
};

Nesmíme zapomenout, že „asfunction:“ se odkazuje na funkci, která musí být v našem případě na komponentě textového pole, proto funkci pro zobrazení Tooltip nápovědy umístíme na objekt komponenty textového pole.

U funkce generující datum se pozastavíme pouze nad získáváním aktuálního dne v týdnu. Zde se metodou „getDay()“ získá číslo dne v týdnu, přičemž se začíná v neděli s hodnotou 1.

Po změně kódu prvního snímku swf soubor exportujeme a společně s PHP(gb.PHP) a txt(gb.txt) souborem jej nahrajeme na www server. Výsledná návštěvní kniha bude vypadat takto.

Zdrojové soubory dnešní ukázky jsou k dispozici zde.

Témata článku: Software, Programování, Pole, Echo, Split, Email, Success

4 komentáře

Nejnovější komentáře

  • Jirka.p 6. 4. 2008 17:34:58
    Prosim dokazali by jsete poradit jak upravit zobrazeni času. Aby se...
  • OBr 3. 2. 2006 19:19:32
    není za co se omlouvat, je to jednoduchá kniha a abych pravdu řekl, čekal...
  • Vrrtulnik 3. 2. 2006 19:07:58
    Zkousel jsem tu vasi knihu a jako jmeno jsem poslal text :::a coz...
Určitě si přečtěte

Monitory do 10 tisíc: poradíme, jaké jsou teď nejlepší

Monitory do 10 tisíc: poradíme, jaké jsou teď nejlepší

** Dobrý monitor s kvalitním panelem lze pořídit pod tři tisíce korun ** Pod deset tisíc si můžete koupit pracovní 27" monitor nebo nejlevnější použitelné 4K ** Vybrali jsme také ideální model pro vícemonitorovou konfiguraci

27.  11.  2016 | Stanislav Janů | 13

Sbíječky vyměnili za klávesnice. Nový projekt má za cíl přeučit horníky na programátory

Sbíječky vyměnili za klávesnice. Nový projekt má za cíl přeučit horníky na programátory

** Programátorů je málo a horníků bez práce po uzavření dolu Paskov bude moc ** Problém řeší unikátní projekt ** Pilotní kurz dává naději, že by z horníků mohli být použitelní kodéři

28.  11.  2016 | David Polesný | 76