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í, Success, Přímý zápis, Echo, Textový řetězec, Pole, Textové pole, Zobrazená data, Elsa, Kniha, Díl, Split

Určitě si přečtěte

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

17.  11.  2017 | Vojtěch Malý | 163

30 počítačových brzd, které vám zpomalí Windows

30 počítačových brzd, které vám zpomalí Windows

Na webu najdete hromadu rad, jak zrychlit počítač a Windows. My jsme na to šli opačně a naopak jsme hledali činnosti, které ho nejvíce zpomalují. Toto je třicítka těch základních.

12.  11.  2017 | Jakub Čížek | 90

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

** I pod hranicí desíti tisíc korun existují dobře použitelné notebooky ** Mohou plnit roli pracovního stroje i zařízení pro zábavu ** Nejlevnější použitelný notebook koupíte za pět a půl tisíce

16.  11.  2017 | Stanislav Janů | 52

Do 20 let nebude nikdo vlastnit auta, říká zkušený šéf několika automobilek

Do 20 let nebude nikdo vlastnit auta, říká zkušený šéf několika automobilek

** Bývalý šéf a expert z několika velkých automobilek se vyjádřil k budoucnosti tohoto průmyslu ** Do 20 let „nikdo“ nebude vlastnit auta ** Veškerá doprava bude řešená pomocí velkých logistických platforem

15.  11.  2017 | Karel Javůrek | 74


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje