Hlavnß strßnka · DiskusnΘ F≤rum · PracovnΘ prφle₧itosti · Zoznam

 Main Menu
o Hlavnß strßnka
o Zoznam tΘm
o Zoznam
o OdporuΦte nßs
o U₧φvatelia
o VaÜe konto
o Pridaj Φlßnok
o ètatistiky
o Top 10

 Reklama


 Developer Zone's
o Internet
o Tools
o Linux
o CGI Zone
o ASP Zone
o ASP.net
o PHP Zone
o CSS Zone
o JavaScript
o MySQL
o WAP / WML
o WML / WMLScript
o XML / XHTML
o Tipy a triky
o Best of web
o WebServers
o WebDesign
o Grafika

 Servis
o Vyh╛adßvanie
o F≤rum
o Workoffice
o Zoznam Φlßnkov
o Reklama
o Pridaj Φlßnok
o Pridaj novinku

NapφÜte nßm
Homepage Do favoritov

 LinkExpres
Interval.cz · Pc.sk
Builder.cz · Mobilmania
PCSvet.cz · Asp.cz
Webdnes · Äiv∞.sk
Zoznam.sk · Atlas.sk
Inzine.sk · PHP.sk
Agent.sk · Lupa.cz
Code.box.sk · Root.cz
Pixel32 · Grafika.cz

 forum.developer.sk
o F≤rum ::
o Markup languages
o ScriptovΘ jazyky
o CGI
o PHP/MySQL
o Perl
o Grafika
o Webservery
o HTML Editory
o Browsery
o Bookmarx
o ASP
o Vytvor tΘmu ::

 PracovnΘ prφle₧itosti
o Pon·kate prßcu?
o H╛adßte prßcu?

 Autori developer.sk
o Martin NemeΦek
o SvΣ¥o Straka
o Jany Masaryk
o Jozef Murφn

 
CGI / Perl [ 13. December 1999] - Svato_Straka
Spracovanie vstupu - 5. Φas¥ CGI
V dneÜnej Φasti serißlu o CGI si povieme nieΦo o tom, ako spracova¥ vstupnΘ dßta ktorΘ u₧φvate╛ ak²mko╛vek sp⌠sobom odovzdß vßÜmu skriptu. Hne∩ na zaΦiatok je vÜak potrebnΘ upozornenie: v₧dy dobre skontrolujte dßta, ktorΘ vßm klient poÜle na vstup CGI skriptu.



Nikdy na ich zßklade nepoÜlite klientovi naspΣ¥ informßcie, ktorΘ m⌠₧u ovplyvni¥ bezpeΦnos¥ vßÜho servra!

CGI program m⌠₧e ako vstup prija¥ jeden z troch typov dßt:
  • informßcie o klientovi, servri a u₧φvate╛ovi
  • dßta z formulßra
  • dodatoΦnΘ informßcie o ceste

O prvom a tre¥om type vstupn²ch dßt sme si u₧ povedali, ₧e ich m⌠₧ete v CGI skripte pou₧i¥ ako premennΘ (premennΘ prostredia), resp. zφska¥ ich pomocou premenn²ch prostredia (info o ceste z premenn²ch PATH_INFO, PATH_TRANSLATED, DOCUMENT_ROOT a SCRIPT_NAME). V minulej Φasti sme si zasa povedali o formulßroch a o tom, akΘ dßta odovzdßvaj· skriptu, pozrime sa teraz teda na spracovanie t²chto dßt.

Pri odoslanφ dßt z formulßra sa tieto odoÜl· servru pomocou jednej z met≤d GET alebo POST v tvare nßzov_prvku=hodnota_prvku. Ak je formulßr tvoren² viacer²mi prvkami, jednotlivΘ dvojice prvok-hodnota bud· oddelenΘ znakom &, Φi₧e vstup bude vyzera¥ nasledovne:

prvok_1=hodnota_1&prvok_2=hodnota_2&...&prvok_n=hodnota_n

Dßta, ktorΘ prichßdzaj· na vstup skriptu m⌠₧u by¥ tvorenΘ ak²miko╛vek znakmi. Z pochopite╛nej prφΦiny s· teda znaky, ktorΘ nie s· pφsmenami Φi Φφslami zak≤dovanΘ do tvaru %XY, kde XY je hexadecimßlny ASCII k≤d danΘho znaku. U medzery sa m⌠₧e sta¥, ₧e nebude odovzdanß ako %20, ale ako znak + (plus). Aby ste sa nemuseli trßpi¥ s prßcnym nahrßdzanφm znakov vo vaÜom CGI skripte, Perl vßm na toto poskytuje prφkaz pack, ktor² vo vhodnom regulßrnom v²raze (o regulßrnych v²razoch si povieme v ∩alÜej Φasti, ke∩₧e ich budeme hojne vyu₧φva¥) zamenφ tieto ASCII k≤dy za prφsluÜnΘ znaky. Spomφnan² regulßrny v²raz vyzerß nasledovne:

