Něco
o firmě Skip Hardware s.r.o.
Požadavek
na technické vybavení
Historie operačního systému Unix
Historie operačního systému Linux
Dnešní podoba operačního systému Linux
Instalace
operačního systému Linux – distribuce RedHat
Ceníky
- plnění db pomoci jednoduchých textových utilit
Spojení s databází – výpis dat
Zobrazení dat z Excelu a Accessu
„V součastné době se v České Republice i v ostatních státech světa velice rychle rozšiřuje termín Internet“. Také se říká, že Internet je fenoménem součastné doby, přináší nám dnes a denně mnoho výhod v komunikaci s celým světem. Doposud ve světě neexistovalo něco, s čím by se dal Internet porovnat. Milióny lidí po celé planetě s různou barvou pleti, s různým náboženským přesvědčením a s různým pohledem na život se bez vedení jakéhokoli člověka, státu nebo organizace spojilo do sítě, která jim umožňuje měnit názory i poznatky. Negativní prvky internetu jsou v porovnání s klady naprosto mizivé. Dnes je možno díky Internetu nakupovat, v obchodech, objednávat si zboží přímo z teplíčka domova, komunikovat touto cestou s bankami a s mnoha dalšími institucemi. Je možno zviditelnit takřka, vše co vás napadne. Mnoho lidí pod tímto pojmem vidí jen známé stránky, které se dají přirovnat k elektronickým novinám, ale pod tímto názvem se skrývá mnoho technologií, které se díky rozvoji Internetu zrodily. Moje diplomová práce je zaměřená na tvorbu dynamických stránek pomocí skriptovacího nástroje PHP, které komunikují s databází, v níž jsou data uložená. Stěžejní částí je vytvoření webovského rozhraní pro přidávání a ubírání položek v databázi PostgreSQL. Budu se zde rozepisovat o instalaci potřebného software a jeho zprovoznění. Jedna z kapitol bude zaměřená na samotné naplnění databáze takzvanými ostrými daty.
Téma své práce jsem si zvolil až po dlouhém shánění firmy, která mi umožnila realizovat svoji diplomovou práci. Hlavním požadavkem firmy bylo vytvoření systému, díky kterému se budou zapsaná data v ceníku zobrazovat na webu. Přesně se bude jednat o ceníky, které se tvoří v aplikaci MS Excel. K dispozici tedy bude jak webovské rozhraní, tak aplikační.
Firma podniká v oblasti výpočetní techniky a moderní komunikace, působí regionálně v Trutnově a jeho okolí již od roku 1992. V začátcích se firma orientovala hlavně na prodej a servis výpočetní a kancelářské techniky, konkrétně osobních počítačů, kopírek, faxů a telefonů. Postupně došlo k odklonu od klasické telefonní techniky k technologiím mobilní telekomunikace, datových přenosů a s nástupem Internetu také k poskytování služeb s ním spojených. Je jedním z přípojných uzlů sítě ISP Video On Line (Czech On Line). Toto přípojné místo je vybaveno třiceti modemy o rychlosti 56kb/s, podporující protokol V.90 s možností ISDN připojení.
Téměř každá firma, zabývající se obchodem je nucena minimálně jednou týdně měnit ceny svých prodávaných produktů a to z mnoha ekonomických důvodů. Tato změna by měla proběhnout velice rychle a bez jakýchkoliv delších prodlev. Je nutno tisknout ceníky a distribuovat je potencionálním zákazníkům prostřednictvím osobního kontaktu, například v prodejně. Ve firmě, kde absolvuji svou praxi se ceníky tvoří v programu MS Excel a to z důvodu jeho snadné obsluhy a možností zadávání různých početních úkonů, jako např. stanovení ceny bez DPH atd.
Zde vzniká problém, jak data, která se aktualizují v MS Excel přenést do html dokumentů, které si budou moci zákazníci prohlédnout v elektronické podobě, prostřednictvím firemního www serveru. Jednou z možností je uložit data z Excelu do formátu soubor.htm. Tento způsob je poněkud krkolomný a nedostatečně pružný, protože při každé aktualizaci cen je nutno soubor umístit do patřičného adresáře na www servru. Druhou možností je veškerá data mít uložená v nějaké databázi a k ní připojit, jak editační prostředí v html nebo ( MS Excel ), tak zpřístupnění dat na web pro zákazníky. Budu se zabývat druhou variantou, která nabývá podstatně většího efektu.
K řešení mé diplomové práce je zapotřebí server, na kterém poběží již zmiňovaná databáze a www server. K tomuto účelu jsem zvolil operační sytém Linux distribuce RedHat6.0cz. Důvod je prostý, tento OS je spolehlivý a hlavně je dostupný široké veřejnosti bezplatně. Pro srovnání, kdybych chtěl pod Windows NT zprovoznit libovolnou komerční databázi např. MS SQL 7.0, byl bych nucen investovat velké množství finančních prostředků. Zato Linux je zdarma a zhostí se tohoto problému obstojně a lépe. Je pravdou, že PostgreSQL verze 6.4.2 standardně nemá grafické rozhraní. Ale lidem kteří pracují s UNIXem toto nevadí, „aspoň nejsou závislí na myši“. Od nové verze disponuje PostgreSQL programem pgaccess pro X Windows.
![]()
obrázek 1:Logo firmy RH
Jak již bylo řečeno OS, pod kterým poběží www server a databáze, je Linux. Tato zmiňovaná distribuce obsahuje nesčetné množství velmi užitečných programů a utilit, které jsou v tzv. RPM ( Red Hat Package Manager ) balíčcích.
|
Software |
Zdroj RPM |
|
Linux distribuce RedHat 6.0 cz |
|
|
www server Apache |
apache-php_mcz-common-1.3.6-8.1 |
|
Apache s podporou PHP a PostgresSQL |
apache-php_mcz-psql-1.3.6-8.1 |
|
Scriptovací nástroj PHP3 |
součástí apache |
|
Databáze PostgreSQL |
postgresql-6.4.2-6 |
|
Office 2000 – Word 9,
Excel 9 |
|
|
HomeSite
4.0 |
|
tabulka 1: Užitý software
Prvním požadavkem mé práce bylo získání odpovídajícího hardware. K dispozici jsem obdržel 2x ( PII 350 Mhz, 64MB RAM, 4,5 GB HDD ). Vzhledem ke své náročnosti jsem požadoval počítače dva. První jako pracovní stanici s Windows 95 a druhý na již zmiňovaný server.
Primární funkce operačního systému spočívá v tom, že poskytuje podporu pro realizaci počítačových programů. Proto například můžeme používat svůj oblíbený editor a vytvářet např. html dokumenty. Bez podpory operačního systému by editor nemohl pracovat - editor potřebuje ke své činnosti interakci s naším terminálem, s našemi soubory a dalším technickým vybavením počítače.
Operační systém
(nejčastěji označován zkratkou „OS“) může být jednoduchý a minimalizovaný
(například DOS) nebo velký a složitý (například OS/2 nebo UNIX). Operační
systémy typu Unix patří ke středně velkým systémům. Poskytují více zdrojů a
prostředků než první jednoduché operační systémy, a to v takové formě, aby s
jejich pomocí bylo možné řešit prakticky všechny úlohy. Původně byl operační
systém Unix navržen jako zjednodušení operačního systému Multics. Filosofie
operačního systému Unix spočívá v tom, že by se veškeré funkce měly rozdělit do
malých částí, tedy relativně jednoduchých programů. Nové funkční vlastnosti lze
získat vhodnou kombinací těchto jednoduchých programů. Samozřejmě se stále
objevují nové a nové obslužné programy, které lze snadno integrovat do vašich
nástrojů, a tak můžete váš operační systém neustále rozšiřovat.
Klíčovou částí
operačního systému je tzv. jádro. Ve většině operačních systémů, jako je Unix
nebo OS/2 plní jádro systému takové
funkce, jako je spouštění programů, přidělování systémových zdrojů, přidělování
času procesoru současně běžícím programům a podobně. Samozřejmě platí, že i
jádro systému je program. Ten běží na vašem počítači jako první program po jeho
nastartování, kdy realizuje všechny konfigurační funkce, a jako poslední
program před vypnutím počítače, kdy realizuje všechny potřebné funkce k
zastavení systému.
Protože, jsem mnoho historických událostí
v tomto oboru nezažil, radši budu citovat zkušenější (LDP[1]).
„V roce 1965 pracovaly společnosti Bell Telephone Laboratories (divize
AT&T) a General Electric na projektu „MAC of MIT“, jehož cílem bylo
vytvořit operační systém Multics.
Později se společnost Bell Telephone Laboratories rozhodla od spolupráce odstoupit, ale v důsledku toho neměla k dispozici kvalitní operační systém. Pánové Ken Thompson a Dennis Ritchie se rozhodli navrhnout operační systém, který by společnosti Bell Telephone Laboratories vyhovoval. Ken Thompson tento návrh realizoval při vytváření vývojového prostředí na počítači PDP-7. Další výzkumný pracovník společnosti Bell Telephone Laboratories, pan Brian Kernighan, dal novému operačnímu systému název Unix. Později zveřejnil pan Dennis Ritchie programovací jazyk C. V roce 1973 byl Unix kompletně přepsán do jazyka C (původní systém byl vytvořen v assembleru). V roce 1977 byl operační systém Unix převeden z počítače PDP na nový počítač s použitím procesu, jež se nazývá „porting“. Tato akce byla uskutečnitelná právě proto, že byl operační systém Unix přepsán v jazyce C. Koncem sedmdesátých let byla společnosti AT&T protimonopolním úřadem zakázána činnost v oblasti počítačového průmyslu. Proto se společnost rozhodla za velmi výhodných finančních podmínek převést licenci na operační systém Unix na některé university. Unix se tedy stal populárním především v akademických kruzích, avšak postupem času se začal prosazovat i v komerční sféře. Dnešní podoba Unixu se zcela liší od verze z roku 1970. Existují dvě základní varianty: System V od společnosti USL (Unix System Laboratories, dnes jej vlastní Novell) a BSD (Berkeley Software Distribution). Poslední verze USL má značení SVR4 (čtvrtá verze), zatímco poslední verze od BSD má označení 4.4. Kromě těchto základních verzí však existuje spousta dalších verzí operačního systému Unix. Komerční verze jsou zpravidla odvozeny od jedné z verzí USL nebo BSD. Existuje však spousta verzí operačního systému Unix, které kombinují vlastnosti obou základních verzí. Ceny současných komerčních verzí operačního systému Unix pro počítače s procesorem Intel se pohybují od 500 do 2000 dolarů.“
Autorem operačního systému Linux je pan Linus Torvalds. Jeho původní verze byla v průběhu asi deseti let zdokonalována bezpočtem lidí na celém světě. Linux představuje verzi operačního systému Unix pro osobní počítače s procesorem Intel, Alpha a další a byl kompletně vytvořen znovu - na jeho vývoji se ve společnosti Unix System Laboratories a Berkeley Software Distribution vůbec nepodílely.
Zajímavé je, že se na vývoji operačního systému Linux podíleli lidé na celém světě - od Austrálie po Finsko a všichni doufali, že se Linux podaří uvést do podoby schopné konkurovat ostatním operačním systémům typu Unix. Vlastní projekt operačního systému Linux začal výzkumem vlastností procesoru 386. Systém je navržen tak, aby maximálně využíval všech vlastností tohoto procesoru. Na operační systém Linux se vztahují licenční podmínky GPL (GNU General Public Licence). Tato licence se vztahuje na veškeré programové vybavení produkované nadací Free Software Foundation a jejím cílem je zabránit komukoliv omezovat distribuční práva ostatních. Jinými slovy, podle licenčních podmínek GPL si můžeme účtovat za distribuci programového vybavení GNU kolik chceme, ale nesmíme nikomu nařizovat, za jaký poplatek je má distribuovat dál. Dále musíme s každou distribucí programového vybavení GNU zpřístupnit zdrojové kódy, což je velmi užitečné pro programátory. Pak si totiž každý může například modifikovat operační systém Linux a dále distribuovat tuto modifikovanou verzi - opět za předpokladu, že ji bude distribuovat podle licenčních podmínek GPL.
Operační systém Linux podporuje většinu programového vybavení napsaného pro Unix, včetně systému X Window. Tento systém byl vytvořen na Massachusetts Institute of Technology tak, aby umožňoval operačním systémům Unix vytvářet grafická okna a interaktivně spolupracovat mezi sebou. Dnes platí, že je systém X Window implementován pro každou verzi operačního systému Unix.
Na vývoji tohoto OS se podílí velké množství lidí po celém světě. Před několika lety se mnoho lidí dívalo na Linux jako na hračku pro programátory, v posledních letech dvacátého století si hodně lidí uvědomilo fakt, že Linux je opravdovým konkurentem mnoha komerčních systémů a taky to, že Linux nikdy nespí. Velice povzbudivé je, že i výrobci HW se o Linux zajímají a mnoho firem ho začíná podporovat, tím že se k danému hardware šíří i potřebné ovladače, bez kterých byl donedávna vždy o krok pozadu. Klíčovým prvkem je samozřejmě jádro OS, do kterého jsou stále přidávány nové ovladače. Jádro je stavebním kamenem celého sytému. Tím, že se jádro neustále vyvíjí, bylo potřeba vymyslet způsob značení jader vývojových a stabilních. Např. linux-2.2.xx.tar.bz První číslo ve verzi operačního systému Linux představuje číslo hlavní revize. Pokud je druhé číslo sudé, jedná se o stabilní verzi. Jestliže je liché, jedná se o vývojovou verzi tam, kde je xx je číslo verze jádra. Ve vývojových verzích bývá spousta chyb, které „odvážní uživatelé“ postupně odhalují a programátoři postupně opravují. Jakmile jsou všechny závažné nedostatky z vývojové verze odstraněny, prohlásí se vývojová verze za stabilní a začne se pracovat na nové vývojové verzi. V součastné době má stabilní verze číslo 2.0.38 a 2.2.12 a poslední vývojová verze 2.1.90 a 2.3.22.
Pokud máme potřebu si jádro upravit podle svých představ, není to žádný problém. Budeme si muset obstarat zdrojové kódy jádra. A ty najdeme na českém mirroru např. ftp.linux.cz/pub/linux/kernel/ Příkazem bunzip2 rozbalíme zdrojové kódy.
bunzip2
-c linux-2.2.5.tar.bz | tar xvf -
Pomoci příkazu make menuconfig nastavíme všechno, co chceme aby jádro umělo – obsahovalo např. podpora různých filesystémů
atd. Vytvoří se nám soubor .config, který slouží jako předpis
podle kterého se jádro zkompiluje. Dalším důležitým příkazem je make dep
bzImage.
Pokud proběhla kompilace v pořádku, zkompilované jádro
najdeme v rozbaleném adresáři – /linux/arch/i386/boot/vmlinuz
Jestli máme pochyby o tomto souboru, můžeme se přesvědčit pomocí příkazu file o jeho správnosti.
file
linux/arch/i386/boot/vmlinuz
vmlinuz:
x86 boot sector
Jako většina moderních OS umožňuje distribuce RedHat (dále jen RH) instalaci z různých zdrojů. Těmi mohou být hard disk, na kterém je instalace zkopírována z libovolného zdroje, např. ftp.linux.cz/pub/linux/redhat/, CD-ROM, FTP[2], NFS[3]. Pokud nemáme BIOS[4], který umí bootovat z CD-ROM, tak budeme nuceni si vyrobit butovací disketu. Nejprve si musíme sehnat obraz diskety, záleží na zdroji instalace. Obraz se zpravidla nachází v adresáři /images/, jeho jméno je boot.img. Dále budeme potřebovat program který přenese obraz image na disketu. Tento program se nazývá rawrite.exe a najdeme ho v adresáři /dosutils/. Program provede bitovou kopii image na disketu.
Nejrychlejším způsobem je stáhnout si instalaci z nějakého mirroru a zapsat si ji na vypalitelné CD. Instalace umožňuje i bootování přímo z MS-DOSu a to pomoci programu loadlin.exe. Pak stačí pouze bat soubor.
Autoboot.bat
loadlin
autoboot\vmlinuz initrd=autoboot\initrd-n.img network
nebo
loadlin
autoboot\vmlinuz initrd=autoboot\initrd-l.img local
Hned po započetí bootování se z diskety přenese malé modulární jádro vmlinuz, posléze se dekomprimuje v paměti a provede detekci našeho HW, pak se spustí instalační procedura, která se nás bude ptát na otázky, jako např. jaký chceme jazyk, zda máme nějaké SCSI zařízení. Pak musíme zvolit způsob instalace. Pokud máme rychlé připojení k internetu můžeme instalovat z jakéhokoli FTP nebo NFS serveru. To ovšem nedoporučuji z důvodu nekvalitních českých linek. Osobně bych se přiklonil k instalaci z CD. Dále budeme muset určit, na který HDD chceme Linux instalovat. Na rozdělení partition je k disposici nástroj, zvaný durid nebo fdisk. Neměli bychom zapomenout na vytvoření tzv. swap partition, která slouží k odkládání paměti ze zaplněné RAM. Je takovým nepsaným pravidlem, že velikost swap by měla být dvojnásobkem RAM. Posléze vybereme, které RPM baličky chceme instalovat. Seznam všech instalovaných balíčku najdeme po instalaci v adresáři /tmp/install.log Po dokončení instalace následuje reboot a Linux je na světě. Po instalaci bude patrně potřeba nastavit důležité věci jako je IP a jméno počítače atd.. Pro rychlé nastavení doporučuji použít linuxconf, v textové konzoli máme možnost nastavit mnoho údajů. Druhou variantou je přepsání těchto údajů v patřičných souborech konfiguračního adresáře /etc/. Tento způsob opět nedoporučuji, pokud přesně nevíme co děláme.
Při poslechu tohoto jména se nám vybaví spíše indián než software. Proč tento tolik populární server získal toto jméno, to opravdu nevím. Snad mu bylo přisouzeno pro jeho vlastnosti, které se dají přirovnat houževnatým a odolným indiánům jednoho známého kmene. Apache nám umožňuje velice pestrou konfiguraci a nastavení. Je tvořen skupinou lidí, kteří na tomto projektu pracují zcela bezplatně. Díky svým jedinečným vlastnostem je portován pro velké množství platforem. Je charakteristický tím, že obsahuje jen jednu hlavní část kódu a k ní se připojují jednotlivé moduly, těch je celá řada. Pro nás je nejdůležitější mod_czech a mod_php.
Při instalaci celého OS jsme měli možnost vybrat RMP balíky, které instalovat a které ne. Pro mou práci potřebuji, aby www server apache uměl pracovat s PHP3 a aby obsahoval podporu pro SQL databází PostgreSQL. K instalaci jsem použil CD, které jsem si legálně vypálil ve škole, jedná se o distribuci RH6.0cz, tato instalace se dá zakoupit v internetové prodejně http://vltava.cpress.cz jako součást knihy Linux Dokumentační Projekt. Předpokládejme, že při instalaci celého systému jsme úmyslně nenainstalovali www server to proto abychom posléze mohli nainstalovat lokalizovanou verzi. Na tomto CD se nachází apache ve kterém je zakompilována námi potřebná podpora jednotlivých modulů.
Apache/1.3.6 (Unix) (Red Hat/Linux) PHP/3.0.11 (CZ
0.29) mod_czech/3.1.0b4
Instalaci provedme pomocí jednoduchého příkazu:
rpm –i apache-1.3.6-7cz2psql.i386.rpm
Stejným způsobem se instalují všechny programy v distribuci RH.
rpm –i
postgresql-6.4.2-6.i386.rpm
RPM nám nabízí velké množství parametrů, když jsme hodně zvídaví, máme možnost si zobrazit informace o jednotlivých balíčcích. Například rpm –q přepíná do takzvaného query módu a –i nám zobrazí informace o balíčku.
[malyl@skipix malyl]# rpm -qi
apache-php_mcz-common-1.3.6-8.1
Name
: apache-php_mcz-common
Relocations: (not relocateable)
Version
: 1.3.6
Vendor: (none)
Release
: 8.1
Build Date: Thu Jul 22 00:25:20 1999
Install date: Wed Sep 8 15:17:06 1999 Build
Host: monkey.spsselib.hiedu.cz
Group
: System Environment/Daemons
Source RPM: apache-php_mcz-1.3.6-8.1.src.rpm
Size
: 5213163
License: Freely distributable and usable
Summary
: Files needed by the Web server
Description :
Apache is a powerful, full-featured, efficient and
freely-available Web
server.
Apache is also the most popular Web server on the Internet.
This version contains only documentation and config
files. You will
need also another package and name depends from
PHP's database support:
nodb -
no database support
psql -
support for PostgreSQL
mysq -
support for MySQL
Všechna tato data jsou uložena v systémové databázi, ze které můžeme kdykoli zjišťovat např. který příkaz patří k příslušnému balíčku a podobně.
RPM nám umožňuje vyrobit si svoje vlastní balíčky, což je poněkud složitější. Nutností je opatřit si baličky se zdrojovými kódy. Do souboru spec se zapisují všechny údaje o kompilaci. Takto vypadá adresářová struktura již zmiňovaného apache apache-1.3.6-7cz2psql.i386.rpm, viz níže. RPM manager provede při instalaci překopírování celé struktury do systému a zapíše o tom záznam do systémové databáze.
dr-xr-xr-x 3 root
root 0 Apr 30 00:00
INFO
drwxr-xr-x 5 root
root 0 Oct 20 15:51 etc
drwxr-xr-x 3 root
root 0 Oct 20 15:51
home
drwxr-xr-x 6 root
root 0 Oct 20 15:51 usr
drwxr-xr-x 4 root
root 0 Oct 20 15:51 var
-r--r--r-- 1 root
root 757 Apr 30 00:00
HEADER
-r-xr-xr-x 1 root
root 39 Apr 30 00:00
INSTALL
-r-xr-xr-x 1 root
root 39 Apr 30 00:00
UPGRADE
Po instalaci serveru je zapotřebí zkontrolovat konfigurační
soubory httpd.conf a php.ini. Oba
tyto soubory se nachází v /etc/httpd/conf.
Postgres, vyvinutý
původně na UC Berkeley Computer Science Department (katedře počítačové vědy na
Kalifornské univeritě v Berkeley), je průkopníkem objektově-relačních koncepcí,
nyní dostupných v mnoha komerčních databázích. Poskytuje jazykovou podporu
SQL92/SQL3, transakční celistvost a typovou rošiřitelnost. PostgreSQL je
veřejně přístupný, otevřený následník původního kódu z Berkeley.
Implementace Postgres DBMS[6] začala v roce 1986. Postgres od té doby prošel několika velkými inovacemi. První "demonstrační vydání" bylo schopné provozu v roce 1987 a bylo představeno na konferenci ACM-SIGMOD 1988. V červnu 1990 byla uvolněna verze 2 s novým systémem pravidel. Verze 3, která se objevila v roce 1991 obsahovala navíc podporu vícenásobné správy dat, vylepšenou správu dotazů a přepsaný systém pravidel. Další vydání byla od té doby zaměřena z větší části na přenositelnost.
Postgres byl využíván k implementaci mnoha různých výzkumných a produkčních aplikací. Mezi jinými: finanční analytický systém, soubor k monitorování chování tryskových motorů, databáze trasování drah asteroidů, lékařská informační databáze a několik zeměpisných informačních systémů. Postgres byl rovněž využit jako výukový nástroj na několika universitách. Konečně společnost Illustra Informotion Technologies (poté, co byla připojena k Informixu) převzala zdrojový kód a komercializovala jej. Postgres se stal koncem roku 1992 primárním databázovým správcem ve vědeckém počítačovém projektu Sequoia 2000. Krom toho se v průběhu roku 1993 obec externích uživatelů téměř zdvojnásobila. Bylo stále více zřejmé, že udržování a podpora prototypového kódu zabírá značný čas, který by mohl být využit k výzkumu dabáze. Ve snaze redukovat břímě podpory, projekt oficiálně končí verzí 4.2.
V roce 1994 přidali Andrew Yu a Jolly Chen k Postgresu překladač jazyka SQLa zdrojový kód byl následně vydán na Internetu, aby si nalezl vlastní místo ve světě. Postgres95 byl veřejně přístupný, otevřený, nástupce původního kódu z Berkeley. Postgres95 je odvozen od posleního oficiálního vydání Postgresu (verze 4.2). Zdrojový kód je nyní kompletně napsán v ANSI C a byl zkrácen o 25%. Obsahuje mnoho vnitřních změn, které zvyšují výkon a udržovatelnost kódu. Postgres95 verze 1.0.x pracuje podle testu Wisconsin Benchmark o 30-50% rychleji ve srovnání s verzí 4.2. Kromě opravených chyb jsou zde ještě další velká vylepšení:
V roce 1996 bylo
jasné, že název Postgre95 se nestane standardem a neprojde testem času. Bylo
vybráno nové jméno, PostgreSQL, aby odráželo vztah mezi původním Postgresem a
nedávnými verzemi se schopnostmi SQL. Ve stejné době bylo číslování verzí
přivedeno zpět k původní řadě započaté projektem Postgres a bylo stanoveno na
6.0. Celková rychlost podpůrného kódu byla zvýšena přibližně o 20 - 40% a
celková doba nastartování se snížila na 80%, po té co byla verze 6.0 uvedena.
Jak jsem se již zmiňoval, v RH se programy instalují velice obdobně pomoci rpm. Po nainstalováni je zapotřebí přihlásit se pomocí příkazu su jako uživatel postgres, protože po instalaci pouze tento uživatel má právo vytvářet databáze a její oprávněné uživatele. K tomu je zapotřebí příkaz createuser, pomocí kterého se vytvoří uživatel který má právo pracovat s databází. Zpravidla se vytváří stejný uživatel jako již existuje v systémové databázi /etc/passwd. Příkaz se zeptá nejprve na ID uživatele, potom zda může vytvářet nové uživatele a zda může vytvářet samotné databáze. K zrušeni uživatele se užije destroyuser.
Dalším důležitým příkazem je createdb a destroydb. V mé práci jsem vytvářel databázi skipdb. V adresáři /var/lib/pgsql/base/ se vytvoří adresář /skipdb/, do kterého se ukládají tabulky indexy atd.
createdb
skipdb
Po vytvoření databáze je možno se přihlásit k skipdb
pomoci textového db manažera psql.
[malyl@skipix
~]$ psql skipdb
Welcome
to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright
terms of POSTGRESQL
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to
execute query
You are currently connected to the database:
skipdb
skipdb=>
Tento manažer slouží jako nástroj pro správu celého systému. Existuje v něm velké množství příkazů pro zakládání tabulek a jejich rušení, nastavují se zde např. práva pro přístup oprávněných uživatelů. Toto umožňuje definovat tabulkám jejich oprávněné uživatele. Většina patří do skupiny takzvaných SQL příkazů. Zde se objevuje nový termín SQL[9]. Tento dotazovací jazyk byl vytvořen z důvodu propojení mnoha odlišných databázových systému. Je to jednotný jazyk, který podporuje většina SQL aplikací. Postgres je kompatibilní s SQL92/SQL3.
SQL, neboli strukturovaný dotazovací jazyk, byl původně navržen jako databázový jazyk určený pro komunikaci se SŘBD – systém řízení báze dat. První verze tohoto jazyka se objevila v polovině 70. let pod názvem SEQUEL a byla vyvinuta firmou IBM jako standardní jazyk pro přístup k první relační databázi provozované na jejich střediskových počítačích. Koncem 70. let byl název zkrácen na SQL, i když se dosud někdy ze zvyku vyslovuje „síkwl“.
O SQL bychom měli mluvit spíše jako o podjazyku, protože neobsahuje žádné prostředky pro manipulaci s obrazovkami a pro uživatelský vstup a výstup. Jeho hlavním účelem je poskytovat standardní metodu přístupu k databázi nezávisle na jazyku, v němž je napsána databázová aplikace.
PostgreSQL disponuje velkým množstvím SQL příkazů. Zde jsou vyjmenovány jen ty které jsem užil ve svých PHP scriptech.
|
SQL příkaz |
Popis příkazu |
Užití |
|
INSERT |
vložení věty (záznamu) |
INSERT INTO skip_data VALUES(10,
'Intel', 'Nový', 'cpu', 5500, 22) |
|
SELECT |
Výpis záznamů |
SELECT * FROM skip_data WHERE id=10 |
|
DELETE |
vymazání věty |
DELETE FROM skip_data WHERE id=10 |
|
UPDATE |
editace stávajícího záznamu |
UPDATE skip_data SET produkt='Intel,
popis='Nový', typ='cpu', |
|
|
|
cena_s_dph=5000, dph=22 WHERE id=10 |
tabulka 2: Užité SQL příkazy
Každého, kdo poprvé
uslyší název PHP, bude zajímat, co tato zkratka znamená. V době kdy
vzniklo mělo sloužit pouze jako nástroj pro tvorbu dynamických stránek jeho
autora, kterým je Rasmus Lerdorf,
v názvu se skrývá zkratka „Personal
Home Page“. Úplně první název byl PHP/FI, FI znamenalo jeho součást Forms Interpreter,
tedy formulářový interpret. Zpočátku bylo PHP jakým si souborem perlovských
scriptů, které usnadňovaly práci při tvorbě stránek. Známé také, jako dnes velmi
používané CGI[10]. Po delší
době bylo nutné zdrojové kódy přepsat do jazyka C a to z důvodů větvení
procesů perlu při velké zátěži www servru. Vznikl tedy program, který je
součástí serveru. Pro svou práci jsem zvolil server Apache, jehož součástí je
PHP3 verze 3.0.11.V součastné době se PHP velice rychle vyvíjí a
zdokonaluje, jeho obrovskou výhodou je přenositelnost scriptů na jiné
platformy, jak tomu bohužel není u komerčního ASP od Microsoftu. Řadí se do
skupiny programů s tvz. „open source code“ otevřeným zdrojovým kódem. Tato
skutečnost dává velký předpoklad tomu, že se PHP bude dále vyvíjet a
zdokonalovat, tím bude konkurovat komerčním produktům. Obsahuje velké množství
funkcí pro komunikaci s mnoha databázemi, což z PHP dělá výborný
nástroj pro tvorbu dynamických webovských stránek. V posledních dnech již
vyšla beta verze PHP4, která odstraňuje některé chyby předchozích verzí, ale
hlavně bude obsahovat mnoho nových možností, jako např. session proměnné, které
se doposud museli řešit pomocí externích knihoven jakou je PHPLIB.
PHP je tedy hypertextový procesor, pracující na straně serveru. Je to přesný opak JS[11], jež se provádí na straně klienta. Scripty se vepisují přímo do html souborů a jsou oddělené speciálním znakem <? a ?> Při odkazu na soubor.php3 se přenáší celý html kód tohoto souboru, ale část, která je oddělena speciální značkou se, vykoná PHP procesorem, ten na daný kód zareaguje a odešle ho jako výsledek, např. výpis dat z databáze po zadání dotazu.
Podrobný manuál a popis všech podporovaných funkcí, lze nalést na stránkách PHP. http://www.php.cz/manual/
K odlišení souborů se přijala přípona .phtml, dnes je častější .php3. Při konfiguraci Apache bude nutné provést patřičné změny v konfiguračním souboru httpd.conf.
#
# DirectoryIndex:
Name of the file or files to use as a pre-written HTML
# directory
index. Separate multiple entries with
spaces.
#
DirectoryIndex
index.html index.htm index.phtml index.pht index.php index.php3
Zde se web serveru říká, jaké má rozlišovat index soubory. To jsou soubory, které by měly být v adresáři, kde se nacházejí html dokumenty. Index je dokument, který si server načte jako první, ani jej nemusíte zapisovat do URL, např. www.cosi.cz = www.cosi.cz/index.php3
#
# For example, the PHP3 module (not part of the Apache
distribution - see
# http://www.php.net) will typically use:
#
AddType text/html .php3 .phtml .pht
AddHandler application/x-httpd-php3 .php3 .phtml .pht
.php .inc .ihtml
AddType application/x-httpd-php3-source .phps
A v této části se do httpd.conf přidává nový typ přípony, to proto, aby web server věděl na, které soubory se má aplikovat hypertextový procesor.
Ve firmě Skip s.r.o. se stanovovení cen provádí v MS Excel. Pro své účely jsem dostal k dispozici výběr z celkového ceníků. Ten jsem si převedl do textového souboru, to proto, abych mohl naplnit databázi skipdb v prostředí PostgreSQL. Druhá část práce je věnována vytvoření webovského rozhraní pro editaci záznamů v databázi.
Možností, jak
přenášet data, je několik. K exportu slouží např. program dbf2pg, který se o vše postará, bohužel tato
utilita mi nešla korektně zprovoznit, proto jsem volil poněkud složitější
cestu. Vyrobil jsem si pomocí unixových textových utilit, textový soubor, který
obsahuje SQL příkaz INSERT. Ukázka vypadá asi takto:
INSERT INTO skip_data VALUES (1,'Intel Pentium II 333A
MHz Celeron PPGA box, 128 kB cache','','cpu',3300,22);
Strukturu tabulky skip_data jsem volil, podle potřeb předloženého ceníku v Excelu.
CREATE TABLE skip_data (
id int4
NOT NULL,
produkt
text NOT NULL,
popis
text,
typ text
NOT NULL,
cena_s_dph
float4 NOT NULL,
dph int
NOT NULL;
PRIMARY KEY (ID)
);
Výsledný textový soubor po spojení pomocí cat soubor1.txt soubor2.txt > soubor3.txt vypadá takto:
CREATE TABLE
skip_data (
id int4 NOT NULL,
produkt text NOT NULL,
popis text,
typ text NOT NULL,
cena_s_dph float4 NOT NULL,
dph int NOT NULL;
PRIMARY
KEY (ID)
);
INSERT INTO
skip_data VALUES (1,'Intel Pentium II 333A MHz Celeron PPGA box, 128 kB
cache','','cpu',3300,22);
INSERT INTO
skip_data VALUES (2,'Intel Pentium II 366A MHz Celeron PPGA box, 128 kB
cache','','cpu',3600,22);
…
…
…
INSERT INTO
skip_data VALUES (137,'Jízdné technika
1 km','','prace',8,22);
INSERT INTO
skip_data VALUES (138,'Doba na
cestě, čekání, nakládání apod 1 hod.','','prace',100,22);
K naplněni db slouží psql –e skipdb < data.sql
Při vytváření tohoto textového souboru jsem užil příkazy cat, awk, tr. a to v této modifikaci:
cat cenik.txt | awk
'BEGIN{cr=1;FS="\t"}{print "INSERT INTO skip_data VALUES
("cr",\""$1"\",\""$2"\",\""$3"\","$4","$5");";cr+=1}'
| tr \" \' > create_table.sgl
Příkaz cat vypíše obsah souboru, cenik.txt,
roura provede přetečení dat do druhého programu awk, ten si
nastaví proměnou cr na hodnotu 1 a řekneme mu pomoci FS, že
standardním oddělovačem v textovém souboru je tabulátor, potom tiskme text
sql příkazu INSERT INTO skip_data VALUES(.
Další část nám vypisuje text, který je rozdělen do sloupců, nakonec inkrementujeme
proměnnou cr o 1. Dále se data opět předávají rouře a ta
je předá programu tr, který pouze zamění uvozovky za apostrofy,
to protože to syntaxe SQL vyžaduje. Potom se výsledek zapisuje jako standardní
výstup do textového souboru create_table.sql.
Pro rozvrhnutí této datové struktury tabulky skip_data jsem se rozhodl po shlédnutí souboru Cenik.xls.
|
Nazev položky |
Popis položky |
Datový typ |
|
id |
identifikační číslo produktu |
int4 |
|
produkt |
název - jméno produktu |
Text |
|
popis |
popis – technické parametry produktu |
Text |
|
typ |
Typ pro rozděleni do skupin výrobků |
Text |
|
cena_s_dph |
cena s připočtenou daní |
float4 |
|
dph |
Daň z přidané hodnoty |
Int |
tabulka 3: Struktura tabulky skip_data
Pro práci ve webovském prostředí je nutno zavést id, důvod je prostý. Musíme mít k dispozici nějakou hodnotu, pomocí které budeme pracovat s danou větou záznamu, např. výmaz nebo editace stávajícího záznamu. Pro textová pole zvolíme datový typ text, který není zcela vhodný, protože, co se týče rychlosti databáze – značně ji zpomaluje. Vzhledem k tomu, že do těchto polí se vepisují různě dlouhé řetězce, je datový typ text rozumnou volbou. Klíčovou položkou je typ pomocí kterého budeme dále rozdělovat produkty do jednotlivých kategorií.
Když budeme chtít, aby s databází mohl jakýkoliv uživatel pracovat, musíme mu to povolit. K tomu slouží již zmiňovaný manager psql a jeho příkaz grant. V psql je rozumě začleněn help. Když nevíme přesnou syntaxi, stačí zadat \h grant.
skipdb=> \h grant
Command: grant
Description: grant access control to a user or group
Syntax:
GRANT
privilege1, ...privilegeN ON rel1, ...relN TO
[PUBLIC|GROUP group|username]
privilege is ALL|SELECT|INSERT|UPDATE|DELETE|RULE
Protože budeme potřebovat nastavit práva pro uživatele nobody, pod kterým je spuštěn www server budeme muset práva zadat takto:
grant all on skip_data to nobody;
Příkaz \z nám vypíše tabulky a jejich nastavená práva.
Database = skipdb
+----------------+----------------------------------+
| Relation | Grant/Revoke Permissions |
+----------------+----------------------------------+
| skip_data |
{"=","nobody=arwR","malyl=arwR"} |
+----------------+----------------------------------+
skipdb=>
Před tím, než uživateli přiřadíme práva musíme ho ovšem vytvořit: createuser nobody. Uživatelé oprávněni pracovat s databází se zapisují do systémového souboru PostgreSQL pg_shadow.
Než začneme editovat stránky, budeme potřebovat nějaký rozumný html editor, pokud nechceme editovat pouze v normálním nejjednodušším editoru např. joe nebo notepad. Mým oblíbeným je HOMEsite od firmy Allaire, který má v sobě začleněnou podporu PHP, tím mám na mysli – umí rozlišovat jednotlivé příkazy PHP barevně. Díky tomu máme přehledně zobrazeny jednotlivé tagy a funkce. Tento software bohužel není pro OS Linux, proto jsem jej používal jen na Windows 95. Zde se objevil malý problém. Stránky, na kterých jsem pracoval se musely pokaždé přesunout pomoci FTP, na server, aby se mohly vykonat. Toto velice zpomalovalo mou práci. Naštěstí Linux umí pracovat se Sambou, což je protokol na kterém síťově komunikují Windows. Po zprovoznění této služby na straně Linuxu jsou vidět v síti Microsoft nabízené adresáře. Je tedy nutné, aby Linux měl v jádře podporu souborového systému smb. Pokud si nejsme jisti, zda máme či nemáme podporu tohoto filesystému, jedním příkazem si jej můžeme vypsat.
[root@skipix ~]# cat /proc/filesystems
ext2
msdos
vfat
nodev proc
nodev nfs
nodev smbfs
nodev ncpfs
iso9660
ntfs
nodev autofs
nodev devpts
Prvním předpokladem pro vytvoření rozhraní pro práci s databází je rozumným způsobem zajistit bezpečnost stránek. Tím mám na mysli, aby se k nim nemohl dostat neoprávněný uživatel z internetu. Pro zabezpečení jsem zvolil direktivu v Apache, o autentifikaci se stará modul mod_auth.c. Konfigurace se provede v konfiguračním souboru access.conf a vypadá následovně.
##
## access.conf -- Apache HTTP server configuration
file
##
<Directory
/home/httpd/html/skip_page/skipdb.adm>
require group zamestnanci
AuthType Basic
AuthName skipdb
AuthUserFile /etc/httpd/auth/users
AuthGroupFile /etc/httpd/auth/groups
</Directory>
V prvním řádku do direktivy zadáme, jakého adresáře se autentifikace týká a jaké skupiny jsou oprávněny k přístupu. Nejdůležitější je cesta k souboru, ve kterém jsou uložena jména oprávněných uživatelů a skupin. Při požadavku na daný adresář server požaduje po uživateli zadání uživatelského jména a hesla, tomu se děje v dialogovém okně vyvolaným prohlížečem.

obrázek 2: Okno autentifikace
Pro vytvoření uživatele je zapotřebí příkazu htpasswd –c, kterým můžeme přidat nového uživatele a zároveň mu nastavíme i heslo přístupu, nebo jen změnu hesla bez parametru -c. Můžeme použít i parametr –m, který zakriptujeme heslo pomocí MD5, což je nástroj k tomu určený.
[root@skipix conf]# htpasswd /etc/httpd/auth/users Jan.Kabrt
New password:
Re-type new password:
Updating password for user Jan.Kabrt
Obsah souboru users je velice podobný systémovému passwd, ale z důvodu bezpečnosti se web uživatele vytvářejí zvlášť.
Lukas.Maly:$apr1$Vy4cq/..$44k2EbhSQ7uLc0Bch9hQb0
Jan.Kabrt:$apr1$hBiOW...$GZbQpYlsRndpf6ZOL6Pzz/
Samotné PHP má v sobě též podporu pro autentifikaci. Z důvodů snadného zprovoznění jsem použil tento poměrně rychlý způsob na straně Apache.
Když máme prvně nainstalovaný PHP procesor, máme možnost velice rychle vyzkoušet, zda je procesor funkční. Existuje jedna velice jednoduchá funkce zvaná phpinfo(). Výsledkem je výpis všech proměnných, kterých je v PHP mnoho.
<? phpinfo() ?>
Toto je celý script, jeho výsledek vypadá - viz přílohy.
PHP je jednoduchý nástroj pro psaní interaktivních stránek. Syntaxe je velice podobná jazyku C. Disponuje základními datovými typy viz tabulka č. 4.
|
Datový typ |
Popis položkyPopis |
Rozsah |
|
Integer |
celé číslo |
-2147483648 do + 21477483647 |
|
Double |
desetinné číslo |
-1,7x10308 do +1,7x10308 |
|
String |
znakový řetězec |
Jakýkoliv text + escape sekvence |
|
Array |
Pole |
string + integer + double |
|
Object |
Objekt |
Vše |
tabulka 4: Datové typy.
Zdrojové scripty, které jsem vytvořil, jsou k nahlédnutí v části, zvané příloha, nebo na přiloženém CD. Dále se budeme zajímat pouze částmi kódu které považuji za zajímavé.
V souboru index se nachází funkce formDropDown, je uložena v make_select.php která elegantním způsobem usnadní práci při tvorbě rozbalovacího menu, pomocí formulářových značek <SELECT> … </SELECT>
Funkce má následující tvar viz níže. Tuto funkci jsem použil z veřejného archivu PHP scriptů „PX PHP Code Exchange“ na adrese http://px.sklar.com/ a poupravil jsem ji podle svých potřeb.
Na začátku samotné stránky je nutné připojit tuto funkci pomocí příkazu:
<? require "./make_select.php"; ?> který provede nahrání funkce – jako by byla součástí daného scriptu.
<?
/* formDropDown -
create an HTML <SELECT>
* vars: $name - the form variable NAME
*
$value - the SELECTED option
*
$labels - assoc. array, list of values=>labels
* returns: string, HTML (i.e. for use in echo
or print statement)
*/
function
formDropDown($name, $value, $labels, $size, $id, $style) {
$html = "<SELECT
SIZE=\"$size\" ID=\"$id\" STYLE=\"$style\" NAME=\"$name\">\n";
$key = key($labels);
while($key != "") {
if ($key == $value) {
$selected = "SELECTED";
} else{
$selected = "";
}
$html .= "<OPTION
VALUE=\"$key\" $selected>$labels[$key]\n";
next($labels);
$key = key($labels);
}
$html .= "</SELECT>\n";
return $html;
}
?>
Data, jež se vkládají do funkce zapisujeme následujícím způsobem, viz níže. Prvním parametrem je jméno proměnné formuláře option. Druhý parametr říká, která položka bude selected, tedy vybraná – označená kurzorem. Zde se nachází proměnná, která se naplní až po odeslání formuláře. Ten se odkazuje sám na sebe. Nejdůležitějším parametrem funkce je 3 parametr, jehož hodnoty jsou uložené v asociativním poli. Dalším je hodnota ID a v posledním parametru se nachází definice stylu. Tato funkce je užita skoro na všech výkonných scriptech. Pomocí select si vybereme proměnné, podle kterých se posléze dotazujeme v databázi, na jednotlivé druhy zboží.
<?
echo
formDropDown(table,"$table",array("cpu"=>"CPU",
"ram"=>"RAM",
"hddsegate"=>"HDD
Segate IDE",
"hddwd"=>"HDD Western DIGITAL",
"cdrom"=>"CD-ROM
Mitsumi, Teac",
"fdd"=>"FDD
mechaniky",
"klavesnice"=>"Klavesnice",
"multimedia"=>"Hardware
pro multimedia",
"gakcel"=>"Grafické
karty a akceleratory",
"grafikyoem"=>"Graficke
karty OEM",
"grafikyati"=>"Graficke
karty ATI",
"grafikymatrox"=>"Graficke
karty MATROX",
"grafiky3dfx"=>"Graficke
karty 3dfx",
"grafikydiamond"=>"Graficke
karty DIAMOND",
"scanery"=>"Scannery",
"monitoryyakumo"=>"Monitory
YAKUMO",
"monitorydaewoo"=>"Monitory
DAEWOO",
"monitoryadi"=>"Monitory
ADI",
"prace"=>"Prace"
),"5",
"", "background-color: $bgtabcolor2; font-weight: bold");
?>
Výsledkem je zdrojový kód který PHP vygeneruje a www server jej pošle prohlížeči.
<SELECT SIZE="5" ID="" STYLE="background-color: #5089BE; font-weight: bold" NAME="table">
<OPTION VALUE="cpu" >CPU
<OPTION VALUE="ram" >RAM
<OPTION VALUE="hddsegate" >HDD Segate IDE
<OPTION VALUE="hddwd" >HDD Western DIGITAL
<OPTION VALUE="cdrom" >CD-ROM Mitsumi, Teac
<OPTION VALUE="fdd" >FDD mechaniky
<OPTION VALUE="klavesnice" >Klavesnice
<OPTION VALUE="multimedia" >Hardware pro multimedia
<OPTION VALUE="gakcel" >Grafické karty a akceleratory
<OPTION VALUE="grafikyoem" >Graficke karty OEM
<OPTION VALUE="grafikyati" >Graficke karty ATI
<OPTION VALUE="grafikymatrox" >Graficke karty MATROX
<OPTION VALUE="grafiky3dfx" >Graficke karty 3dfx
<OPTION VALUE="grafikydiamond" >Graficke karty DIAMOND
<OPTION VALUE="scanery" >Scannery
<OPTION VALUE="monitoryyakumo" >Monitory YAKUMO
<OPTION VALUE="monitorydaewoo" >Monitory DAEWOO
<OPTION VALUE="monitoryadi" >Monitory ADI
<OPTION VALUE="prace" >Prace
</SELECT>
Aplikace je přístupná k nahlédnutí na této adrese. Je zapotřebí se autentifikovat jako uživatel: Lukas.Maly, pod heslem: praxe
http://www.slip.cz:888/skip_page_skipdb.adm/
Celá stránka vypadá viz obrázek 3.

obrázek 3: Výpis položek Disků Segate
Soubor index.phtml je zajímavý tím, že se odkazuje sám na sebe. V praxi to vypadá asi následovně. Po prvním spuštění se nám zobrazí menu, ve kterém si vybereme, kterou položku budeme editovat. Po odeslání se v URL[13] objeví za souborem index.phtml předávané proměnné.
index.phtml?table=cpu&orderby=cena_s_dph
Ty se opět předávají souboru index.phtml. Ten již nezobrazí jen úvod, ale vybraný typ produktů. O toto se nám stará příkaz if. Pokud proměnná $table neobsahuje nic, tak se zobrazí jen menu a když obsahuje cokoli, co bylo vybráno z menu vypisují se data z databáze.
@$spojeni = pg_Connect("", "",
"", "", "skipdb");
if (!$spojeni):
echo
"Nepodařilo se připojit k databázi.";
else:
Nejprve provedeme spojení s databází. skipdb, když se spojení nenaváže vypíše se o tom správa.
if ($table == ""): ?>
…
Úvodní stranka
…
<? elseif ($table != ""): ?>
…
Stránka ve které jsou vybrané jednotlivé produkty.
…
<?
$vysledek = pg_Exec($spojeni, "select * from skip_data where typ='$table' order by $orderby ");
if (!$vysledek):
echo "Chyba pri provadeni dotazu v databazi";
else:
?>
Proměnná $vysledek nabývá hodnoty 1 nebo 0, též
si pod těmito hodnotami můžeme představit true nebo false – pravda nebo
nepravda. Díky funkci pg_exec()
se zadává dotaz formou SQL příkazu. Jeho znění by se dalo chápat asi
takto: „Vyber všechny položky z tabulky skip_data, kde položka typ je
rovna proměnné obsahující vybraný typ, vybraná data třiď podle proměnné
orderby.“
<TR>
<TD
CLASS="datatytle">ID</TD>
<TD
CLASS="datatytle">Produkt</TD>
<TD
CLASS="datatytle">Popis</TD>
<TD
CLASS="datatytle">Cena s DPH</TD>
<TD
CLASS="datatytle">Cena bez DPH<//TD>
<TD
CLASS="datatytle">Sazba DPH</TD>
</TR>
Pro formátování textu jsem použil kaskádové styly dále CSS. Toto je tabulka která vypisuje názvy jednotlivých položek. Kaskádový styl definuje font, barvu písma a pozadí atd. Styly jsou definované v souboru main.css a do stránek se připojují následujícím způsobem.
<LINK
REL="stylesheet" HREF="./main.css"
TYPE="text/css" TITLE="Main">
<?
for ($i=0;
$i < Pg_NumRows($vysledek); $i++):
Zde začíná cykl for který vypíše tolik záznamů, kolik jich z databáze funkce Pg_NumRow() zjistí.
if (($i%2)==1) // sudé a liché řádky mají jinou barvu
echo
"<TR CLASS=\"datasud\">";
else
echo
"<TR CLASS=\"datalih\">\n";
Tato část provádí ony efektní sudé a liché řádky, které jsou pokaždé jinou barvou, jednoduše řečeno prohazujeme styly, které mají nadefinovanou jinou barvu pozadí.
echo
"<TD>".pg_Result($vysledek, "$i",
"id")."</TD>\n";
echo
"<TD>".pg_Result($vysledek, "$i",
"produkt")."</TD>\n";
echo
"<TD>".pg_Result($vysledek, "$i",
"popis")."</TD>\n";
echo
"<TD
CLASS=\"money\">".Number_Format(pg_Result($vysledek,
"$i","cena_s_dph"), $des_mist, ",",
"$tisice")." </TD>\n";
echo
"<TD
CLASS=\"money\">".Number_Format((pg_Result($vysledek,
"$i", "cena_s_dph") /
(100+(pg_Result($vysledek, "$i2",
"dph")))*100)
, $des_mist, ",", "$tisice")." </TD>\n";
echo
"<TD CLASS=\"money\">".pg_Result($vysledek,
"$i",
"dph")."</TD>\n";
echo
"<TD><FORM ACTION=\"smazani_norm.php3\">
<INPUT
TYPE=HIDDEN NAME=id VALUE=".pg_Result($vysledek,
"$i","id").">
<INPUT TYPE=submit
VALUE=\"Smazat\"
class=\"initial2\"></TD></FORM>";
echo
"<TD><FORM ACTION=\"editace_norm.php3\">
<INPUT TYPE=HIDDEN NAME=id
VALUE=".pg_Result($vysledek, "$i", "id").">
<INPUT
TYPE=Submit VALUE=\"Upravit\"
class=\"initial2\"></TD></FORM>";
echo
"</TR>\n";
endfor;
endif;
endif;
pg_Close($spojeni);
Tato poslední část souboru index.phtml provádí vypisování dat z databáze do html tabulky. Pro ukázku je to obr.3. Funkce Pg_NumRows() zjistí kolik záznamů odpovídá danému dotazu. Vypisování dat z databáze má na starosti funkce Pg_Result() začleněná do cyklu for. Prvním parametrem Pg_Result() je výsledek dotazu, druhým je číslo položky číslováno od 0. Posledním parametrem je jméno položky záznamu. Vše se zobrazuje pomocí příkazu echo, tím tiskneme jak html znaky, tak jednotlivá data čtená z databáze. Pro obraznost ukázka zdrojového html poslaného web serverem, PHP a PostgreSQL.
<table border="0"
cellspacing="0" cellpadding="2">
<TR>
<TD
CLASS="datatytle">ID</TD>
<TD
CLASS="datatytle">Produkt</TD>
<TD
CLASS="datatytle">Popis</TD>
<TD
CLASS="datatytle">Cena s DPH</TD>
<TD> CLASS="datatytle">Cena bez DPH<//TD>
<TD
CLASS="datatytle">Sazba DPH</TD>
</TR>
<TR CLASS="datalih">
<TD>26</TD>
<TD>SIMM 1MB x 9-80 (70) ns</TD>
<TD></TD>
<TD
CLASS="money">150,00 </TD>
<TD
CLASS="money">122,95 </TD>
<TD
CLASS="money">22</TD>
<TD>
<FORM
ACTION="smazani_norm.php3">
<INPUT
TYPE=HIDDEN NAME=id VALUE=26>
<INPUT
TYPE=submit VALUE="Smazat" class="initial2"></TD>
</FORM>
<TD>
<FORM
ACTION="editace_norm.php3">
<INPUT
TYPE=HIDDEN NAME=id VALUE=26>
<INPUT
TYPE=Submit VALUE="Upravit" class="initial2"></TD>
</FORM>
</TR>
<TR
CLASS="datasud"><TD>27</TD>
<TD>SIMM 4MB x 9-80 (70) ns
</TD>
<TD></TD>
<TD
CLASS="money">450,00 </TD>
<TD
CLASS="money">368,85 </TD>
<TD
CLASS="money">5</TD>
<TD>
<FORM
ACTION="smazani_norm.php3">
<INPUT
TYPE=HIDDEN NAME=id VALUE=27>
<INPUT
TYPE=submit VALUE="Smazat" class="initial2"></TD>
</FORM>
<TD>
<FORM
ACTION="editace_norm.php3">
<INPUT
TYPE=HIDDEN NAME=id VALUE=27>
<INPUT
TYPE=Submit VALUE="Upravit" class="initial2"></TD>
</FORM>
</TR>

obrázek 4: Výpis dvou řádku výsledku
Ze zdrojových kódů vyčteme, že cena bez DPH není záznamem v databázi, ale provádíme jí výpočtem z ceny s DPH a ze sazby DPH. A to pomocí jednoduchého vzorce.
CENA BEZ DPH = (CENA S DPH / (DPH +100)) * 100
Dále si můžeme všimnout funkce Number_Format(), jíž se formátuje cena dle našich potřeb. Např. tisíce jsou oddělené „.“ a nastavuje se v ní počet zobrazených desetinných míst.
Na www serveru jsou uloženy soubory napsané v PHP. Soubor index.phtml slouží k vybrání položky, kterou můžeme editovat nebo smazat. Chceme li jí smazat dojde k tomu kliknutím na button smaž. Formulář který toto provádí se odkazuje na soubor smaz_norm.php3. Tomuto souboru se přenáší proměnná nastavená pro smazání, tou je: smazani_norm.php3?id=150. ID jest jedinečné číslo, pomocí něhož se manipuluje se záznamy. Script na smazání vykoná připojení k databázi a funkce Pg_Exec(), jež obsahuje SQL příkaz, který zařídí výmaz věty z databáze skipdb.
$vysledek = pg_Exec($spojeni, "DELETE FROM
skip_data WHERE id = $id"); ?>
Zbývající část scriptu obsahuje staré známé html tagy, které jsou obdobné s index.phtml. Ostatní výkonné scripty jsem podrobně nerozepisoval, protože se v mnoha věcech podobají. K nahlédnutí jsou v přílohách, nebo na přiloženém CD.
Abych mohl demonstrovat mocnost PHP snažil jsem se udělat stránky které samy rozpoznají jakým prohlížečem na ně koukáme a podle toho odešlou jen tu část html kódu, kterou daný browser[14] umí zpracovat - zobrazit. K tomu se hodí horní menu. Svoje stránky jsem odlaďoval pomoci IE5, ten jak známo disponuje možností užití CSS[15]. Pomocí kaskádových stylů můžeme velice šikovně nadefinovat barvu fontu, barvu pozadí velikost písma v pixlech, atd. do externího souboru. Pomocí jednoduchého javascriptu vytvoříme velice efektní menu, které reaguje na přejetí a kliknutí myši a to bez jediného obrázku. Ale zde narážíme na problém. Starší verze prohlížečů CSS neumí. Bylo by velice nepříjemné, kdyby naše stránky nešly prohlížet ve starších browsrech. Řešením je jediná proměnná PHP a tou je HTTP_USER_AGENT, která nám identifikuje klienta, např. takto.
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)
<? if (eregi("MSIE 5.0",
$HTTP_USER_AGENT)): ?>
…
Pomocí této podmínky PHP odešle tento text pouze IE5.
…..
<? else: ?>
…
Tato část se odešle všem ostatním prohlížečům.
…
<? endif; ?>
Po vyhodnocení této podmínky se zobrazuje menu. Pro IE5 užijeme menu z kaskádových stylů.
![]()
obrázek 5: Menu pro IE5
Pro ostatní prohlížeče užijeme menu tvořené z buttonu, jež generuje PHP pomocí GD knihovny.
![]()
obrázek 6: Menu pro ostatní browsery
Místo odkazu na obrázek se odkazujeme na textový soubor obsahující následující zdrojový kód v jazyku PHP. Za názvem scriptu jsou jednotlivé proměnné, které ovlivňují vzhled gifu, např. barva, font, velikost.
./button.php3?s=20&text=Button&pozadi=ff0000&fonts=cetimes.ttf
<?
Header(
"Content-type: image/gif");
if(!isset($s))
$s=15;
if(!isset($fonts))
$fonts="cetimes.ttf";
if(!isset($text))
$text="PHP is COOL";
if(!isset($pozadi))
$pozadi="17618D";
$size =
imagettfbbox($s,0, "./fonts/$fonts",$text);
$dx = abs($size[2]-$size[0]);
$dy =
abs($size[5]-$size[3]);
$xpad=9;
$ypad=9;
require
"./functions.php";
hex2rgb($pozadi);
$im =
imagecreate($dx+$xpad,$dy+$ypad);
$color =
ImageColorAllocate($im, $r,$g,$b);
$black =
ImageColorAllocate($im, 0,0,0);
$white =
ImageColorAllocate($im, 255,255,255);
ImageRectangle($im,0,0,$dx+$xpad-1,$dy+$ypad-1,$black);
ImageRectangle($im,0,0,$dx+$xpad,$dy+$ypad,$white);
ImageTTFText($im,
$s, 0, (int)($xpad/2)+1, $dy+(int)($ypad/2), $black, "./fonts/$fonts", $text);
ImageTTFText($im,
$s, 0, (int)($xpad/2), $dy+(int)($ypad/2)-1, $white, "./fonts/$fonts", $text);
ImageGif($im);
ImageDestroy($im);
?>
Jestliže se za souborem button.php3 nezadají žádné proměnné, použijí se proměnné definované v úvodních 5 řádcích scriptu a vygeneruje se tento obrázek.
![]()
obrázek 7: Button.php3
Doposud jsme měli možnost editovat záznamy pouze pomocí prohlížeče, což je do jisté míry pomalé a neefektivní. Druhou možností by bylo napsat program např. v Delphi, který by uměl provést obdobné operace. Nutností by ovšem bylo nainstalování ODBC pro PostgreSQL, s jehož pomocí bychom mohli zpřístupnit unixovou databázi a její zdroje.
Jednodušším řešení je MS Office, jehož aplikace umí pracovat s ODBC, ale práce s nimi je též krkolomná. Excel umí velice snadno importovat tabulky z databáze skipdb, ale sám neumí editovat data v databázi. Spolupracuje s MS Query[16].
Opět se nám objevila nová anglická zkratka, která znamená „Open Database Conectivity – otevřené databázové spojení“ je to standard firmy Microsoft definující, jak aplikace Windows přistupují k databázovým datům. Výhodou je že pomocí ODBC se dá vytvořit datový tok mezi odlišnými platformami.
ODBC ovladač pro databázi PostgeSQL můžeme zdarma stáhnout z mirroru na Masarykově univerzitě v Brně: ftp://ftp.fi.muni.cz/pub/postgresql/odbc/. Protože Postgres je databáze, která se stále vyvíjí, proto se i ODBC ovladače neustále mění. V adresáři /versinos/ najdeme jednotlivé verze ovladačů. Instalace je prostá, ve Windows spustíme postdrv.exe. Po jejím skončení se ve složce /Ovládací panely/Zdroje ODBC/ objeví potřebný ovladač pro PostgreSQL.

obrázek 8: Zdroje ODBC ve Windows
Systémové DSN nám zajistí přístup k datům pro všechny uživatele. Každý zdroj je nutno definovat zvlášť. Jak je vidět na obrázku 6., přes ODBC se dá připojit např. k souboru vytvořeném v tabulkovému procesoru Excel, jako ke kterékoli jiné databázi. Každý ODBC ovladač má poněkud jiné volby, to záleží na tom pro jakou aplikaci je napsán. V ovladači pro PostgreSQL je nutno nastavit zdroj dat, tím je skipdb, dále server, na kterém se databáze nachází a uživatelské jméno popřípadě heslo. Na straně PostgreSQL je také nutno povolit jednotlivým uživatelům přístup. Tím mám na mysli IP adresu ze které je možno se připojit. To se provádí v souboru pg_hda.conf, tomuto souboru se také říká „host access control file – soubor řízení přístupu“. Podrobné informace o nastavení omezení jsou v tomto souboru zakomentované.

obrázek 9: Nastavení ODBC ovladače pro PostreSQL
Pokud chceme data importovat do Excelu, musíme v menu /data/Načíst externí data/Nový databázový dotaz/ vybrat potřebný ODBC ovladač, po spojení s databází jsou nám nabídnuty datové tabulky. Vybereme si kterou chceme, dále máme možnost zadat filtr pro výběr jen některých dat. Posléze se data naimportují do Excelu, do vybrané oblasti buněk, kde s daty můžeme provádět např. nějaké výpočty.
![]()
obrázek 10: Menu externí data
Jestliže chceme data změnit je to možné, ale jen v rámci Excela. Změna se neprojeví v SQL databázi. Pro tuto změnu je zapotřebí v panelu „externí data“ zadat úpravu dotazu, tím se nám spustí MS Query, ve kterém je již možno data editovat.

obrázek 11: MS Query
Další možností jak ceníky editovat, by bylo mít je uložené v MS Excelu nebo v MS Accessu a k nim přistupovat opět pomocí ODBC. Nevýhodou je velká nepružnost ODBC, lépe řečeno pomalost. Tyto obě varianty jsem zkoušel, ale dospěl jsem k názoru, že SQL databáze běžící pod OS typu UNIX je rychlejší. ODBC bych tedy nasadil pouze v případě nevelké zátěže.
Například u ODBC ovladače Excelu jsem narazil na malý problém. Když máme v Excelu uloženo nějaké číslo např. 5 a přeneseme jej na www stránku, pomoci PHP, z zcela nepochopitelných důvodu se přenese 5.0. Tím se vynořují problémy, které se musí obcházet, naštěstí je v PHP šikovná funkce Number_Format(), která tento nedostatek rychle odstraní.
|
ID |
Jmeno |
|
1 |
Lukáš |
|
2 |
Tomáš |
|
3 |
Jan |
|
4 |
Ivoš |
|
5 |
Luboš |
|
tabulka 5: Data z Excelu |
Toto je tabulka vytvořená v Excelu. Pro funkčnost propojení přes ODBC je nutno definovat název oblasti, se kterou se bude pracovat. To se provede v menu /Vložit/Název/Definovat/, vybereme datovou oblast, ve které první řádek obsahuje názvy položek. Oblast pojmenujeme např. zamestnanci1. Pod tímto názvem vytvoříme i zdroj ODBC. Obrázek č. 8. zobrazuje jednotlivé zdroje, které jsem užil pro ukázku. Obdobným způsobem jsem vytvořil tabulku v MS Accessu a uložil ji jako zamestnanci.mdb a vytvořil další zdroj ODBC zamestnanci2 s ovladačem pro Access.

obrázek 12: Výpis dat z Excelu a Accessu
Zdrojový kód v PHP je obdobný předchozímu scriptu index.phtml rozdílná je funkce ODBC_Result() a ODBC_Exec(). K prohlédnutí je v přílohách soubor odbc2.php.
V době mé čtyřměsíční praxe jsem se blíže seznámil s hypertextovým procesorem PHP a databází PostgreSQL. Toto propojení je podle mého názoru vhodné pro realizaci středně velkých projektů. V mnohém jsem se ujistil o pružnosti a rychlosti PHP a databáze. Při nasazování programů pro ukládáni jakýchkoliv informaci se musíme nejprve rozhodnout, jaké je poslání naší práce a jaké máme prostředky pro její realizaci. Prvním a zásadním předpokladem je znalost operačního systémem pod jakým budeme pracovat. Linux jest OS, který se může bezproblémů řadit mezi stabilní, konkurenceschopné systémy. V součastné době je pouze otázkou času, než se o kvalitách Linuxu přesvědčí více lidí.
Firma Skip s.r.o. využívá převáže produktů firmy Microsoft, proto se na databázi PostgreSQL patrně nebude přecházet. Diplomovou prací jsem se snažil ukázat možnost nasazení jiných produktů a aplikaci. Po jednání s vedením firmy se dospělo k závěru, že použití webovského rozhraní je použitelné, ale není dostatečně pružné, ve srovnání s MS Excel. Proto jsem se snažil firmě vyjít vstříc a udělal jsem vypisování dat z Excelovského souboru pomocí ODBC na firemní www server, tento script je k nahlédnutí v přílohách. Samotný ceník se nachází na přiloženém CD. Ukázka je na této adrese http://www.skip.cz/excel.php3 PHP lze tedy zprovoznit na WindowsNT, což jsem porovedl podle manuálové stránky http://www.php.cz/manual/. O těchoto podrobnostech se zde již zmiňovat nebudu, to proto, abych neodešel od původního tématu, kterým je Linux Apache a PostgreSQL.
[1] Satrapa, P. – Radmus, J. A.: Linux – Internet server, Neokortex spol. s.r.o., 1996, ISBN 80-902230-0-1
[2]
Linux doumentační projekt, Computer Press, 1998,
ISBN 80-7226-194-2
[3] Satrapa, P.: Web Design,. Neokortex spol. s.r.o., 1997, ISBN 80-902230-1-X
[4] Kosek, J.: PHP – Tvorba interaktivních internetových aplikací, Grada Publishing, spol.s.r.o., 1999, ISBN 80-7169-373-1
[5] Linhart, P. a kolektiv: APACHE & PHP-FI, Neokortex spol. s.r.o., 1998, ISBN 80-902230-2-8
[6] Salemi, J.: Databáze klient/server, UNIS publishing, 1993, ISBN 1-56276-070-X
[7] Lockhart, T,: PostgreSQL User’s Guide, PostgreSQL vývojový tým, 1998
|
ANSI |
American
National Standards Institute |
Americký
národní úřad pro normalizaci |
|
ASP |
Active
Server Pages |
Aktivní stránky serveru, Technologie firmy Microsoft, která umožňuje
zpracovat Java a Visual Basic scripty uložené v HTML
stránkách na serveru a klietovi odeslat výsledek. |
|
CD |
Compact
Disc |
Kompaktní
disk, Datové médium s optickým záznamem. Typicky má
průměr 12 cm, výjimečně 8 cm. |
|
CD-ROM |
Compact
Disc - Read Only Memory |
Kompaktní
disk - paměť pouze pro čtení, název formátu a technologie
záznamu dat na CD původně vyvinutý (firmou
Philips) pro záznam zvuku |
|
CGI |
Common
Gateway Interface |
Obecná
brána rozhraní, Označení pro rozhraní mezi WWW
serverem a jím spouštěnými programy na základě
požadavku z klienta (prohlížeče, browseru) služby WWW |
|
CSS |
Cascading
Style Sheets |
Kaskádované
styly, CSS jsou W3C standardem rozšiřujícím HTML
standard. Umnožňují pokročilé formátování na WWW
stránkách. |
|
DBMS |
DataBase
Management System |
Systém
řízení báze dat |
|
DOS |
Disk
Operating System |
Diskový
operační systém |
|
DSN |
Data Source
Name |
Jméno
zdroje dat, pojmenovaný zdroj dat zpřístupněný pomocí
ODBC. |
|
FDD |
Floppy Disc |
Pružný disk
Typický průměr 3,5' nebo starší 5,25' |
|
FTP |
File
Transfer Protocol |
Standard
Internetu, protokol aplikační úrovně pro přenos souborů. |
|
GNU |
GNU's Not
UNIX |
Rekurzivní
slovní hříčka, označení projektu vývoje volného
(bezplatného) operačního systému. |
|
GPL |
General
Public Licence |
Obecná
veřejná licence |
|
HDD |
Hard Disc |
Pevný disk,
medium k ukládání dat |
|
HTTP |
HyperText
Transfer Protocol |
Hypertextový
přenosový protokol, protokol používaný službou WWW
sítě Internet. |
|
HW |
HardWare |
Technické
vybavení počítače |
|
IBM |
International
Business Machines |
Jméno
firmy. |
|
ID |
IDentification |
Identifikátor
|
|
IE |
Internet
Explorer |
Průzkumník
Internetu, WWW prohlížeč (a další komponenty) fy
Microsoft. |
|
IP |
Internet
Protocol |
Protokol
Internetu, standardní síťový porotokol pro odesílání datagramů,
IP adresa např. 168.168.1.60 |
|
ISDN |
Integrated
Services Digital Network |
Digitální
komunikační síť s integrovanými službami |
|
ISP |
Internet
Services Provider |
Organizace
poskytující připojení k Internetu a jeho služby prostřednictvím
komutované nebo pevné linky pro své zákazníky. |
|
LDP |
Linux
Documentation Project |
Projekt
kompletující a zastřešující veškerou dokumentaci k systému
Linux. |
|
NFS |
Network
File System |
Sdílení
vzdálených souborů, protokol distribuovaného systému
souborů vyvinutý fy Sun Microsystems, Inc. |
|
ODBC |
Open
DataBase Connectivity |
Otevřené
databázové propojení, rozhraní vyvinuté fy Microsoft
pro jednotný přístup k relačním databázím pod Windows. |
|
OS |
Operating
System |
Operační
systém |
|
RAM |
Random
Access Memory |
Paměť s
libovolným (náhodným) výběrem (přístupem) |
|
RFC |
Request For
Comment |
Požadavek
na komentář, série vzestupně číslovaných dokumentů,
definicí služeb a protokolů, kde jsou publikovány standardy
Internetu. |
|
RPM |
RedHat
Package Manager |
Systém
evidující vazby SW komponen systému Linux distribuce
RedHat, mj. umožňuje deinstalaci SW balíků |
|
SCSI |
Small
Computer System Interface |
SCSI je její
ochranná známka |
|
SCSI |
Security
Control Systems, Inc. |
Jméno
společnosti |
|
SMB |
Server
Message Block |
Blok zprávy
serveru, protokol převádějící komunikační příkazy
počítače do příkazů konkrétního protokolu. |
|
SQL |
Structured
Query Language |
Strukturovaný
dotazovací jazyk |
|
SW |
SoftWare |
Programové
vybavení počítače |
|
URL |
Uniform
Resource Locators |
Jednotný
popis umístění zdroje, nejužívanější schéma specifikace
dokumentu (jeho umístění a typ) v Internetu. |
|
WWW |
World Wide
Web |
Celosvětová
síť (pavučina), distribuovaný soubor dokumentů v
Internetu, lze jej hypertextově prohledávat. |
obrázek 3: Výpis položek Disků Segate
obrázek 4: Výpis dvou řádku výsledku
obrázek 6: Menu pro ostatní browsery
obrázek 8: Zdroje ODBC ve Windows
obrázek 9: Nastavení ODBC ovladače pro PostreSQL
obrázek 12: Výpis dat z Excelu a Accessu
tabulka 3: Struktura tabulky skip_data
SKIP HARDWARE, s.r.o. http://www.skip.cz/
Jiří Kosek http://www.kosek.cz/
RedHat http://www.redhat.com/
Apache http://www.apache.org/
PHP hypertextový procesor http://www.php.net/ nebo mirror .cz
http://www.zend.com/
PostgreSQL http://www.pgsql.com/
Vývojová stránka PostgreSQL http://www.postgresql.org/
Free ODBC http://www.freeodbc.org/
PostgreSQL ODBC Driver (PsqlODBC) http://www.insightdist.com/psqlodbc/
Z důvodů velké objemnosti, nejsou zde vytištěny všechny scripty. Vše je dispozici v digitální podobě na přiloženém CD.
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1250">
<LINK
REL="stylesheet" HREF="./main.css"
TYPE="text/css" TITLE="Main">
<LINK
REL="stylesheet" HREF="./menu.css"
TYPE="text/css" TITLE="Main">
<LINK
REL="subsection" HREF="./javascripts.sh"
TYPE="text/javascript" TITLE="JS">
<title>SKIP HARDWARE- FIRMA - POČÍTAČE</title>
<? if (eregi("MSIE 5.0", $HTTP_USER_AGENT)):
?>
<script language="JavaScript"
src='./button_blic.js'></script>
<? endif; ?>
</head>
<?
require "./make_select.php";
$des_mist = 2;
$tisice = ".";
$tabulka = "";
$face = "Tahoma, Lucida Sans, MS Sans Serif, Arial
CE";
$fontcolor = "#3F90DA";
$bgtabcolor = "#17618D";
$bgtabcolor2 = "#3F90DA";
//$bgtabcolor2 = "#5089BE";
?>
<!-- 5089BE 17618D hexa hodnoty barvy pozadi -->
<? if (eregi("MSIE 5.0", $HTTP_USER_AGENT)):
?>
<BODY LEFTMARGIN="0" TOPMARGIN="0"
MARGINWIDTH="0" MARGINHEIGHT="0"
BGPROPERTIES="fixed" BACKGROUND="./img/bg_new.gif"
TEXT="000000" ONMOUSEDOWN="DepressButton();" ONMOUSEOVER="RaiseButton();"
ONMOUSEUP="RaiseButton();">
<? else: ?>
<BODY BGPROPERTIES="fixed"
BACKGROUND="./img/bg_new.gif" TEXT="000000" >
<? endif; ?>
<table border="0" width="100%">
<table
border="0" width="100%" cellpadding="0"
cellspacing="0">
<tr>
<td
width="33.3%" valign="top" align="left"
bgcolor="#FFFFFF"><font face="Arial Black"
size="-1"><?require
"./date1.php";?></font></td>
<td
width="33.3%" bgcolor="#FFFFFF"><p
align="center">
<? $size
="./img/skip.gif"; $gsize = GetImageSize($size); ?>
<img
src=<?echo $size;?> <?echo $gsize[3];?> alt="<?echo
$size;?>"><br>
<? if
($table == ""): ?>
<font face="Arial">NABÍDKA VÝPOČETNÍ
TECHNIKY</font></td>
<? else:
?>
<font face="Arial">Výpis
tabulky: <? echo $table;?></font></td>
<? endif;
?>
<td width="33.3%"
valign="top" align="right"
bgcolor="#FFFFFF"><font face="Arial Black"
size="-1"><?require
"./date2.php";?></font></td>
</tr></table>
<? if
(eregi("MSIE 5.0", $HTTP_USER_AGENT)): ?>
<script
language="JavaScript" src='./menu.js'></script>
<TABLE
BORDER="0" CELLSPACING="0"
CELLPADDING="0">
<TR>
<TD><A
HREF="index.phtml"><span buttonType="LeftNavChosen"
CLASS="LeftNavChosen">Index</span></a>
<TD><A HREF="novy.php3"><span
buttonType="LeftNav" CLASS="LeftNavOff">Nový
produkt</span></a>
<TD><A HREF="statistika.php3"><span
buttonType="LeftNav"
CLASS="LeftNavOff">Statistika</span></a>
<TD><A HREF="info.php3"><span
buttonType="LeftNav"
CLASS="LeftNavOff">Info</span></a>
<TD><A HREF="../hardware.phtml"><span
buttonType="LeftNav"
CLASS="LeftNavOff">Ceník</span></a>
</TR>
</TABLE>
<? else: ?>
<TABLE>
<TR>
<TD><A HREF="index.phtml"><IMG
SRC="./button.php3?s=15&fonts=cetimes.ttf&text=+++Index+++&pozadi=17618D"
border="0" alt="Index"></A></TD>
<TD><A HREF="novy.php3"><IMG
SRC="./button.php3?s=15&fonts=cetimes.ttf&text=Nový+produkt&pozadi=17618D"
border="0" alt="Nový produkt"></A></TD>
<TD><A HREF="statistika.php3"><IMG
SRC="./button.php3?s=15&fonts=cetimes.ttf&text=+++Statistika+++&pozadi=17618D"
border="0" alt="Statistika"></A></TD>
<TD><A HREF="info.php3"><IMG
SRC="./button.php3?s=15&fonts=cetimes.ttf&text=+++Info+++&pozadi=17618D" border="0" alt="Informace o
servru"></A></TD>
<TD><A HREF="../hardware.phtml"><IMG
SRC="./button.php3?s=15&fonts=cetimes.ttf&text=Stranka+pro+zakazniky&pozadi=17618D" border="0" alt="Stránka pro
zákazníky"></A></TD>
</TR></TABLE>
<? endif; ?>
<P
ALIGN="center"><IMG
SRC="./button.php3?s=30&fonts=cetimes.ttf&text=+++Ceník+platný+od+6.9.+do+12.9.1999+-+Týden+37/99+++&pozadi=17618D" border="0" alt="Cenik platny
..."></p>
<TABLE
BORDER="0" CELLPADDING="0" CELLSPACING="0">
<FORM
ACTION=index.phtml>
<TR>
<TD CLASS="selectmenu"> Vyberte položku
ceníku:</TD>
<TD
CLASS="selectmenu">Třídit podle:</TD>
<TD
CLASS="selectmenu"> </TD>
<? if (eregi("MSIE 5.0", $HTTP_USER_AGENT)):
?>
<TD
CLASS="selectmenu">Informace:</TD>
<? endif; ?>
</TR>
<TD>
<?
echo
formDropDown(table,"$table",array("cpu"=>"CPU",
"ram"=>"RAM",
"hddsegate"=>"HDD Segate IDE",
"hddwd"=>"HDD Western DIGITAL",
"cdrom"=>"CD-ROM
Mitsumi, Teac",
"fdd"=>"FDD
mechaniky",
"klavesnice"=>"Klavesnice",
"multimedia"=>"Hardware
pro multimedia",
"gakcel"=>"Grafické
karty a akceleratory",
"grafikyoem"=>"Graficke
karty OEM",
"grafikyati"=>"Graficke
karty ATI",
"grafikymatrox"=>"Graficke
karty MATROX",
"grafiky3dfx"=>"Graficke
karty 3dfx",
"grafikydiamond"=>"Graficke
karty DIAMOND",
"scanery"=>"Scannery",
"monitoryyakumo"=>"Monitory
YAKUMO",
"monitorydaewoo"=>"Monitory
DAEWOO",
"monitoryadi"=>"Monitory
ADI",
"prace"=>"Prace"
),"5",
"", "background-color: $bgtabcolor2; font-weight:
bold");
?>
</TD>
<TD
valign="top">
<? echo
formDropDown(orderby,"$orderby",array("id"=>"ID",
"produkt"=>"Produkt",
"popis"=>"Popis",
"cena_s_dph"=>"Cena s DPH",
"dph"=>"Sazba DPH"
),"1",
"", "background-color: $bgtabcolor2; font-weight:
bold");
?>
</TD>
<TD
VALIGN="top"><INPUT TYPE=submit
VALUE="vyber"></TD>
<? if (eregi("MSIE 5.0", $HTTP_USER_AGENT)):
?>
<TD BGCOLOR="<? echo $bgtabcolor2
?>">
<!--[if IE]>
<IE:Download ID="marqueedata"
STYLE="behavior:url(#default#download)" />
<marquee id="externalmarquee" direction=up
scrollAmount=1 style="width:250px;height:90px;border:2px solid
#C2BFA5;padding:10px" onMouseover="this.scrollAmount=1"
onMouseout="this.scrollAmount=3"
src="text.html"></marquee>
<script language="JavaScript"
src='./move_text.js'></script>
<![endif]-->
<? endif; ?>
</TD>
</TABLE>
</FORM>
<?
@$spojeni = pg_Connect("", "",
"", "", "skipdb");
if (!$spojeni):
echo
"Nepodařilo se připojit k databázi.";
else:
if ($table == ""): ?>
<P ALIGN="CENTER"><A
HREF="http://www.redhat.com/"><IMG
SRC="./img/poweredby1.gif" class="popshadow"
BORDER="0" ALT="[ Powered by Red Hat Linux ]"></A>
<P ALIGN="CENTER"><A HREF="http://www.php.cz/"><IMG
SRC="./img/big-logo1t.gif" class="popshadow"
BORDER="0" ALT="[ Powered by PHP3 ]"></A>
<P ALIGN="CENTER"><A
HREF="http://www.apache.org/"><IMG
SRC="/icons/apache_pb.gif" class="popshadow"
BORDER="0" ALT="[ Powered by Apache ]"></A>
<P ALIGN="CENTER">
<CENTER>
<TABLE CELLSPACING =0 CELLPADDING=0 BORDER=0>
<TR>
<TD><A
HREF="http://postgresql.org/"><IMG
SRC="./img/verh1.gif"
BORDER="0" ALT="[ Powered by PostgeSQL
]"></A></TD>
<TD><A
HREF="http://postgresql.org/"><IMG SRC="./img/verh2.gif"
BORDER="0" ALT="[ Powered by PostgeSQL
]"></A></TD>
</TR>
</TABLE>
</CENTER>
<? elseif ($table != ""): ?>
<TABLE BORDER="0" CELLSPACING="0"
CELLPADDING="2">
<?
$vysledek = pg_Exec($spojeni, "select * from
skip_data where typ='$table' order by $orderby ");
if
(!$vysledek):
echo "Chyba pri provadeni dotazu v
databazi";
else:
?>
<P
CLASS="small"><?echo "Nalezeno
".Pg_NumRows($vysledek).". záznamů.<BR>\n";?>
<TR>
<TD CLASS="datatytle">ID</TD>
<TD CLASS="datatytle">Produkt</TD>
<TD CLASS="datatytle">Popis</TD>
<TD CLASS="datatytle">Cena s
DPH</TD>
<TD CLASS="datatytle">Cena bez
DPH<//TD>
<TD CLASS="datatytle">Sazba DPH</TD>
<TD
CLASS="datatytle"> </TD>
<TD
CLASS="datatytle"> </TD>
</TR>
<TD></TD>
<?
for ($i=0; $i
< Pg_NumRows($vysledek); $i++):
if
(($i%2)==1) //
sudé a liché řádky mají jinou barvu
echo
"<TR CLASS=\"datasud\">";
else
echo "<TR CLASS=\"datalih\">\n";
echo "<TD>".pg_Result($vysledek,
"$i",
"id")."</TD>\n";
echo "<TD>".pg_Result($vysledek,
"$i", "produkt")."</TD>\n";
echo "<TD>".pg_Result($vysledek,
"$i",
"popis")."</TD>\n";
echo "<TD
CLASS=\"money\">".Number_Format(pg_Result($vysledek,
"$i",
"cena_s_dph"), $des_mist, ",",
"$tisice")." </TD>\n";
echo "<TD
CLASS=\"money\">".Number_Format((pg_Result($vysledek,
"$i",
"cena_s_dph") / (100+(pg_Result($vysledek,
"$i2",
"dph")))*100) , $des_mist, ",",
"$tisice")." </TD>\n";
echo "<TD
CLASS=\"money\">".pg_Result($vysledek, "$i",
"dph")."</TD>\n";
if
(eregi("MSIE 5.0", $HTTP_USER_AGENT)):
echo "<TD><FORM
onMouseover=\"change('#CC0000')\"
onMouseout=\"change('$bgtabcolor')\"
ACTION=\"smazani_norm.php3\">
<INPUT TYPE=HIDDEN NAME=id
VALUE=".pg_Result($vysledek, "$i","id").">
<INPUT TYPE=submit VALUE=\"Smazat\"
class=\"initial2\"></TD></FORM>";
echo "<TD><FORM
onMouseover=\"change('green')\"
onMouseout=\"change('$bgtabcolor')\"
ACTION=\"editace_norm.php3\">
<INPUT TYPE=HIDDEN NAME=id
VALUE=".pg_Result($vysledek, "$i", "id").">
<INPUT TYPE=Submit VALUE=\"Upravit\"
class=\"initial2\"></TD></FORM>";
echo "</TR>\n";
else:
echo "<TD><FORM ACTION=\"smazani_norm.php3\">
<INPUT TYPE=HIDDEN NAME=id
VALUE=".pg_Result($vysledek, "$i","id").">
<INPUT TYPE=submit VALUE=\"Smazat\"
class=\"initial2\"></TD></FORM>";
echo "<TD><FORM ACTION=\"editace_norm.php3\">
<INPUT TYPE=HIDDEN NAME=id
VALUE=".pg_Result($vysledek, "$i", "id").">
<INPUT TYPE=Submit VALUE=\"Upravit\"
class=\"initial2\"></TD></FORM>";
echo "</TR>\n";
endif;
endfor;
endif;
endif;
pg_Close($spojeni);
endif;
?>
</table border="0">
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
<HTML>
<HEAD>
<TITLE>Výpis
cen z Excelu pomoci ODBC</TITLE>
</HEAD>
<BODY>
<H3>Výpis
cen z Excelu pomoci ODBC</H3>
<?
require "./make_select.php";
$desmist = 2;
$descar = ",";
$odtis = ".";
echo "<TABLE>\n";
echo "<FORM
ACTION=excel.php3>";
echo "<TR>\n";
echo "<TD>\n";
echo formDropDown(table,
"$table", array(
"menu1"=>"-------
Zakladni desky ------------------------------------------------------------",
"deskyhuricane"=>"Zakladni
desky Huricane",
"deskybiostar"=>"Zakladni
desky BIOSTAR",
"iokarty"=>"I/O
Karty",
"skrine"=>"Sříně
- Case",
"menu2"=>"------
SCSI - ŘADIČE, HDD SCSI, HDD 2.5 -------------------------------------------",
"scsiadaptec"=>"Řadiče
SCSI Adaptec",
"hddscsisegate"=>"Pevné
disky SEAGATE SCSI 5 let záruka !!! CENY !!!",
"hdd25ibm"=>"Pevné
disky 2.5 IBM",
"menu3"=>"------
MYŠI, JOYSTICKY, DIGITIZERY-------------------------------------------------",
"geniusmouse"=>"Polohovací
zařízení GENIUS",
"ostatmouse"=>"Polohovací
zařízení MITSUMI, LOGITECH, MICROSOFT",
"digitizergenius"=>"Digitizéry
GENIUS",
"menu4"=>"------
MULTIMEDIA
-----------------------------------------------------------------",
"digfotoolympus"=>"Digitální
fotoaparáty OLYMPUS !!! C E N Y
!!!",
"digitvideo"=>"Zařízení
pro digitální video",
"avervideo"=>"AVER",
"aimslabvideo"=>"AIMS
LABS",
"menu5"=>"------
ZIP - JAZ, CD ROM, CD-R, CD-RW----------------------------------------------",
"zipjaz"=>"Výměnné
disky IOMEGA ZIP, JAZ",
"adrive"=>"Mechanika
a:DRIVE",
"cdrom"=>"CD
ROM NEC, NAKAMICHI, TEAC, SONY",
"dvdrom"=>"DVD
ROM",
"cdrcdrw"=>"CD-R,
CD-RW",
"transhdd"=>"TRANS
DISK HDD přes paralelní port",
"menu6"=>"------
Streamery ------------------------------------------------------------------",
"stramcolorado"=>"Streamery
COLORADO ( HP )",
"stramsegate"=>"Streamery
SEAGATE",
"cartridgestram"=>"Cartridge
pro streamery",
"menu7"=>"------
DAT streamery --------------------------------------------------------------",
"datstramhp"=>"DAT
streamery Hewlett-Packard",
"cartridgedat"=>"Cartridge
pro DAT streamery",
"menu8"=>"------
EDIMAX
---------------------------------------------------------------------",
"edimax"=>"Komponenty
sítí EDIMAX",
"menu9"=>"------
3COM - karty, huby, switche
------------------------------------------------",
"tricom"=>"Komponenty
sítí 3COM",
"menu10"=>"------
XIRCOM PC Cards a USB PortStation
----------------------------------------",
"xircom"=>"XIRCOM",
"menu11"=>"------
ENTREGA USB produkty
----------------------------------------------------",
"entrega"=>"ENTREGA",
"menu12"=>"------
SKYMASTER USB produkty
--------------------------------------------------",
"skymaster"=>"SKYMASTER",
"menu13"=>"------
ZÁLOŽNÍ ZDROJE, OCHRANY
---------------------------------------------------",
"upsapc"=>"Záložní
zdroje APC BACK, BACK PRO UPS",
"upsapcsmart"=>"Záložní
zdroje APC SMART UPS",
"menu14"=>"------
PRINT SERVERY INTEL -------------------------------------------------------",
"printservintel"=>"Externí
print servery INTEL",
"menu15"=>"------
H-P - karty
---------------------------------------------------------------",
"hpkarty"=>"Komponenty
TP sítí HEWLETT-PACKARD",
"menu16"=>"------
PRVKY KABELÁŽE TENKÝ
ETHERNET----------------------------------------------",
"bnc"=>"Materiál
pro sítě na tenkém Ethernet kabelu",
"ead"=>"EAD
komponenty neznačkové",
"menu17"=>"------
PRVKY STRUKTUROVANÉ KABELÁŽE ----------------------------------------------",
"utpmater"=>"Materiál
pro sítě na TP kabelu",
"utpkabel"=>"Prvky
strukturované kabeláže",
"utpskrin"=>"Skříně
19\' pro montáž TP rozvodů",
"utpzlab"=>"Kabelové
žlaby, krabice",
"work"=>"Práce",
"menu18"=>"------
FAX-MODEMY ----------------------------------------------------------------",
"faxmicrocom"=>"Fax
- modemy MICROCOM HOMOLOGOVÁNO",
"softcarbon"=>"Software
Carbon Copy MICROCOM",
"faxtricom"=>"Fax
- modemy 3COM - US Robotics HOMOLOGOVÁNO",
"faxmotorola"=>"Fax
- modemy MOTOROLA HOMOLOGOVÁNO",
"menu19"=>"------
INTERNET - ceny služeb
-----------------------------------------------------",
"komut"=>"Připojení
1 x PC komutovaně do 56 kbit/s, 1 x e-mail",
"lankomut"=>"LAN
komutovaně do 56 kbit/s, 1 x e-mail, statická IP adresa",
"isdn"=>"ISDN
připojení až 2 x 64 kbit/s, 3 x e-mail, možno i pro připojení sítě",
"pevline"=>"Připojení
drátovou pevnou linkou",
"bezdratomez"=>"Bezdrátové
připojení s omezením",
"bezdratbezomez"=>"Bezdrátové
připojení bez omezení",
"virtemail"=>"Virtuální
poštovní schránky, nutná vlastní doména",
"internet"=>"Ceny
za služby okolo INTERNETu",
"menu20"=>"------
TISKÁRNY STAR
--------------------------------------------------------------",
"printstar"=>"Tiskárny
STAR",
"prisstar"=>"Příslušenství
STAR",
"hwstar"=>"HW
úpravy tiskáren STAR orientační
ceny",
"menu21"=>"------
TISKÁRNY EPSON
-------------------------------------------------------------",
"printepson"=>"Tiskárny
EPSON",
"prisepson"=>"Příslušenství
EPSON",
"hwepson"=>"HW
úpravy tiskáren EPSON orientační
ceny",
"menu22"=>"------
TISKÁRNY, PLOTTERY HEWLETT-PACKARD
-----------------------------------------",
"printhp"=>"Tiskárny
Hewlet Packard",
"prishp"=>"Příslušenství
- paměti VIKING, printservery HP",
"plotterhp"=>"Plottery
HEWLETT-PACKARD",
"menu23"=>"------
TISKÁRNY APOLLO
------------------------------------------------------------",
"printapolo"=>"Tiskárny
APOLLO HP kompatibilní",
"menu24"=>"------
TISKÁRNY CANON
-------------------------------------------------------------",
"printcanon"=>"Tiskárny
CANON",
"menu25"=>"------
TISKÁRNY KYOCERA
-----------------------------------------------------------",
"printkyocera"=>"Tiskárny
KYOCERA",
"priskyocera"=>"Příslušenství
KYOCERA",
"menu26"=>"------
DISKETY, FILTRY
------------------------------------------------------------",
"fdd"=>"Diskety cena za 10 ks",
"filtr"=>"Filtry
před monitory",
"menu27"=>"------
PRO KYOCERA ----------------------------------------------------------------",
"spotrkyocera"=>"Spotřební
materiál KYOCERA",
"menu28"=>"------
PRO STAR, plottery HEWLETT-PACKARD
-----------------------------------------",
"spotrstar"=>"Spotřební
materiál STAR",
"prisplotterhp"=>"Příslušenství
pro plottery HEWLETT-PACKARD",
"menu29"=>"------
PRO EPSON, PANASONIC, CANON
------------------------------------------------",
"spotrepson"=>"Spotřební
materiál EPSON",
"spotrpanasonic"=>"Spotřební
materiál PANASONIC",
"spotrcanon"=>"Spotřební
materiál CANON",
"menu30"=>"------
PRO HEWLETT-PACKARD
--------------------------------------------------------",
"spotrhp"=>"Spotřební
materiál HP",
"menu31"=>"------
REFILL KITY H-P, CANON, EPSON
----------------------------------------------",
"refillkit"=>"Refill
kity pro inkoustové tiskárny",
"menu31"=>"------
OSTATNÍ PŘÍSLUŠENSTVÍ
------------------------------------------------------",
"kabely"=>"Kabely",
"box"=>"Boxy
a krabičky na diskety",
"doplnky"=>"Doplňky",
"menu32"=>"------
SOFTWARE - OS -------------------------------------------------------------",
"os"=>"Operační
systémy",
"osoem"=>"Operační
systémy, software OEM verze také viz aktuální ceník",
"menu33"=>"------ NOVELL
--------------------------------------------------------------------",
"novell"=>"Software
Novell",
"menu34"=>"------ SOFTWARE MICROSOFT
--------------------------------------------------------",
"microsoft"=>"Microsoft",
"menu35"=>"------ KOMUNIKAČNÍ SW
------------------------------------------------------------",
"sw602komun"=>"Software
602 - komunikační produkty",
"menu36"=>"------ SOFTWARE SW602
------------------------------------------------------------",
"sw602oem"=>"Software
602 OEM produkty",
"sw602"=>"Software
602",
"sw602progr"=>"Software
602 - programové balíky NOVÉ
CENY",
"menu37"=>"------
SOFTWARE GRISOFT
-----------------------------------------------------------",
"grisoft"=>"GRISOFT",
"menu38"=>"------
SOFTWARE ZONER
-------------------------------------------------------------",
"zonersw"=>"ZONER
SOFTWARE",
"menu39"=>"------
SOFTWARE LANGMASTER
--------------------------------------------------------",
"langmaster"=>"LANGMASTER
4.0",
"menu40"=>"------
SOFTWARE INFOMAPA PJSOFT
--------------------------------------------------",
"infomapa"=>"INFOMAPA
6.0",
"menu41"=>"------
SOFTWARE COREL
-------------------------------------------------------------",
"corel"=>"Corel",
"menu42"=>"------
SOFTWARE BORLAND ( INPRISE
)------------------------------------------------",
"borland"=>"Borland
( INPRISE )",
"menu43"=>"------
SOFTWARE LOTUS
-------------------------------------------------------------",
"lotus"=>"Lotus",
"menu44"=>"------
SOFTWARE SYMANTEC
----------------------------------------------------------",
"symantec"=>"Symantec",
"menu45"=>"------
TABELAČNÍ A XEROGRAFICKÝ PAPÍR
---------------------------------------------",
"tabelpapir"=>"Tabelační
papír samopropisující s boční
perforací",
"xerografpapir"=>"Xerografický
papír",
"menu46"=>"------
ŠTÍTKY A FÓLIE SAMOLEPÍCÍ --------------------------------------------------",
"rayfilm"=>"Etikety
samolepící RAYFILM ceny za 100
listů",
"menu47"=>"------
TRANSPARENTNÍ FÓLIE
-------------------------------------------------------",
"transfolie"=>"Transparentní
fólie RAYFILM ceny za 50 listů",
"menu48"=>"------
PAPÍRY PRO INK JET
--------------------------------------------------------",
"papirinkjet"=>"Papíry
pro inkoustové tiskárny RAYFILM ceny
za 50 nebo 100 listů",
"menu49"=>"------
Kopírky CANON, skartovačky -------------------------------------------------",
"kopirkycanon"=>"Kopírovací
stroje CANON",
"spotrkopirkycanon"=>"Spotřební
materiál pro kopírky CANON",
"skartgeha"=>"Skartovací
stroje GEHA",
"menu50"=>"------
Databanky, diáře, kalkulačky, diktafony ------------------------------------",
"diarcasio"=>"Databanky,
diáře CASIO",
"prisldiarcasio"=>"Příslušenství
pro diáře CASIO",
"kalkcasio"=>"Kalkulačky
s páskou CASIO",
"spotrkalkcasio"=>"Spotřební
materiál pro kalkulačky s páskou",
"menu51"=>"------
Telekomunikační technika
---------------------------------------------------",
"spotrtelekomunikace"=>"Spotřební
materiál pro telekomunikace",
"faxpapir"=>"Faxový
papír",
"menu52"=>"------
NOTEBOOKY COMPAQ
----------------------------------------------------------",
"compaqarmada1"=>"Notebooky
COMPAQ Armada 1500c + PC karta Microcom 56K",
"compaqarmada2"=>"Notebooky
COMPAQ Armada 1500c",
"compaqarmada3"=>"Notebooky
COMPAQ Armada 1750",
"priscompaq"=>"Příslušenství
a rozšíření pro notebooky COMPAQ",
"compaqprosignia"=>"COMPAQ
PROSIGNIA 31x - záruka 3 roky",
"compaqpresario"=>"COMPAQ
PRESARIO - multimediální sestavy",
"compaqpc"=>"COMPAQ
DESKPRO EP",
"priscompaqpc"=>"Příslušenství
a rozšíření pro PC COMPAQ",
"menu53"=>"------
NOTEBOOKY TOSHIBA
---------------------------------------------------------",
"toshibas2"=>"Notebooky
TOSHIBA Satellite 2xxx",
"toshibas4"=>"Notebooky
TOSHIBA Satellite 4xxx",
"toshibat8"=>"Notebooky
TOSHIBA Tecra 8000-xx",
"toshibap"=>"Notebooky
TOSHIBA Portégé x010",
"pristoshiba"=>"Příslušenství
a rozšíření pro notebooky TOSHIBA",
"menu54"=>"------
Brašny na NB DICOTA
------------------------------------------------------",
"brasny"=>"Brašny
na notebooky DICOTA"
));
echo "</TD>\n";
echo "<TD VALIGN=top><INPUT
TYPE=submit VALUE=vyber></TD>\n";
echo
"<TR></TABLE>\n";
if ($table == ""):
echo "<H5>Vyberte pollozku z
ceniku<H5>\n";
elseif ($table == "menu1" or
$table == "menu2" or $table
== "menu3" or $table == "menu4" or $table ==
"menu5" or $table ==
"menu6"
or $table == "menu7" or
$table == "menu8" or $table
== "menu9" or $table == "menu10" or $table ==
"menu11" or $table ==
"menu12"
or $table == "menu13" or
$table == "menu14" or $table
== "menu15" or $table == "menu16" or $table ==
"menu17" or $table ==
"menu18"
or $table == "menu19" or
$table == "menu20" or $table
== "menu21" or $table == "menu22" or $table ==
"menu23" or $table ==
"menu24"
or $table == "menu25" or
$table == "menu26" or $table
== "menu27" or $table == "menu28" or $table ==
"menu29" or $table == "menu30"
or $table == "menu31" or
$table == "menu32" or $table
== "menu33" or $table == "menu34" or $table ==
"menu35" or $table ==
"menu36"
or $table == "menu37" or
$table == "menu38" or $table
== "menu39" or $table == "menu40" or $table ==
"menu41" or $table ==
"menu42"
or $table == "menu43" or
$table == "menu44" or $table
== "menu45" or $table == "menu46" or $table ==
"menu47" or $table ==
"menu48"
or $table == "menu49" or
$table == "menu50" or $table
== "menu51" or $table == "menu52" or $table ==
"menu53" or $table ==
"menu54"
or $table == "menu55" or
$table == "menu56" or $table
== "menu57" or $table == "menu58" or $table ==
"menu59" or $table ==
"menu60"
):
/*
Reset($menu);
$skok = Count($menu);
echo $skok;
while(Current($menu)):
echo Key ($menu)."\n<BR>";
Next($menu);
endwhile;
for($i=0; $i
< Count($menu); $i++):
echo
$menu[$i];
endfor;
*/
echo
"<H5>Zvolil jste špatnou položku !!! <H5>\n";
elseif ($table
!= ""):
$spojeni =
ODBC_Connect("cenik", "", "");
$vysledek =
ODBC_Exec($spojeni, "SELECT * FROM $table");
if
(!$vysledek):
echo
"Došlo k chybě při zpracování dotazu v databázi.<BR>\n";
endif;
echo
"<TABLE BORDER=1 WIDTH=\"100%\">\n";
for ($i=0;
$i < ODBC_Fetch_Row($vysledek);):
echo
"<TR>\n";
if
(ODBC_Result($vysledek, "cena_s_dph")==0):
echo "<TD
ALIGN=\"left\">".ODBC_Result($vysledek,
"produkt")."</TD>\n";
else:
echo "<TD
ALIGN=\"left\">".ODBC_Result($vysledek,
"produkt")."</TD>\n";
echo "<TD
ALIGN=\"right\">".Number_Format(ODBC_Result($vysledek,
"cena_s_dph"), $desmist, $descar, $odtis)."</TD>\n";
echo "<TD ALIGN=\"right\">".Number_Format((ODBC_Result($vysledek,
"cena_s_dph") / (100+(ODBC_Result($vysledek,
"dph")))*100) , $desmist, $descar, $odtis)."</TD>\n";
echo "<TD
ALIGN=\"right\">".Number_Format(ODBC_Result($vysledek,
"dph"), 0, $descar, $odtis)."</TD>\n";
endif;
echo "
</TR>\n";
endfor;
ODBC_Close($spojeni1);
echo
"</TR></TABLE>\n";
endif;
?>
</BODY>
</HTML>
<HEAD>
<TITLE>Výpis jmen z
Excelu a Accessu pomoci
ODBC</TITLE>
</HEAD>
<BODY>
<H3>Výpis jmen z
Excelu a Accessu pomoci ODBC</H3>
<TABLE
BORDER="2">
<TR>
<TH>Excel</TH>
<TD>
<?
do {
$spojeni1 = ODBC_Connect("zamestnanci1",
"", "");
if (!$spojeni1):
echo "Nepodařilo se připojit ke zdroji
dat.<BR>\n";
break;
endif;
$vysledek1 = ODBC_Exec($spojeni1, "SELECT * FROM
zamestnanci1 ORDER BY ID");
if (!$vysledek1):
echo "Došlo k chybě při zpracování dotazu v
databázi.<BR>\n";
break;
endif;
while (ODBC_Fetch_Row($vysledek1))
echo
ODBC_Result($vysledek1, "ID")." ".
ODBC_Result($vysledek1,
"Jmeno")."<BR>\n";
ODBC_Close($spojeni1);
} while (false);
?>
</TD>
<TH>Access</TH>
<TD>
<?
do {
$spojeni2 = ODBC_Connect("zamestnanci2",
"", "");
if (!$spojeni2):
echo "Nepodařilo se připojit ke zdroji
dat.<BR>\n";
break;
endif;
$vysledek2 = ODBC_Exec($spojeni2, "SELECT * FROM
zamestnanci2 ORDER BY ID");
if (!$vysledek2):
echo "Došlo k chybě při zpracování dotazu v
databázi.<BR>\n";
break;
endif;
while (ODBC_Fetch_Row($vysledek2))
echo
ODBC_Result($vysledek2, "ID")." ".
ODBC_Result($vysledek2,
"Jmeno")."<BR>\n";
ODBC_Close($spojeni2);
} while (false);
?>
</TD>
</TR></TABLE>
</BODY>
</HTML>
by Rasmus Lerdorf, Andi Gutmans, Zeev Suraski, Stig Bakken, Shane Caraveo, Jim Winstead, and countless others.
System: Linux monkey
2.2.5-22 #1 Wed Jun 2 09:17:03 EDT 1999 i686 unknown
Build Date: Jul 21 1999
|
Extensions |
Additional
Information |
||||||||
|
PHP core |
CFLAGS=-g -O2 -O2 |
||||||||
|
Basic Functions |
No additional information. |
||||||||
|
PHP_DL |
Dynamic Library support enabled. |
||||||||
|
PHP_dir |
No additional information. |
||||||||
|
PHP_filestat |
No additional information. |
||||||||
|
PHP_file |
No additional information. |
||||||||
|
PHP_head |
No additional information. |
||||||||
|
Sendmail |
Path to sendmail: /usr/sbin/sendmail -t |
||||||||
|
Syslog |
No additional information. |
||||||||
|
PostgreSQL |
|
||||||||
|
Socket functions |
No additional information. |
||||||||
|
Regular Expressions |
Bundled regex library enabled |
||||||||
|
gd |
Version 1.3 with FreeType support |
||||||||
|
Apache |
APACHE_INCLUDE=-I../apache_1.3.6/src/include
-I../apache_1.3.6/src/os/unix |
||||||||
|
Crypt |
No additional information. |
||||||||
|
DBM |
This is GDBM version 1.7.3, as of May 19, 1994. |
||||||||
|
bcmath |
No additional information. |
||||||||
|
browscap |
No additional information. |
||||||||
|
PHP_pack |
No additional information. |
||||||||
|
PCRE |
Perl Compatible Regular Expressions
|
||||||||
|
Posix |
$ Revision: $ |
php3.ini file path is set to: /etc/httpd/conf
|
Directive |
Master Value |
Local Value |
|
arg_separator |
& |
& |
|
asp_tags |
0 |
0 |
|
auto_prepend_file |
/home/httpd/phplib/prepend.php3 |
/home/httpd/phplib/prepend.php3 |
|
auto_append_file |
|
|
|
browscap |
none |
none |
|
cgi_ext |
none |
none |
|
debugger.host |
none |
none |
|
debugger.port |
0 |
0 |
|
define_syslog_variables |
0 |
0 |
|
display_errors |
1 |
1 |
|
doc_root |
|
|
|
enable_dl |
1 |
1 |
|
engine |
1 |
1 |
|
error_log |
none |
none |
|
error_append_string |
none |
none |
|
error_prepend_string |
none |
none |
|
error_reporting |
7 |
7 |
|
extension_dir |
./ |
./ |
|
gpc_order |
GPC |
GPC |
|
ignore_user_abort |
0 |
0 |
|
include_path |
/home/httpd/phplib/ |
/home/httpd/phplib/ |
|
isapi_ext |
none |
none |
|
last_modified |
0 |
0 |
|
log_errors |
0 |
0 |
|
max execution time |
30 |
30 |
|
magic_quotes_gpc |
1 |
1 |
|
magic_quotes_runtime |
0 |
0 |
|
magic_quotes_sybase |
0 |
0 |
|
memory limit |
8388608 |
8388608 |
|
nsapi_ext |
none |
none |
|
open_basedir |
none |
none |
|
precision |
14 |
14 |
|
safe_mode |
0 |
0 |
|
safe_mode_exec_dir |
|
|
|
sendmail_from |
me@localhost.com |
me@localhost.com |
|
sendmail_path |
/usr/sbin/sendmail -t |
/usr/sbin/sendmail -t |
|
short_open_tag |
1 |
1 |
|
smtp |
localhost |
localhost |
|
sql_safe_mode |
0 |
0 |
|
track_errors |
0 |
0 |
|
track_vars |
1 |
1 |
|
upload_max_filesize |
2097152 |
2097152 |
|
upload_tmp_dir |
none |
none |
|
user_dir |
|
|
|
warn_plus_overloading |
0 |
0 |
|
xbithack |
0 |
0 |
|
browscap |
none |
none |
|
y2k_compliance |
0 |
0 |
|
input_charset |
none |
none |
|
charset_id |
charset |
charset |
|
hit_charset |
1 |
1 |
|
highlight_comment |
#FF8000 |
#FF8000 |
|
highlight_default |
#0000BB |
#0000BB |
|
highlight_html |
#000000 |
#000000 |
|
highlight_string |
#DD0000 |
#DD0000 |
|
highlight_bg |
#FFFFFF |
#FFFFFF |
|
highlight_keyword |
#007700 |
#007700 |
|
Variable |
Value |
|
INIT_VERSION |
sysvinit-2.74 |
|
previous |
N |
|
TERM |
linux |
|
HOSTTYPE |
i386 |
|
PATH |
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin |
|
CONSOLE |
/dev/console |
|
HOME |
/ |
|
PREVLEVEL |
N |
|
RUNLEVEL |
5 |
|
SHELL |
/bin/tcsh |
|
runlevel |
5 |
|
AUTOBOOT |
YES |
|
BOOT_IMAGE |
linux |
|
OSTYPE |
Linux |
|
SHLVL |
2 |
|
_ |
/bin/nice |
|
Variable |
Value |
|
PHP_SELF |
/phpinfo.php3 |
|
HTTP_COOKIE_VARS["charset"] |
windows-1250 |
|
Variable |
Value |
|
browser_charset |
windows-1250 |
|
CLIENT_CHARSET |
windows-1250 |
|
CZECH_INPUT_CP |
iso-8859-2 |
|
CZECH_OUTPUT_CP |
windows-1250 |
|
DOCUMENT_ROOT |
/home/httpd/html |
|
HTTP_ACCEPT |
*/* |
|
HTTP_ACCEPT_ENCODING |
gzip, deflate |
|
HTTP_ACCEPT_LANGUAGE |
cs |
|
HTTP_CONNECTION |
Keep-Alive |
|
HTTP_COOKIE |
charset=windows-1250 |
|
HTTP_HOST |
192.168.1.61:888 |
|
HTTP_USER_AGENT |
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt) |
|
ignore_charset |
iso-8859-1,utf-8 |
|
INPUT_CHARSET |
iso-8859-2 |
|
OUTPUT_CHARSET |
iso-8859-2 |
|
PATH |
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin |
|
REMOTE_ADDR |
192.168.1.60 |
|
REMOTE_PORT |
1643 |
|
SCRIPT_FILENAME |
/home/httpd/html/phpinfo.php3 |
|
SERVER_ADMIN |
you@your.address |
|
SERVER_NAME |
skipix.skip.cz |
|
SERVER_PORT |
888 |
|
SERVER_SIGNATURE |
Apache/1.3.6 Server at skipix.skip.cz Port 888
|
|
SERVER_SOFTWARE |
Apache/1.3.6 (Unix) (Red Hat/Linux) PHP/3.0.11 (CZ 0.29) mod_czech/3.1.0b4 |
|
URL_CHARSET |
windows-1250 |
|
GATEWAY_INTERFACE |
CGI/1.1 |
|
SERVER_PROTOCOL |
HTTP/1.1 |
|
REQUEST_METHOD |
GET |
|
QUERY_STRING |
|
|
REQUEST_URI |
/phpinfo.php3 |
|
SCRIPT_NAME |
/phpinfo.php3 |
|
HTTP Request
Headers |
|
|
HTTP Request |
GET /phpinfo.php3 HTTP/1.1 |
|
Accept |
*/* |
|
Accept-Encoding |
gzip, deflate |
|
Accept-Language |
cs |
|
Connection |
Keep-Alive |
|
Cookie |
charset=windows-1250 |
|
Host |
192.168.1.61:888 |
|
User-Agent |
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt) |
|
HTTP Response
Headers |
|
|
Vary |
User-Agent, Accept-Charset, User-Agent, Accept-Charset |
|
Keep-Alive |
timeout=15, max=100 |
|
Connection |
Keep-Alive |
|
Transfer-Encoding |
chunked |
|
Content-Type |
text/html; charset=windows-1250 |
This program is free software; you can redistribute it and/or modify
it under the terms of:
A) the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later version.B) the PHP License as published by the PHP Development Team and
included in the distribution in the file: LICENSEThis program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.
You should have received a copy of both licenses referred to here.
If you did not, or have any questions about PHP licensing, please
contact core@php.net.
[1] Linux dokumentační projekt
[2] File Transfer Protokol – též označení pro zdroj dat na jisté adrese např. ftp://ftp.data.cz
[3] Netvork File Systém – Síťové zdílení disků mezi OS Unix.
[4] Basic Input Output System
[5] Překlad „PostgreSQL User’s Guide“
[6] DMBS (SŘBD systém řízení báze dat)
[7] Překlad „PostgreSQL User’s Guide“
[8] Překlad „PostgreSQL User’s Guide“
[9] SQL strukturovaný dotazovací jazyk ( Structured Query Language )
[10] Common Gateway Interface – slouží k spuštění nějakého scriptu www servrem
[11] Java Script
[12] Databáze
[13] Uniform Resource Locator – obecná identifikující adresa viz RFC 1738
[14] odvozenina od anglického brows – prohlížet si.
[15] zkratka pro kaskádové styly
[16] Dotazovací nástroj firmy Microsoft – součást MS Excel