Obsah

 

Obsah. 1

Úvod. 2

Něco o firmě Skip Hardware s.r.o. 2

Věcný problém tvorby ceníků. 3

Požadavek na technické vybavení 3

Potřebný SOFTWARE. 4

Potřebný HARDWARE. 4

Co je operační systém.. 4

Historie operačního systému Unix. 5

Historie operačního systému Linux. 6

Dnešní podoba operačního systému Linux. 7

Kompilace jádra. 7

Instalace operačního systému Linux – distribuce RedHat 8

Instalace web serveru Apache. 9

Databáze PostgreSQL. 11

Krátká historie Postgresu. 11

Postgres95. 12

PostgreSQL. 12

Instalace PostgeSQL. 12

SQL. 13

SQL a PostgreSQL. 14

PHP3. 14

Ceníky - plnění db pomoci jednoduchých textových utilit 16

Datová strukrůra db. 17

Práva pro užití db. 18

Webovské rozhraní 19

První script  v PHP. 21

index.phtml 21

Spojení s databází – výpis dat 24

Jak to vlastně  funguje?. 27

Menu. 28

Aplikační řešení 29

ODBC.. 30

Excel jako editor 32

Zobrazení dat z Excelu a Accessu. 33

Závěr 35

Seznam použité literatury: 36

Slovníček. 37

Seznam obrázků: 39

Seznam tabulek: 39

Seznam odkazů: 39

Přílohy. 40

Soubor: index.phtml 40

Soubor: excel.php3. 43

Soubor: odbc2.php. 47

Soubor: phpinfo.php3. 48

 

Úvod

 

„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í.

Něco o firmě Skip Hardware s.r.o.

 

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í.

Věcný problém tvorby ceníků

 

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.

Požadavek na technické vybavení

 

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

 

Potřebný SOFTWARE

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

 

Potřebný HARDWARE

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.

 

Co je operační systém

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.

 

Historie operačního systému Unix

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ů.“

 

Historie operačního systému Linux

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.

 

Dnešní podoba operačního systému Linux

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.

 

Kompilace jádra

 

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

Instalace operačního systému Linux – distribuce RedHat

 

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.

 

Instalace web serveru Apache

 

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.

Databáze PostgreSQL

 

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.

 

Krátká historie Postgresu[5]

 

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.

 

Postgres95[7]

 

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í:

 

PostgreSQL[8]

 

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.

 

Instalace PostgeSQL

 

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

 

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.

 

SQL a PostgreSQL

 

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

 

PHP3

 

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.

 

Ceníky - plnění db[12] pomoci jednoduchých textových utilit

 

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.

 

Datová strukrůra db

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í.

 

Práva pro užití db

 

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.

 

Webovské rozhraní

 

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.

 

První script  v PHP

 

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é.

 

index.phtml

 

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.

 

Spojení s databází – výpis dat

 

@$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.

 

Jak to vlastně  funguje?

 

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.

 

Menu

 

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

 

Aplikační řešení

 

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].

 

ODBC

 

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

 

Excel jako editor

 

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í.

 

Zobrazení dat z Excelu a Accessu

 

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

Závěr

 

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.

 

 

 

 

 

 

 

 

 

 

Seznam použité literatury:

 

[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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Slovníček

 

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Seznam obrázků:

 

obrázek 1:Logo firmy RH.. 4

obrázek 2: Okno autentifikace. 20

obrázek 3: Výpis položek Disků Segate. 24

obrázek 4: Výpis dvou řádku výsledku. 27

obrázek 5: Menu pro IE5. 28

obrázek 6: Menu pro ostatní browsery. 29

obrázek 7: Button.php3. 29

obrázek 8: Zdroje ODBC ve Windows. 31

obrázek 9: Nastavení ODBC ovladače pro PostreSQL. 32

obrázek 10: Menu externí data. 32

obrázek 11: MS Query. 33

obrázek 12: Výpis dat z Excelu a Accessu. 34

 

Seznam tabulek:

 

tabulka 1: Užitý software. 4

tabulka 2: Užité SQL příkazy. 14

tabulka 3: Struktura tabulky skip_data. 18

tabulka 4: Datové typy. 21

tabulka 5: Data z Excelu. 33

 

Seznam odkazů:

 

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/

 

 

 

 

 

 

Přílohy

 

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.

 

Soubor: index.phtml

 

<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">&nbsp;</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">&nbsp;</TD>

<TD CLASS="datatytle">&nbsp;</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>

 

Soubor: excel.php3

<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>

 

Soubor: odbc2.php

 

<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>

 

Soubor: phpinfo.php3

 

PHP Version 3.0.11

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

Extensions

Additional Information

PHP core

CFLAGS=-g -O2 -O2
HSREGEX=yes

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

Allow persistent links:

Yes

Persistent links:

0/Unlimited

Total links:

0/Unlimited

Compilation definitions:

PGSQL_INCLUDE=@PGSQL_INCLUDE@
PGSQL_LFLAGS=@PGSQL_LFLAGS@
PGSQL_LIBS=@PGSQL_LIBS@

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
APACHE_TARGET=../apache_1.3.6/src/modules/php3
Apache Version: Apache/1.3.6
Apache Release: 10306100
Apache API Version: 19990320
Hostname/port: skipix.skip.cz:888
User/Group: nobody(99)/99
Max Requests: per child: 30    keep alive: on    max per connection: 100
Timeouts: connection: 300    keep-alive: 15
Server Root: /etc/httpd
Loaded modules: mod_php3, mod_czech, mod_setenvif, mod_auth, mod_access, mod_rewrite, mod_alias, mod_userdir, mod_speling, mod_actions, mod_imap, mod_asis, mod_cgi, mod_dir, mod_autoindex, mod_include, mod_info, mod_status, mod_negotiation, mod_mime, mod_mime_magic, mod_log_config, mod_env, http_core

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

PCRE library version:

2.05 21-Apr-1999

Posix

$ Revision: $


Configuration

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


Environment

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


PHP Variables

Variable

Value

PHP_SELF

/phpinfo.php3

HTTP_COOKIE_VARS["charset"]

windows-1250


Apache Environment

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 Headers Information

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 


PHP License

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: LICENSE
 
This 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 the
GNU 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.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Poznámky

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



[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 Users Guide

[6] DMBS (SŘBD systém řízení báze dat)

[7] Překlad „PostgreSQL Users Guide

[8] Překlad „PostgreSQL Users 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