$vstupne_data =~ s/%([dA-Fa-f][dA-Fa-f])/pack ("C", hex ($1))/eg;

Aby ste zabezpeΦili aj prevod znakov + na medzery, je potrebnΘ vlo₧i¥ pred tento reg. v²raz eÜte jeden:

$vstupne_data =~ tr/+/ /;

Spomφnal som tu met≤dy POST a GET, pomocou ktor²ch odovdßva klient dßta na vstup skriptu. Met≤du ktorß mß by¥ pou₧itß zadßvate v atrib·te METHOD tagu FORM. Ak² je medzi t²mito dvoma met≤dami rozdiel?

Met≤da GET preberß dßta z premennej prostredia QUERY_STRING. Je defaultnou met≤dou pou₧φvanou pri naΦφtavanφ dßt do CGI skriptu. Ke∩ teda zavolßte skript pomocou URL
http://www.mojserver.sk/cgi-bin/skript.cgi?vstup=data
, na naΦφtanie t²chto dßt sa pou₧ije met≤da GET, ktorß ulo₧φ do premennej $ENV{QUERY_STRING} re¥azec vstup=data.

Met≤da POST posiela dßta na vstup CGI skriptu pomocou ÜtandardenΘho vstupu. Pri naΦφtanφ dßt zo Ütand. vstupu musφte skriptu poveda¥, ko╛ko dßt (v bajtoch) mß naΦφta¥. Toto samozrejme neviete vopred urΦi¥ (napr. v prφpade, ke∩ u₧φvate╛ posiela z formulßru odkaz, ktor² svojφm skriptom spracovßvate). Ak si vÜak spomφnate, existuje premennß prostredia s nßzvom CONTENT_LENGTH, ktorß obsahuje prßve ve╛kos¥ vstupn²ch dßt.

Nasleduje perlovsk² skript, ktor² vyu₧φva vÜetko, Φo sme si doteraz povedali. Sprac·va vstup jednoduchΘho formulßra, ktor²m je u₧φvate╛ vyzvan² na zadanie mena. Zistφ met≤du, ktorou s· dßta odovzdßvanΘ, preΦφta dßta, dek≤duje ich a na ich zßklade vygeneruje dokument, ktor² u₧φvate╛a pozdravφ (ako prφklad vhodnΘ :).

$metoda = $ENV{REQUEST_METHOD};
if ($metoda eq "GET") {
    $data = $ENV{QUERY_STRING};
} else {
    read (STDIN, $data, $ENV{CONTENT_LENGTH});
}

($nazov, $meno) = split(/=/, $data);
$meno =~ tr/+/ /;
$meno =~ s/%([dA-Fa-f][dA-Fa-f])/pack ("C", hex ($1))/eg;
print "Content-type: text/plain";

if (!$meno) {
    print "Aj ke∩ si sa nepredstavil, vitaj!";    
} else {
    print "Vitaj $meno!";
}

Pozrite si ako to vyzerß v praxi.

Myslφm ₧e pochopi¥ tento prφklad nie je zlo₧itΘ, tak₧e zdr₧φm sa vysvet╛ovania.

Ako som u₧ s╛·bil, nabud·ce si povieme o regulßrnych v²razoch, ktorΘ s· jednou z najsilnejÜφch zbranφ Perlu.

 
 PrφsluÜnΘ odkazy k tΘme
Viac o tΘme: CGI / Perl | InΘ Φlßnky od: Admin | PoÜli komentßr | Strßnka vhodnß na tlaΦ width=15 height=11  PoÜli tento Φlßnok priate╛ovi, znßmemu width=15 height=11


NajΦφtanejÜie Φlßnky CGI / Perl:
╚o je to CGI? - ┌vod do CGI

╧alÜie Φlßnky v rubrike CGI / Perl:

 

"Spracovanie vstupu - 5. Φas¥ CGI" | Login / vytvor konto | 0 Komentßrov
Prah
Za obsah komentßrov je zodpovedn² u₧φvate╛, nie prevßdzkovate╛ t²chto strßnok.



AutorskΘ prßva: á ⌐1999 - 2001 Developer Zone [developer@developer.sk]

VÜetky Φlßnky s· vlastnφctvom autorov Developer Zone. VÜetky prßva vyhradenΘ. Strßnky Developer.sk s· vytvorenΘ pomocou PHP-Nuke.
Odkazy na novΘ Φlßnky je mo₧nΘ prebera¥ pomocou:Backend.php.