home *** CD-ROM | disk | FTP | other *** search
- <HTML>
- <HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1250">
- <META NAME="GENERATOR" CONTENT="Mozilla/4.02 [en] (Win95; I) [Netscape]">
- <META NAME="Author" CONTENT="Tomas Rosa">
- <TITLE>Vstup dat</TITLE>
-
- <!--#include virtual="/perl_header.inc"-->
-
- <h3>Jak zpracovat zasφlanß data</h3>
-
- Jak ji₧ bylo uvedeno v²Üe, skript m∙₧e dostat dv∞mi metodami. Ka₧dß
- metoda mß svΘ v²hody a nev²hody. Prvnφ metodou je GET. Mezi jejφ v²hody
- pat°φ to, ₧e ze starny prohlφ₧eΦe se dß pou₧φt u jekΘhokoliv odkazu. VÜechna
- data se tedy zasφlajφ p°ipojenß k URL. Jednotlivß polφΦka jsou p°edßna
- ve form∞ <I>nßzev=hodnota</I> a jsou odd∞lena znakem "<B> &</B>".
- Aby to bylo slo₧it∞jÜφ, jsou specißlnφ znaky vyskytujφcφ se v hodnotßch
- prom∞nn²ch zak≤dovßny nßsledujφcφm zp∙sobem: </P>
-
- <UL>
- <LI>" " (mezera) - je k≤dovßna jako znak "+" </LI>
-
- <LI>interpunkΦnφ znamΘnka apod. - jsou k≤dovßny jako "%hh", kde
- hh je dvoucifernß hexadecimßlnφ hodnota ASCII k≤du znaku </LI>
- </UL>
-
- <P>áááJednotlivΘ prohlφ₧eΦe se mφrn∞ liÜφ v tom, kterΘ znaky k≤duji, ale
- uvedenß pravidla platφ obecn∞. Pro dek≤dovßnφ tedy staΦφ v²skyty znaku
- "+" nahradit mezerami a v²skyty kombinacφ "%hh" nahradit
- znakem s p°φsluÜn²m ASCII k≤dem. Snadno tedy dek≤dujeme °et∞zec: <I>Ahoj%20lidi%21</I>.
- Data jsou k URL p°ipojovßny na konec pomocφ znaku "?". Adresa
- pak tedy m∙₧e vypadat nßsledovn∞: </P>
-
- <CENTER><P><I>http://www.server.cz/cgi-bin/mujskript.cgi?polozka1=data1&polozka2=data2.</I></P></CENTER>
-
- <CENTER><P> </P></CENTER>
-
- <P>áááMetoda GET je vÜak nevhodnß z n∞kolika d∙vod∙. Nap°φklad pokud po₧adujeme
- jmΘno a heslo, tak to je pak viditelnΘ v URL. Tak₧e ka₧d² kdo se koukne
- n∞komu p°es rameno, uvidφ tyto informace. Druhou nev²hodou je to, ₧e prohlφ₧eΦe
- nepodporujφ nekoneΦnΘ URL a proto i data nejsou omezenß.</P>
-
- <P>áááOproti tomu metoda POST tyto metody odstr≥uje. Nev²hodou je vÜak
- to, ₧e data v₧dy musφ pochßzet z formulß°e. Nelze je tedy zaslat nap°φklad
- z odkazu.</P>
-
- <P>áááJako p°φklad zde uvßdφme Φßst programu, kter² Φte data do pole $DATA{'<FONT SIZE=-1>nßzev
- polo₧ky</FONT>'} jak z volßnφ metodou POST tak GET</P>
-
- <UL>
- <UL>
- <PRE><B>sub <I>ctidata
- </I></B>{
- read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
- if ($ENV{'QUERY_STRING'}) {$buffer = "$buffer\&$ENV{'QUERY_STRING'}";}
- @pairs = split(/&/,$buffer);
- foreach $pair (@pairs) {
- ($name,$value) = split(/=/,$pair);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- <B>$DATA{$name}</B> = $value;
- }
- }</PRE>
- </UL>
- </UL>
-
- <!--#include virtual="/main_footer.inc"-->