#!/usr/bin/perl -w -T # tilaukset.cgi # ohjelma ottaa vastaan kuvitteellisia ostoksia ja laskee tuotteittain # summan, lukumäärän ja keskihinnan # Toimii esimerkkinä tapauksesta jossa lomakekenttien nimissä # pitää viedä mukana lisätietoja # (c) Tommi Lahtonen 7.3.2006 use strict; use CGI; my $query = new CGI; print "Content-type: text/plain\n\n"; #Tallennetaan ensin kaikki output.txt-tiedostoon my $OUTFILE; open($OUTFILE, ">>output.txt") or die "Can't open output.txt: $!"; $query->save($OUTFILE); close $OUTFILE; #luetaan seuraavaksi kaikki output.txt:hen tallennetut my $INFILE; open($INFILE, "output.txt") or die "Can't open output.txt: $!"; my %hinta; my %lkm; # käydään tiedosto läpi yksi lomake kerrallaan while ( !eof($INFILE) ) { $query = new CGI($INFILE); my $tuote; # käydään läpi jokaisen lomakkeen kentät foreach my $p ( $query->param() ) { # jos kentän nimi alkaa tuote_ niin tiedetään että kyseessä on tuote if ( index($p, "tuote_") == 0 ) { # otetaan varsinainen tuotteen nimi talteen $tuote = substr($p, 6); # jos löytyy lkm_-alkuinen kenttä samalle tuotteelle # niin otetaan siitä lukumäärä muuten lukumäärä on yksi my $maara = $query->param('lkm_' . $tuote); if ( !$maara ) { $maara = 1; } # jos tuotetta on ollut aiemmin kasvatetaan vanhaa hintaa # muussa tapauksessa asetetaan annettu hinta if ( $hinta{$tuote} ) { $hinta{$tuote} += $query->param($p) * $maara; $lkm{$tuote} += $maara; } else { $hinta{$tuote} = $query->param($p) * $maara ; $lkm{$tuote} = $maara; } } } } foreach my $p ( keys %hinta ) { print $p . ":" . $hinta{$p} . "\t"; print "lkm: " . $lkm{$p} . "\t"; print "keskihinta: " . $hinta{$p}/$lkm{$p} . "\n"; }