WWW -sivuja voidaan käyttää käynnistämään ohjelmia palvelimella. Näin sivuja voidaan käyttää myös tietojen keräämiseen asiakkailta. Käytän tässä tarvittavista apuohjelmista nimeä script. Ohjelman voi kirjoittaa melkeimpä millä tahansa käytettävissä olevalla ohjelmointikielellä. Yleisimmin kuitenkin käytetään PERL :ä, joka on erityisen sopiva merkkisyötteen käsittelyyn.
Tämä sivu sisltää lähinnä yleisen pikaohjeen kaavakkeiden käyttöön.
Jos haluat perehtyä perusteellisemmin HTML -kaavakkeiden käyttöön, suosittelen
linkkejä:
www.w3.org
ja
W3 schools
.
EsimerkkiEsimerkissä käytetään html-sivua testi.html sekä Perlillä kirjoitettua scriptiä test.cgi , joka sijaitsee hakemistossa /home/httpd/cgi_bin ja jonka ajo-oikeudet ovat '605'. Tiedoston omistaa luuseri:users. Luuseri on serverissä kirjoilla oleva käyttäjä. Scriptin pitää sijaita määrätyssä hakemistossa. Esim Linuxissa käytetään yleensä hakemistoa /home/httpd/cgi-bin . Tämä polkumäärittely pitää tarkastaa WEB-palvelimen asetustiedostosta. Apachelle /etc/apache/httpd.conf :ssa ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"Tiedoston ensimmäisellä rivillä kerrotaan käyttöjärjestelmälle käytettävä komentotulkki. '#' saa rivin näyttämään kommentilta
Ylläolevassa esimerkissä
|
#!/usr/bin/perl
#270105 ptmusta @ utu.fi
#----------------------------------------------------------
#Ohjelma ottaa vastaan minkä tahansa taulukon, irrottaa siitä
#avain - arvo -parit ja tallettaa ne tiedostoksi, jossa
#ensimmäisellä rivillä on otsikkona lueteltu avaimet ja sitä seuraavilla
#arvot pilkuilla erotettuina ja lainausmerkeillä petattuina.
#Sarakkeiden lukumäärä eli kaavakkeen syötepisteiden määrä on
#rajoittamaton.
#Tässä muodossa data siirtyy suoraan comma delimited -muodossa esim EXCEL:llä
#käsiteltäväksi.
#Comma delimited:n hyväksyvät useimmat taulukkolaskenta- ja
#kortistoohjelmat
#Kaksoissyöttöä ei tarkisteta, joten asiakas pystyy syöttämään saman
#datan moneen kertaan
#Myös virhetarkastelu puuttuu kokonaan.
#----------------------------------------------
#Tiedosto, johon data talletetaan:
$file="DATA.LOG";
#Luetaan WWW-serverin lähettämä kaavake
read(STDIN,$kaavake,$ENV{'CONTENT_LENGTH'});
#Tämä tarvitaan jotta WWW-serveri osaa tulostaa
#CGI:ltä saamansa materiaalin:
## print "Content-type: text/shtml\n\n"
print '<html><body>';
#Tämä kuuluu mukaan vaikkei olekaan täysin välttämätön :)
print "Kiitos tiedoista<br>";
#----------------------------------------------
#KÄSITTELYJÄRJESTYS ON TÄRKEÄ !
#serveriltä tulevassa kaavakkeessa =&+ ovat koodattuna hexaksi,
#joten hex-alpha-koodaus tehdään viimeisenä, kun nämä merkit on jo
#käsitelty !
#Palautetaan '+':t välilyönneiksi:
$kaavake =~ s/\+/ /g;
#irroitetaan alkiot eli avain=syote -parit toisistaan. (Tehdään vektori)
@alkio = split(/&/,$kaavake);
#Käsitellään kaikki @alkio-taulukon avain-arvo -parit
foreach $pari(@alkio){
#Jaetaan nimi avaimeksi ja arvoksi:
($avain,$arvo) = split(/=/,$pari,2);
#Muutetaan %xx heksoista alphoiksi:
$avain =~ s/%(..)/pack("c",hex($1))/ge;
$arvo =~ s/%(..)/pack("c",hex($1))/ge;
#Tulostetaan shtml-sivulle asiakkaan iloksi:
print "$avain = $arvo <br>";
#Luodaan merkkijonot, jossa on pilkut ja lainausmerkit mukana:
$avaimet = $avaimet . $komma . '"' . $avain . '"';
$arvot = $arvot . $komma . '"' . $arvo . '"';
#Estetään pilkun tuleminen jonon ensimmäiseksi tai viimeiseksi
#merkiksi antamalla kommalle arvo vasta 1. kierroksen jälkeen:
$komma = ',';
};
print"< /body> < /html>"
#-------------Se siitä shtml-sivusta----------------------------
#Kirjoitetaan käsitelty kaavake tiedostoon
open (LOKIFILE, ">>$file");
@status=stat(LOKIFILE);
#Tämä osa huolehtii siitä, että tiedoston alkuun tulee avaimien nimet vain, jos tiedosto on tyhjä: if($status[7] == 0){
print LOKIFILE "$avaimet\n";};
# Talletetaan varsinaiset datat:
print LOKIFILE "$arvot\n";
close (LOKIFILE);
#------------------This is the end !-----------------------