Apache a CGI skripty IV. - metoda GET

Dnes si probereme dekódování dat z HTML formuláře metodou GET.
Dnes si probereme dekódování dat z HTML formuláře metodou GET. Metodu poznáte podle toho, že na rozdíl od metody POST po vás nechce žádné další potvrzení odkliknutého formuláře a za jménem CGI skriptu v políčku URL www prohlížeče je seznam proměnných a parametrů.

Funkčnost
Po odkliknutí HTML formuláře se klient (www prohlížeč) spojí s CGI skriptem a automaticky odešle data.

Parametry Apache
Pro zjištění typu poslání dat z formuláře použijeme parametr REQUEST_METHOD , který nám může říct, že se jedná buďto o metodu POST, GET či PUT (zbylé dvě metody si popíšeme příště). Další důležitý parametr je QUERY_STRING, ve kterém jsou uložena odeslaná data. Tvar těchto dat si však server trochu přizpůsobil, takže jej budeme muset dekódovat.

HTML formulář
Vysvětlení parametrů formuláře je v předchozím článku.

Nyní umístěte tento HTML formulář někam na váš www server, například do C:\Program Files\Apache Group\Apache\htdocs\cgi5.html ($HOME/apache/share/htdocs/cgi5.html). Z pohledu serveru je to URL http://localhost/cgi5.html

Příklad HTML formuláře

<HTML>
  <HEAD>
  <TITLE>Formular CGI SKRIPTU 5</TITLE>
  </HEAD>
  <BODY BGCOLOR=#FFFFFF>
  
  <H1>Formular CGI SKRIPTU 5</H1>
  
  <FORM ACTION=/cgi-bin/cgi5.cgi METHOD=GET>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr1 VALUE="/Program Files/Apache Group/"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr2 VALUE="jedna dve tri"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr3 VALUE="hodnota3"><BR>
   <INPUT TYPE=TEXT SIZE=20 NAME=parametr4 VALUE="hodnota 4"><BR>
  
   <INPUT TYPE=SUBMIT VALUE="OK - Odeslat data">
   <INPUT TYPE=RESET VALUE="Vymazat formular">
  </FORM>
  
  </BODY>
  </HTML>
  

CGI skript
Dole je uvedený cgi skript, kterým můžeme dekódovat data z výše uvedeného formuláře. Stačí pokud si CGI skript uložíte do svého adresáře pro CGI skripty. V našem případě je to adresář C:\Program Files\Apache Group\Apache\cgi-bin\cgi5.cgi ($HOME/apache/share/cgi-bin/cgi5.cgi). Z pohledu serveru je to URL http://localhost/cgi-bin/cgi5.cgi

Verze CGI skriptu pro Linux/Unix je stejná jako zde uvedený příklad pro Windows, stačí pouze upravit první řádek skriptu. #!/usr/bin/perl

Popis CGI skriptu:

#popis1 – skript zjistí pomocí parametru REQUEST_METOD, zda-li se jedná o metodu GET či POST a podle toho zajistí dekódování dat. Metoda POST jej popsaná v předchozím článku, takže se zaměříme na metodu GET. Pokud bychom CGI skriptu poslali metodu PUT (pro upload souboru na server), tak ohlásí chybu (kterou máme ošetřenou v popisu 3), jelikož tento skript není na to připraven.

Vezme se řetězec, který je vidět ve Výsledku CGI skriptu v neupravených datech (viz dole) a postupně se nejdříve rozdělí do pole podle znaku & (ampresand), čímž získáme data typu promenna=hodnota , ale data stále nejsou upravená.

#popis2 – vezmeme řetězec promenna=hodnota ,kterou jsem si dekódovali a v hodnotě proměnné nahradíme znak + (plus) znakem “ “ (mezera). Dále nahradíme hexadecimální znaky jako je %2F znakem “/” (lomítko), atd.

#popis3 – výpis chybového hlášení na obrazovku

#popis4 – tisk dekódovaných a upravených parametrů

Příklad CGI skriptu

#!/perl/bin/perl.exe
  
   # popis 1
   if ($ENV{'REQUEST_METHOD'} eq 'GET') {
   @dve = split(/&/, $ENV{'QUERY_STRING'});
   } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   @dve = split(/&/, $buffer);
   } else { &error('request_method');
   }
  
   # popis 2
   foreach $druhy (@dve) {
   ($jmeno, $hodnota) = split(/=/, $druhy);
   $hodnota =~ tr/+/ /;
   $hodnota =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $hodnota =~ s/<!--(.¦\n)*-->//g;
   $promenna{$jmeno} = $hodnota;
   }
  
   # popis 3
   sub error {
   print "Content-type: text/html\n\n";
   print "<HTML>";
   print "<TITLE>Chyba</TITLE>";
   print "<H2>Chyba: Dekodovani dat neni provadeno metodou";
   print " POST ani GET</H2>";
   print "</HTML>";
   exit;
   }
  
  # popis 4
  print "Content-type: text/html\n\n";
  print "<HTML><HEAD><TITLE>CGI SKRIPT 5</TITLE></HEAD>\n";
  print "<BODY BGCOLOR=#FFFFFF>\n";
  
  print "<H2>CGI SKRIPT 5</H2>";
  print "<BR>Parametr 1: $promenna{'parametr1'} ";
  print "<BR>Parametr 2: $promenna{'parametr2'} ";
  print "<BR>Parametr 3: $promenna{'parametr3'} ";
  print "<BR>Parametr 4: $promenna{'parametr4'} ";
  
  print "<BR><BR>Neupravena data: $ENV{'QUERY_STRING'}";
  print "</BODY></HTML>\n";
  exit;
  

Výsledek CGI skriptu
Parametr 1: /Program Files/Apache Group/

Parametr 2: jedna dve tri

Parametr 3: hodnota3

Parametr 4: hodnota 4

Neupravena data:

parametr1=%2FProgram+Files%2FApache+Group%2F¶metr2=jedna+dve+tri&parametr3=hodnota3&parametr4=hodnota+4

Příště si ukážeme jak načítat data z obyčejného textového souboru a zobrazit je v HTML stránce. Pokud máte jakékoliv dotazy či připomínky zasílejte jej na adresu erik@email.cz
  

Váš názor Další článek: Internetové obchody zaznamenaly vánoční šílenství

Témata článku: , , , , , , , , , , , , , , , ,