home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 February / PCWorld_2005-02_cd.bin / novinky / Interval / clanek10.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-12-09  |  20.4 KB  |  171 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='-1' />
  10. <meta name='robots' content='index,follow' />
  11. <meta name='googlebot' content='index,follow,snippet,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 name='ICBM' content='49.1915, 16.626' />
  15. <meta name='DC.Title' content='Interval.cz' />
  16. <meta name='DC.Identifier' content='http://interval.cz' />
  17. <meta name='DC.Language' content='cs' />
  18. <meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
  19. <meta http-equiv='imagetoolbar' content='no' />
  20. <meta http-equiv='MSThemeCompatible' content='no' />
  21. <meta name='MSSmartTagsPreventParsing' content='true' />
  22. <link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
  23. <link rel='alternate' type='application/rss+xml' title='RSS Interval.cz' href='http://interval.cz/__rss/rss.asp' />
  24. <link rel='home' href='http://interval.cz' />
  25. <link rel='search' href='http://interval.cz/search_ex.asp' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  30. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  31. <title>Interval.cz - webdesign a e-komerce denn∞</title>
  32. </head>
  33. <body class='interval interval-articles'>
  34. <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>
  35. <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>
  36. <div id='page-body'><div id='page-left'><div id='article'>
  37.  
  38.  
  39. <h2>Zend's PHP 5 Coding Contest - wtcSQLite</h2>
  40. <p id='prepend'>Zend, spoleΦnost, kterß stojφ za enginem pohßn∞jφcφm PHP 5, uspo°ßdala sout∞₧ o nejlepÜφ aplikace v PHP 5, s cφlem p°iblφ₧it a popularizovat novΘ objektovΘ rysy tohoto jazyka. Cφlem nßsledujφcφch Φlßnk∙ je p°inΘst vßm pohled na novinky v PHP 5, a to tak, jak byly pou₧ity v praxi autory, kte°φ se "Zend's Coding Contest" z·Φastnili.</p>
  41.  
  42. <h3>Co je novΘho v PHP 5</h3>
  43. <p>SpoleΦnost <a href='http://zend.com'>Zend</a>, vyvφjejφcφ engine pohßn∞jφcφ PHP, se rozhodla zpopularizovat nov∞ uvedenΘ PHP 5, a to formou <a href='http://zend.com/php5/contest/contest.php'>sout∞₧e s v∞cn²m dary</a> (prvnφ cenou byl znaΦkov² notebook).</p>
  44. <p>Sout∞₧ m∞la pomoci rozÜφ°it pov∞domφ o PHP 5, o jeho novΘ objektovΘ koncepci, a p°isp∞t k odpoutßnφ se (n∞kter²m programßtor∙m) od psanφ PHP k≤du ve stylu QBasicu pro MS-DOS. PHP verze 4.0.6 a ni₧Üφ k tomu n∞kdy docela svßd∞lo...</p>
  45. <p>PHP 5 v podßnφ Zendu je skuteΦn∞ p°elomovΘ, proto₧e p°inßÜφ do tohoto skriptovacφho jazyka konstrukce, kterΘ dosud byly znßmΘ spφÜe z jazyk∙ jako je Java Φi C++.</p>
  46. <p>PHP 5 p°inßÜφ nov∞ konstruktory a <a href='http://hulan.info/blog/?item=co-je-noveho-v-php-5-dil-1-5'>destruktory</a> t°φd, protected, private a public prom∞nnΘ a metody t°φd, abstraktnφ a final t°φdy, statickΘ metody t°φdy, <a href='http://hulan.info/blog/?item=co-je-noveho-v-php-5-dil-4-5'>statickΘ prom∞nnΘ t°φd</a> s p°i°azenou poΦßteΦnφ hodnotou, <a href='http://hulan.info/blog/?item=co-je-noveho-v-php-5-dil-3-5'>interface</a> a jeho implementaci, funkce pro klonovßnφ objekt∙ a hlavn∞ <a href='http://hulan.info/blog/?item=co-je-noveho-v-php-5-dil-2-5'>v²jimky</a> (<code>try</code>, <code>catch</code>, <code>throw</code>), kterΘ rapidn∞ zjednoduÜφ a uΦinφ robustn∞jÜφm veÜker² k≤d, kter² zpracovßvß chybovΘ stavy.</p>
  47. <p>Krom∞ t∞chto zm∞n objektovΘ koncepce je v PHP 5 nov∞ zahrnuta i podpora pro <a href='http://sqlite.org'>SQLite</a>, co₧ je velice zajφmavß <em>embedded</em> databßze, o velikosti cca 200 kB, kterß umφ v podstat∞ to samΘ, co MySQL, a nemusφ se nijak instalovat. SQLite databßzi tvo°φ jeden soubor ve filesystΘmu a nad nφm se pracuje.</p>
  48. <p>SQLite umφ dokonce i pohledy (views), triggery a transakce a mo₧nosti jejφho (omezenΘho) SQL repertoßru je mo₧nΘ rozÜi°ovat pomocφ callback funkcφ nad PHP.</p>
  49. <p>Tento rozsßhlejÜφ ·vod je zde zßm∞rn∞, je toti₧ dobrΘ si uv∞domit, ₧e PHP 5 se posunulo od PHP 4 do oblasti, kde m∙₧e ji₧ konkurovat °ad∞ jin²ch modernφch programovacφch jazyk∙ a nep°ipadat si jako chud² p°φbuzn².</p>
  50.  
  51. <h3>Podmφnky sout∞₧e a jejφ vφt∞zovΘ </h3>
  52. <p>┌Φastnφk∙m sout∞₧e bylo doporuΦeno n∞kolik typ∙ aplikacφ (nicmΘn∞ bylo mo₧no poslat libovoln² nßm∞t) a jednalo se o vcelku praktickΘ v∞ci:</p>
  53.  
  54. <div class='list'>
  55. <ul>
  56. <li>galerie obrßzk∙</li>
  57. <li>online systΘm pro prezentace</li>
  58. <li>online systΘm pro porovnßnφ cen</li>
  59. <li>agregace v²sledk∙ vyhledßvaΦ∙</li>
  60. <li>webovß administrace SQLite databßze</li>
  61. <li>webov² sprßvce soubor∙</li>
  62. </ul>
  63. </div>
  64.  
  65. <p>Vφt∞zem se staly nejlΘpe bodovanΘ aplikace, kde 50% vßhu m∞lo hlasovßnφ ve°ejnostφ a 50% vßhu m∞lo hodnocenφ odborn²ch porotc∙. Preferovßny byly p°itom aplikace pou₧φvajφcφ v p°im∞°enΘ mφ°e novΘ objektovΘ funkce PHP 5, XML a s dobr²m a "Φist²m" k≤dem.</p>
  66. <p>Vφt∞zovΘ <em>Zend's PHP 5 Coding Contest</em>:</p>
  67.  
  68. <div class='list'>
  69. <ol>
  70. <li><a href='http://www.zend.com/php5/contest/contest.php?id=36&single=1'>PRADO</a> - komponent framework, obdoba vizußlnφch komponent pro PHP, kterΘ jsou inspirovßny podobn²mi komponentami v Delphi, vΦetn∞ jejich nßzv∙</li>
  71. <li><a href='http://www.zend.com/php5/contest/contest.php?id=74&single=1'>wtcSQLite</a> - kompletnφ administrace SQLite databßzφ p°es webovΘ rozhranφ</li>
  72. <li><a href='http://www.zend.com/php5/contest/contest.php?id=89&single=1'>LIMB</a> - framework pro sprßvu obsahu webu</li>
  73. </ol>
  74. </div>
  75.  
  76. <h3>wtcSQLite - webovß administrace SQLite databßze</h3>
  77. <p>V tomto Φlßnku bych se cht∞l podrobn∞ji v∞novat aplikaci, kterß skonΦila na druhΘm mφst∞, tedy <a href='http://www.zend.com/php5/contest/contest.php?id=74&single=1'>wtcSQLite</a>. Napsal ji Andrew Gallant a poskytuje SQLite obdobnΘ slu₧by jako <a href='http://interval.cz/serial.asp?serial=77' title='Interval.cz: Sprßvce pro databßze MySQL - phpMyAdmin'>phpMyAdmin</a> databßzi MySQL. Umφ tedy provßd∞t vklßdßnφ, mazßnφ a zm∞nu tabulek, triger∙, index∙, pohled∙ a dat, vΦetn∞ podpory pro <samp>ALTER TABLE</samp> (kterou SQLite standardn∞ nemß - je pot°eba vytvß°et pomocnou tabulku s novou strukturou a kopφrovat do nφ data).</p>
  78. <p>SQLite je databßze, kterß m∞ osobn∞ okouzlila. Nejde zde ani tak o to, ₧e SQLite umφ pßr v∞cφ navφc oproti MySQL (triggery, pohledy), v²bornß na SQLite databßzi je jejφ <em>embedded</em> koncepce a engine, kter² pro databßzi pou₧φvß jedin² soubor, v n∞m₧ jsou obsa₧eny veÜkerΘ struktury tabulek, indexy i data.</p>
  79. <p>Na data nejsou v SQLite p°itom kladeny ₧ßdnΘ typovΘ nßroky Φi po₧adavky, co₧ se sice naprosto nehodφ pro jejich bezpeΦnΘ zpracovßnφ, ale nap°φklad pro uchovßnφ Üablon redakΦnφho systΘmu je to zcela ideßlnφ.</p>
  80. <p>SQLite je navφc pro v²b∞rovΘ p°φkazy jeÜt∞ o n∞co rychlejÜφ ne₧ dosavadnφ p°ebornφk pro (jednoduchΘ) SELECTy, tedy MySQL.</p>
  81.  
  82. <h3>wtcSQLite - koncepce a zajφmavΘ t°φdy</h3>
  83. <p>Aplikace wtcSQLite se rychle rozvφjφ, sout∞₧e se ·Φastnila verze 1.0.0, ale v dob∞ vzniku tohoto Φlßnku, tedy o pßr t²dn∙ pozd∞ji, byla ji₧ na serveru <a href='http://www.webtrickscentral.com'>WebTricksCentral</a> k dispozici verze 1.1.1.</p>
  84. <p>Podφvßme se tedy podrobn∞ji na tuto nov∞jÜφ verzi - m²m cφlem nenφ p°itom popis instalace tΘto aplikace (Φφst <em>readme.txt</em> umφ ka₧d², navφc instalace spoΦφvß  jen v rozbalenφ ZIP archivu), ale pohled na zajφmavΘ v∞ci v k≤du wtcSQLite z hlediska programßtora.</p>
  85.  
  86. <h4>Pozoruhodn² databßzov² layer wtcSQLite</h4>
  87. <p>ZaΦal bych pohledem na t°φdu <code>SQLiteEnhanced</code>, nejlepÜφ Φßst wtcSQLite aplikace, kterß je zßkladnφm objektem pro prßci s SQLite databßzφ. T°φda <code>SQLiteEnhanced</code> je pozoruhodnß v tom, ₧e umφ zpracovßvat i SQL p°φkazy typu <samp>ALTER TABLE abc ADD name VARCHAR(255);</samp>, a to zcela automaticky - pokud zavolßte jejφ <code>public function query($sql)</code> metodu s poΦßteΦnφm textem <samp>ALTER</samp>, p°edß se °φzenφ metod∞ <code>alterTableQuery()</code>.</p>
  88. <p>Je to to velice zajφmav² layer, publikovan² v licenci GNU GPL a tedy pou₧iteln² i pro vaÜe open-source projekty. Z mΘho pohledu tvo°φ nejhodnotn∞jÜφ Φßst wtcSQLite.</p>
  89.  
  90. <h4>Novßtorsk² template systΘm wtcSQLite</h4>
  91. <p>Druhou novßtorskou v∞cφ na wtcSQLite je jejφ template systΘm. Ten by byl vcelku obyΦejn² a standardnφ (nenφ ani navr₧en pro obecnΘ pou₧itφ a pro rozsßhlΘ Üablony se evidentn∞ nehodφ, rovn∞₧ je psan² p°φliÜ "natvrdo" k danΘ aplikaci), neb²t jeho koncepce uklßdßnφ Üablon.</p>
  92. <p>V archivu s wtcSQLite toti₧ dostanete i soubor <em>templateSystem.sqlite.php</em>, co₧ nenφ nic jinΘho, ne₧ napln∞nß SQLite databßze (ji₧ jsem se zmφnil, ₧e SQLite databßze je jen obyΦejn² soubor) se Üablonami, kterΘ potom wtcSQLite pou₧φvß pro zobrazovßnφ formulß°∙ pro vklßdßnφ, zm∞nu a mazßnφ tabulek, index∙ a trigger∙.</p>
  93. <p>Tak₧e ji₧ ₧ßdnΘ soubory se Üablonami, jak je znßme z aplikace phpBB Φi phpMyAdmin, Φi spouÜt∞nφ <em>install.php</em> nebo ruΦnφ vklßdßnφ do databßze. Dodßvß se samotnß, napln∞nß SQLite databßze, s mo₧nostφ jejφ jednoduchΘ zm∞ny p°φmo p°es webovΘ rozhranφ wtcSQLite.</p>
  94. <p>èablony je rovn∞₧ mo₧no exportovat do XML soubor∙, za pomoci t°φdy <code>ExportXML</code>, a importovat z XML do SQLite databßze, za pomoci t°φdy <code>ImportXML</code>.</p>
  95. <p>Cel² systΘm je velice v²hodn², nemusφte nic instalovat nebo konfigurovat a aplikace je ihned funkΦnφ. SQLite by p°itom pro v²b∞rovΘ dotazy m∞la b²t jeÜt∞ rychlejÜφ ne₧ dosavadnφ p°ebornφk v tomto oboru, tedy MySQL, a zde jejφ koncepce zφskßvß pozoruhodn² smysl.</p>
  96.  
  97. <h4>Co se mi na wtcSQLite nelφbφ, aneb programßtorskΘ chyby</h4>
  98. <p>Ka₧d² programßtor je p°i pohledu na k≤d n∞koho jinΘho schopen b∞hem 5 minut popsat alespo≥ 10 chyb, kter²ch se onen dotyΦn² neÜ¥astnφk dopustil. K≤d se Φasto pφÜe rychle, aby prost∞ "u₧" fungoval, nikoli pro krßsu k≤du samotnou. NicmΘn∞, nalΘzat nep°φliÜ efektivn∞ napsanΘ v∞ci smysl mß, minimßln∞ proto, aby se z toho jinφ programßto°i pouΦili.</p>
  99. <p>Zde se tedy, rovn∞₧ na p°φkladu wtcSQLite, podφvßme na to, jak bychom svΘ aplikace psßt nem∞li.</p>
  100. <p>Autorizace p°φstupu k databßzi je ve wtcSQLite °eÜena velice jednoduÜe, a bohu₧el i nedostateΦn∞, p°es soubor <em>config.xml.php</em>, tedy XML soubor s definicφ u₧ivatelskΘho jmΘna a hesla, v n∞m₧ je ale bohu₧el toto jmΘno a heslo ulo₧eno bez jakΘhokoli zaÜifrovßnφ, jako plain-text, bez pomoci funkce <code>md5()</code> Φi <code>sha1()</code>.</p>
  101. <p>O p°φpadnΘ zpracovßnφ chyb se starß t°φda <code>MyException</code>, co₧ je rozÜφ°enφ vestav∞nΘ t°φdy <code>Exception</code> o specifickΘ zpracovßnφ normßlnφch a "fatal" v²jimek, a to mφsto dosavadnφho postupu p°es <code>trigger_error()</code> a <code>set_error_handler()</code>. Bohu₧el, zde je dalÜφ slabina aplikace, °ada v∞cφ, kterΘ by m∞ly b²t oÜet°eny pomocφ <code>Exception</code>, oÜet°eny v∙bec nejsou. Pat°φ sem zejmΘna sada SQL dotaz∙ v aplikaci (SELECT, INSERT, DELETE) nad SQLite databßzφ, p°itom prßv∞ pomocφ <code>Exception</code> by to Ülo v PHP 5 velice elegantn∞ °eÜit.</p>
  102. <p>ProblΘmem ve verzi 1.0.0 bylo i zcela neoÜet°enΘ a p°φmΘ pou₧itφ <code>$_GET</code>, <code>$_POST</code> a dalÜφch polφ (nßsledujφcφ verze toto odstra≥uje hackem), bez ohledu na zapnutΘ <code>get_magic_quotes_gpc()</code>, co₧ zp∙sobuje v n∞kter²ch p°φpadech nefunkΦnost Φi nedeterminovatelnΘ chovßnφ celΘ aplikace.</p>
  103. <p>Mnohem lepÜφ, ne₧ p°istupovat k t∞mto polφm prom∞nn²ch "natvrdo", je nadefinovat si nap°φklad nßsledujφcφ funkce a ty potom pou₧φvat mφsto polφ:</p>
  104.  
  105. <div class='sample'>
  106. function getVar($name) { 
  107. <br />    return undoMagic($_GET[$name]);
  108. <br />}
  109. <br />function postVar($name) {
  110. <br />    return undoMagic($_POST[$name]);
  111. <br />}
  112. <br />function cookieVar($name) {
  113. <br />    return undoMagic($_COOKIE[$name]);
  114. <br />}
  115. <br />function requestVar($name) {
  116. <br />    return undoMagic($_REQUEST[$name]);
  117. <br />}
  118. <br />function serverVar($name) {
  119. <br />    return $_SERVER[$name];
  120. <br />}
  121. <br />function undoMagic($data) {
  122. <br />    return get_magic_quotes_gpc() ? stripslashes($data) : $data;
  123. <br />}
  124. </div>
  125.  
  126. <p>Osobn∞ mi trochu vadφ i nadm∞rnΘ pou₧itφ <code>if() ... else ... if() ... else</code> ve zdrojovΘm k≤du aplikace. Zde se mi zdß p°ehledn∞jÜφ pou₧itφ <code>switch() ... case</code> nebo rovnou definice specifickΘ padesßti°ßdkovΘ funkce pro ka₧dou operaci, ne₧ 800 °ßdk∙ nestrukturovanΘho k≤du. Ale to je spφÜe otßzka osobnφho stylu, ne₧ vß₧nß v²hrada.</p>
  127.  
  128. <h4>Zhodnocenφ wtcSQLite</h4>
  129. <p>Celkov∞ je ale nutno °φci, ₧e celß aplikace wtcSQLite je napsßna programßtorsky sluÜn∞, s ohledem na Φas, v jakΘm byla vytvo°ena, a s ohledem na novost PHP 5 a jeho koncepce.</p>
  130. <p>Aplikace wtcSQLite pou₧φvß novß objektovß rozÜφ°enφ PHP (<code>public static function</code>, <code>protected function</code>, <code>exception</code>), pou₧φvß XML, SQLite. A je to navφc mimo°ßdn∞ u₧iteΦnß utilita, na kterΘ se dßle pracuje, ji₧ nynφ pln∞ vyu₧itelnß p°i programovßnφ v PHP 5 s SQLite.</p>
  131. <p>Zaslou₧en∞ zφskala v Zend's PHP 5 Coding Contest st°φbro.</p><div class='refer'><h3><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/serial.asp?serial=136' title='p°ehled Φlßnk∙ vΦetn∞ anotacφ'>Zend's PHP 5 Coding Contest</a></h3><p>
  132.  Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!</p><ul><li><strong>Zend's PHP 5 Coding Contest - wtcSQLite</strong> (prßv∞ Φtete)</li></ul></div>
  133.  
  134. <div id='article-author'>
  135. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=246'>Hulßn, Radek</a> (26. 11. 2004)
  136. <div id='article-about-author'>internetov² autor a vydavatel webu <a href="http://hulan.info">WELL.DONE</a></div>
  137. </div>
  138.  
  139.  
  140. </div></div>
  141. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  142. <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>
  143.  
  144.  
  145.  
  146. <div class='page-right-box book'>
  147.     <h3>Kni₧nφ novinka</h3>
  148.     <div class='page-right-box-in'>
  149.         <div class='book-top'>
  150.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=280'>xCSS - referenΦnφ p°φruΦka</a></h4>
  151.         </div>
  152.         <div class='image'>
  153.             <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  154.         </div>
  155.         <div class='book-bottom'>Cena: <span class='book-price-old'>350 KΦ</span> <span class='book-price-new'>315 KΦ</span></div>
  156.     </div>
  157. </div>
  158.  
  159.  
  160.  
  161. <div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 14 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3658'>VyhlßÜenφ sout∞₧e Interzen 2004</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3693'>PSPad - zaΦφnßme tvo°it webov² projekt</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3689'>NauΦte se vid∞t kreativn∞</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3680' title='(34 komentß°∙)'>H°φchy pro ÜφlenΘho korektora - autentizace, autentikace nebo autentifikace?</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694' title='(31 komentß°∙)'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3683' title='(13 komentß°∙)'>Individualizace stylopis∙ k eliminaci chyb prohlφ₧eΦ∙ - teoretick² p°ehled</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682' title='(13 komentß°∙)'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3676' title='(11 komentß°∙)'>Webdesign s webov²mi standardy</a></li></ul></div></div>
  162.  
  163.  
  164.  
  165. <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>
  166. </div>
  167. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  168. <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>
  169. </body>
  170. </html>
  171.