|
|||||||||||
Jak zpracovat zasílaná dataJak 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ě název=hodnota a jsou oddělena znakem " &". 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:
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: Ahoj%20lidi%21. Data jsou k URL připojovány na konec pomocí znaku "?". Adresa pak tedy může vypadat následovně: http://www.server.cz/cgi-bin/mujskript.cgi?polozka1=data1&polozka2=data2.
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á. 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. Jako příklad zde uvádíme část programu, který čte data do pole $DATA{'název položky'} jak z volání metodou POST tak GET sub ctidata { 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; $DATA{$name} = $value; } } |
|||||||||||
![]() |
|||||||||||
|