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.