home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 June / Chip_2004-06_cd1.bin / chplus / interval / clanek07.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-05-01  |  20.4 KB  |  352 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='0' />
  10. <meta name='robots' content='index, follow' />
  11. <meta name='googlebot' content='index, follow, noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta http-equiv='imagetoolbar' content='no' />
  15. <meta http-equiv='MSThemeCompatible' content='no' />
  16. <meta name='MSSmartTagsPreventParsing' content='true' />
  17. <meta name='ICBM' content='49.1915, 16.626' />
  18. <meta name='DC.Title' content='Interval.cz' />
  19. <meta name='DC.Identifier' content='http://interval.cz' />
  20. <meta name='DC.Language' content='cs' />
  21. <link rel='alternate' type='text/xml' title='RSS' href='http://interval.cz/__rss/rss.asp' />
  22. <link rel='shortcut icon' href='favicon.ico' />
  23. <link rel='first' href='http://interval.cz/clanek.asp?article=2561' />
  24. <link rel='prev' href='http://interval.cz/clanek.asp?article=2848' />
  25. <link rel='up' href='http://interval.cz/serial.asp?serial=27' />
  26. <link rel='home' href='http://interval.cz' />
  27. <link rel='search' href='http://interval.cz/search_ex.asp' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  30. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  31. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  32. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  33. <title>Interval.cz - denn∞ o tvorb∞ webu a e-komerci</title>
  34. </head>
  35. <body class='interval interval-articles'>
  36. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  37. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  38. <div id='page-body'><div id='page-left'><div id='article'>
  39.  
  40.  
  41.  
  42. <h2>PHP pro pokroΦilΘ - znovu t°φdy a objekty</h2>
  43. <p id='prepend'>V tomto Φlßnku o t°φdßch a objektech si ukß₧eme dalÜφ zajφmavΘ mo₧nosti p°i prßci s OOP v PHP. Budeme se zab²vat vyu₧itφm takzvanΘ serializace a magick²ch funkcφ __sleep() a __wakeup() - vytvo°φme instanci t°φdy, ulo₧φme ji do souboru a nakonec cel² objekt p°edßme v session.</p>
  44.  
  45.  
  46. <h3>Serializace a unserializace</h3>
  47. <p>VÜe zajiÜ¥ujφ funkce <code>serialize()</code> a <code>unserialize()</code>, kterΘ p°evedou do takzvanΘho byte °et∞zce prom∞nnΘ objektu. Proces tohoto "p°evodu" se naz²vß serializace a opaΦn² postup unserializace. Na vstupu funkce <code>serialize()</code> je objekt a na v²stupu ji₧ zmi≥ovan² byte °et∞zec, u funkce <code>unserialize()</code> je tomu naopak.</p>
  48. <p>Pro dalÜφ experimentovßnφ si nadefinujeme pokusnou t°φdu do souboru "trida.php" se kterou budeme dßle pracovat:</p>
  49.  
  50. <div class='sample'>
  51. <?
  52. <br /><span class='comment'>/*
  53. <br />Soubor trida.php ve kterΘm je definice pokusnΘ t°φdy
  54. <br />*/</span>
  55. <br />class clsTrida {
  56. <br /> <span class='comment'>//pomocφ konstruktoru nastavφme hodnoty vlastnostφ</span>
  57. <br /> function clsTrida($vl1, $vl2) {
  58. <br />  $this->vlastnost1=$vl1;
  59. <br />  $this->vlastnost1=$vl2;
  60. <br /> }
  61. <br /> <span class='comment'>//funkce vypis() vypφÜe hodnoty obou vlastnostφ</span>
  62. <br /> function vypis() {
  63. <br />  echo "1. vlastnost: ".$this->vlastnost1."<br />";
  64. <br />  echo "2. vlastnost: ".$this->vlastnost2."<br />";
  65. <br />  }
  66. <br />}
  67. <br />?>
  68. </div>
  69.  
  70. <p>Nejprve si ukß₧eme postup ulo₧enφ objektu do souboru:</p>
  71.  
  72. <div class='sample'>
  73. <?
  74. <br /><span class='comment'>/*
  75. <br />Soubor "a.php"
  76. <br />V prvnφm souboru nßÜ objekt zeserializujeme a ulo₧φme ho do souboru "data"
  77. <br />*/</span>
  78. <br /><span class='comment'>//naincludujeme soubor s pokusnou t°φdou</span>
  79. <br />include ('trida.php');
  80. <br /><span class='comment'>//vytvo°φme instanci pokusnΘ t°φdy a nastavφme vlastnostφ, kterΘ se zeserializujφ</span>
  81. <br />$objekt = new clsTrida ("Vlastnost 1", "Vlastnost 2");
  82. <br /><span class='comment'>//zde vytvo°φme byte °et∞zec</span>
  83. <br />$bytestring=serialize($objekt);
  84. <br /><span class='comment'>//otev°eme soubor a byte °et∞zec do n∞j ulo₧φme</span>
  85. <br />$f = fopen("data", "w"); <span class='comment'>//vytvo°enφ a otev°enφ souboru pro zßpis</span>
  86. <br />fputs($f, $bytestring); <span class='comment'>//ulo₧enφ bytestringu do souboru</span>
  87. <br />fclose($f); <span class='comment'>//zav°enφ souboru</span>
  88. <br />?>
  89. </div>
  90.  
  91. <p>V souboru s unserializacφ se ji₧ nevytvß°φ ₧ßdnß instance, proto₧e unserializovan² objekt je schopen sßm poznat svoji t°φdu. Ta ale ve skriptu definovßna b²t musφ.</p>
  92.  
  93. <div class='sample'>
  94. <?
  95. <br /><span class='comment'>/*
  96. <br />Soubor "b.php"
  97. <br />V druhΘm souboru otev°eme soubor "data", kde je serializovan² objekt a unserializujeme ho
  98. <br />*/</span>
  99. <br /><span class='comment'>//naincludujeme soubor s pokusnou t°φdou</span>
  100. <br />include ("trida.php");
  101. <br /><span class='comment'>//otev°enφ souboru a p°eΦtenφ jeho obsahu</span>
  102. <br />$bytestring = implode("", @file("data"));
  103. <br />$UnserializovanyObjekt=unserialize($bytestring);
  104. <br /><span class='comment'>//nechßme si vlastnosti objektu vypsat, abyste vid∞li, ₧e ulo₧enφ do souboru "p°e₧ili"</span>
  105. <br />$UnserializovanyObjekt->Vypis();
  106. <br />?>
  107. </div>
  108.  
  109. <p>P°edßnφ objektu pomocφ session je v podstat∞ stejnΘ jako p°i uklßdßnφ do souboru, jen zde mφsto funkcφ pro ulo₧enφ souboru pou₧ijeme funkce pro p°edßvßnφ session:</p>
  110.  
  111. <div class='sample'>
  112. <?
  113. <br /><span class='comment'>/*
  114. <br />Soubor "sesstrida1.php"
  115. <br />*/</span>
  116. <br />session_start(); //nastartovani session
  117. <br /><span class='comment'>//naincludujeme soubor s pokusnou t°φdou</span>
  118. <br />include ("trida.php");
  119. <br /><span class='comment'>//vytvo°φme instanci pokusnΘ t°φdy</span>
  120. <br />$objekt = new clsTrida ("Vlastnost 1", "Vlastnost 2");
  121. <br /><span class='comment'>//zde vytvo°φme byte °et∞zec</span>
  122. <br />$bytestring=serialize($objekt);
  123. <br /><span class='comment'>//vytvo°enφ session</span>
  124. <br />$_SESSION["serializovanyobjekt"]=$bytestring;
  125. <br /><span class='comment'>//napφÜeme odkaz na dalÜφ strßnku</span>
  126. <br />echo '<a href="sesstrida2.php">DalÜφ strßnka</a>';
  127. <br />?>
  128. </div>
  129.  
  130. <div class='sample'>
  131. <?
  132. <br /><span class='comment'>/*
  133. <br />Soubor "sesstrida2.php"
  134. <br />*/</span>
  135. <br />session_start(); //nastartovani session
  136. <br /><span class='comment'>//naincludujeme soubor s pokusnou t°φdou</span>
  137. <br />include ("trida.php");
  138. <br /><span class='comment'>//zde unserializujeme byte °et∞zec</span>
  139. <br />$UnserializovanyObjekt=unserialize($_SESSION["serializovanyobjekt"]);
  140. <br /><span class='comment'>//op∞t si vypφÜeme hodnoty obou vlastnostφ</span>
  141. <br />$UnserializovanyObjekt->vypis();
  142. <br />?>
  143. </div>
  144.  
  145. <h3>MagickΘ  funkce __sleep() and __wakeup()</h3>
  146. <p>P°i (un)serializaci mohou b²t velmi u₧iteΦnΘ "magickΘ" funkce <code>__sleep()</code> a <code>__wakeup()</code>, kterΘ se umis¥ujφ do definice t°φdy. Funkce <code>__sleep()</code> se spustφ na zaΦßtku serializace. M∙₧eme do nφ vlo₧it k≤d nap°φklad pro ukonΦenφ spojenφ s databßzφ. D∙le₧itΘ je, aby funkce <code>__sleep()</code> vrßtila pole, kterΘ obsahuje prom∞nnΘ objektu, ze kter²ch se vytvo°φ byte °et∞zec. Naproti tomu funkce <code>__wakeup()</code> se spustφ na zaΦßtku unserializace. Lze ji vyu₧φt nap°φklad pro obnovenφ spojenφ s databßzφ.</p>
  147. <p>V nßsledujφcφm p°φkladu si vytvo°φme t°φdu, kterß si pamatuje datum svΘ serializace a p°i unserializaci tuto hodnotu vypφÜe. Byte °et∞zec v tomto p°φkladu budeme uklßdat do souboru. Funkce <code>get_object_vars()</code> byla popsßna <a href='http://interval.cz/clanek.asp?article=3183' title='Heller, Petr: PHP pro pokroΦilΘ - pracujeme s t°φdami a objekty'>v p°edchozφm Φlßnku</a>.</p>
  148.  
  149. <div class='sample'>
  150. <?
  151. <br /><span class='comment'>/*</span>
  152. <br /><span class='comment'>Soubor trida.php ve kterΘm je definice pokusnΘ t°φdy</span>
  153. <br /><span class='comment'>*/</span>
  154. <br />class clsTrida {
  155. <br />
  156. <br /> <span class='comment'>//funkce vypis() vypφÜe hodnoty obou vlastnostφ</span>
  157. <br /> function vypis() {
  158. <br />  echo "1. vlastnost: ".$this->vlastnost1."<br />";
  159. <br />  echo "2. vlastnost: ".$this->vlastnost2."<br />";
  160. <br /> }
  161. <br />
  162. <br /> function __sleep() {
  163. <br />
  164. <br />  <span class='comment'>//do vlastnosti "datum" ulo₧φme aktußlnφ datum = datum serializace</span>
  165. <br />  $this->datum=Date("Y-m-d");
  166. <br />
  167. <br />  <span class='comment'>//vytvo°φme pole vlastnostφ objektu. Jestli₧e n∞jakou vlastnost vynechßme, nebude serializovanß.</span>
  168. <br />  $vlastnosti = get_object_vars($this);
  169. <br />
  170. <br />  foreach ($vlastnosti as $klic => $hodnota) {
  171. <br />   $pole[] = $klic;
  172. <br />  }
  173. <br />
  174. <br />  <span class='comment'>//vrßcenφ pole vlastnostφ t°φdy</span>
  175. <br />  return $pole;
  176. <br /> }
  177. <br />
  178. <br /> function __wakeup() {
  179. <br />
  180. <br />  <span class='comment'>//jestli₧e jsme ulo₧ili datum, tak ho vypφÜeme</span>
  181. <br />  if (isset($this->datum)) {
  182. <br />    echo "Datum serializace: ".$this->datum."<br />";
  183. <br />  }
  184. <br /> }
  185. <br />
  186. <br />}
  187. <br />?>
  188. </div>
  189.  
  190. <p>V²Üe uveden² p°φklad je pouze jednoduchou ukßzkou magick²ch funkcφ a velkΘ praktickΘ vyu₧itφ asi nemß. V nßsledujφcφm p°φkladu si tedy vytvo°φme t°φdu, kterß vyu₧φvß databßzi. Funkce <code>__sleep()</code> v tomto p°φpad∞ spojenφ s nφ ukonΦφ a vrßtφ ·daje pot°ebnΘ k p°ihlßÜenφ do databßze, funkce <code>__wakeup()</code> spojenφ op∞tovn∞ navß₧e. V²hody tohoto postupu jsou z°ejmΘ.</p>
  191.  
  192. <div class='sample'>
  193. <?
  194. <br /><span class='comment'>/*</span>
  195. <br /><span class='comment'>Soubor trida.php ve kterΘm je definice pokusnΘ t°φdy</span>
  196. <br /><span class='comment'>*/</span>
  197. <br />class clsTrida {
  198. <br />
  199. <br /> <span class='comment'>//konstruktor t°φdy</span>
  200. <br /> function clsTrida($server,$uzivatel,$heslo,$databaze){
  201. <br />
  202. <br />  $this->datserver=$server;
  203. <br />  $this->datuzivatel=$uzivatel;
  204. <br />  $this->datheslo=$heslo;
  205. <br />  $this->datjmeno=$databaze;
  206. <br />
  207. <br />   $this->Pripojeni();
  208. <br /> }
  209. <br />
  210. <br /> <span class='comment'>//navß₧e spojeni s databßzφ</span>
  211. <br /> function Pripojeni() {
  212. <br />  MySQL_Connect($this->datserver,$this->datuzivatel,$this->datheslo);
  213. <br />  MySQL_Select_DB($this->datjmeno); //vybrßnφ databßze
  214. <br /> }
  215. <br />
  216. <br /> <span class='comment'>//funkce vypis() vypφÜe obsah tabulky; je zde samoz°ejm∞ pouze pro demonstraci prßce s databßzφ</span>
  217. <br /> function Vypis() {
  218. <br />  $dotaz=MySQL_Query("SELECT sloupec1, sloupec2 FROM tabulka") or Die(MySQL_Error());
  219. <br />  while ($data = MySQL_Fetch_Array($dotaz)){
  220. <br />   echo $data[sloupec1]." ".$data[sloupec2];
  221. <br />   echo "<br />";
  222. <br />  }
  223. <br /> }
  224. <br />
  225. <br /> <span class='comment'>//ukonΦφme spojenφ s databßzφ a vrßtφme p°ihlaÜovacφ ·daje</span>
  226. <br /> function __sleep() {
  227. <br />
  228. <br />  MySQL_Close();
  229. <br />
  230. <br />  <span class='comment'>//vytvo°φme pole vlastnostφ objektu</span>
  231. <br />  $vlastnosti = get_object_vars($this);
  232. <br />
  233. <br />  foreach ($vlastnosti as $klic => $hodnota) {
  234. <br />   $pole[] = $klic;
  235. <br />  }
  236. <br />
  237. <br />  <span class='comment'>//vrßcenφ pole vlastnostφ t°φdy</span>
  238. <br />  return $pole;
  239. <br /> }
  240. <br />
  241. <br /> <span class='comment'>//op∞t navß₧eme spojenφ s databßzφ</span>
  242. <br /> function __wakeup() {
  243. <br />  $this->Pripojeni();
  244. <br /> }
  245. <br />
  246. <br />}
  247. <br />?>
  248. </div>
  249.  
  250. <div class='sample'>
  251. <?
  252. <br /><span class='comment'>/*</span>
  253. <br /><span class='comment'>Soubor databaze1.php, kde dochßzφ k serializaci</span>
  254. <br /><span class='comment'>*/</span>
  255. <br />include("trida.php");
  256. <br />
  257. <br />$objekt = new clsTrida("Localhost", "MojeJmeno", "TajneHeslo", "PokusnaDAT");
  258. <br /><span class='comment'>//vypφÜeme obsah tabulky</span>
  259. <br />$objekt->vypis();
  260. <br />
  261. <br />$bytestring=serialize($objekt);
  262. <br /><span class='comment'>//otev°eme soubor a byte °et∞zec do n∞j ulo₧φme</span>
  263. <br />$f = fopen("data", "w"); //vytvo°enφ a otev°enφ souboru pro zßpis
  264. <br />fputs($f, $bytestring); //ulo₧enφ bytestringu do souboru
  265. <br />fclose($f); //zav°enφ souboru
  266. <br />?>
  267. </div>
  268.  
  269. <div class='sample'>
  270. <?
  271. <br /><span class='comment'>/*</span>
  272. <br /><span class='comment'>Soubor databaze2.php, kde dochßzφ k unserializaci</span>
  273. <br /><span class='comment'>*/</span>
  274. <br /><span class='comment'>//naincludujeme soubor s pokusnou t°φdou</span>
  275. <br />include ("trida.php");
  276. <br /><span class='comment'>//otev°enφ souboru a p°eΦtenφ jeho obsahu</span>
  277. <br />$bytestring = implode("", @file("data"));
  278. <br />$UnserializovanyObjekt=unserialize($bytestring);
  279. <br /><span class='comment'>//vypφÜeme obsah tabulky</span>
  280. <br />$UnserializovanyObjekt->Vypis();
  281. <br />?>
  282. </div>
  283.  
  284. <p>JeÜt∞ se musφm zmφnit o jednom bezpeΦnostnφm nedostatku zmφn∞nΘho p°φkladu. Pokud p°edßvßte byte °et∞zec v session, data jsou zde v nezaÜifrovanΘ form∞, tak₧e je m∙₧e p°φpadn² ·toΦnφk velmi jednoduÜe odchytit a pokud znß strukturu byte °et∞zce (kterß nenφ nijak slo₧itß, zkuste si otev°φt soubor, do kterΘho uklßdßte byte °et∞zec, v libovolnΘm textovΘm editoru), nebude problΘm si je p°eΦφst a dostat se tak do naÜφ databßze. Podmφnkou je tedy pou₧itφ nap°φklad zabezpeΦenΘho protokolu SSL.</p>
  285. <p>VÜechny <a href='podklady/heller/849/serializace.zip'>p°φklady z Φlßnku</a> si m∙₧ete stßhnout. A₧ na p°φklad s databßzφ, kde si musφte upravit p°ihlaÜovacφ ·daje, budou fungovat bez problΘm∙.</p>
  286.  
  287.  
  288.  
  289. <div id='article-author'>
  290. <a href='autor.asp?author=222'>Heller, Petr</a> (16. 4. 2004)
  291. <div id='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/article-about-author'>webmaster <a href="http://www.pehe.net">PeHe.net</a></div>
  292. </div>
  293.  
  294.  
  295.  
  296. </div></div>
  297. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  298. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  299.  
  300.  
  301.  
  302. <div class='page-right-box book'>
  303.     <h3>Kni₧nφ novinka</h3>
  304.     <div class='page-right-box-in'>
  305.         <div class='book-top'>
  306.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=250'>Zrychlete svΘ WWW strßnky!</a></h4>
  307.         </div>
  308.     </div>
  309.     <div class='image'>
  310.         <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  311.     </div>
  312.     <div class='book-bottom'>Cena: <span class='book-price-old'>390 KΦ</span> <span class='book-price-new'>351 KΦ</span></div>
  313. </div>
  314.  
  315.  
  316.  
  317. <div class='page-right-box reading'>
  318.     <h3>NejΦten∞jÜφ</h3>
  319.     <div class='page-right-box-in'>
  320.         <ul>
  321. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  322. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  323. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3298'>Osv∞dΦenφ z ·Φetnictvφ p°es cΘdΘΦko</a></li>
  324. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3295'>Cactus - testovanie cookies</a></li>
  325. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3302'>K Φemu je nßm MathML</a></li>
  326.         </ul>
  327.     </div>
  328. </div>
  329.  
  330.  
  331.  
  332. <div class='page-right-box cauldron'>
  333.     <h3>Diskuznφ kotel</h3>
  334.     <div class='page-right-box-in'>
  335.         <ul>
  336. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3305' title='(48 komentß°∙)'>T°etφ d∞lß byznys</a></li>
  337. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3280' title='(36 komentß°∙)'>Interval.cz a jeho Φtenß°i</a></li>
  338. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3296' title='(30 komentß°∙)'>PHP pro pokroΦilΘ - znovu t°φdy a objekty</a></li>
  339. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3301' title='(24 komentß°∙)'>Kompletnφ pr∙vodce XSLT - ·vod do problematiky</a></li>
  340. <li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3276' title='(21 komentß°∙)'>Webovß grafika podle TomßÜe BarΦφka</a></li>
  341.         </ul>
  342.     </div>
  343. </div>
  344.  
  345.  
  346.  
  347. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  348. </div>
  349. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  350. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  351. </body>
  352. </html>