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.

Diskuze (4) Další článek: Ke stažení: freeware pro práci s PDF

Témata článku: Software, Programování, Kniha, Emailová adresa, Zobrazená data, Success, Díl, Elsa, Přímý zápis, Textové pole, Echo, Pole, Textový řetězec, Split


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

Za hranicemi Chromu: 13 nejzajímavějších prohlížečů, které „nikdo“ nepoužívá

Za hranicemi Chromu: 13 nejzajímavějších prohlížečů, které „nikdo“ nepoužívá

** Šesti nejpoužívanějším prohlížečům patří 94 % trhu ** Různé „klony“ Chromu slibují lepší funkce nebo jiný design ** Také Firefox má řadu zajímavých odnoží

Lukáš Václavík | 38

Deset kotev, které i v roce 2020 táhnou Android ke dnu

Deset kotev, které i v roce 2020 táhnou Android ke dnu

** Android existuje skoro 12 let a za tu dobu v mnoha směrech dospěl ** Dnes běží na sedmi z deseti telefonů, ale čemu za to vděčí? ** Našli jsme 10 kotev, které táhnou tento operační systém ke dnu

Karel Kilián | 165

Podívejte se na Windows z roku 1990. Před 30 lety přišly Windows 3.0 a líbily se nám

Podívejte se na Windows z roku 1990. Před 30 lety přišly Windows 3.0 a líbily se nám

** 22. května 1990 uvedl Microsoft Windows 3.0 ** Systém z Microsoftu definitivně udělal lídra na desktopu ** Tehdejší Windows byly vlastně grafickou nadstavbou nad MS-DOS

Jakub Čížek | 76

Apple má šanci definitivně se uzamknout. macOS byl na jeho poměry až příliš otevřený

Apple má šanci definitivně se uzamknout. macOS byl na jeho poměry až příliš otevřený

** Apple, vývojáře i uživatele rozhodně nečekají dva roky prázdnin ** macOS se může uzavřít podobně jako iOS a iPadOS ** Přechod na Arm znamená stopku pro hackintoshe

Lukáš Václavík | 102

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

Na měsíc jsem opustil Google a potupně se zase vrátil zpět (komentář)

** Zkusil jsem se zbavit závislosti na vyhledávači od Googlu ** Jako alternativy posloužily Bing, Seznam a DuckDuckGo ** Mají své silné stránky, ale i nepřekonatelná negativa

Lukáš Václavík | 54


Aktuální číslo časopisu Computer

Megatest SSD s kapacitou 1 TB

Srovnávací test robotických vysavačů

Vybíráme nejlepší telefony na trhu

Jak zlepšit zvuk televize