Egyszerű virtuális áruház

Szerver oldali programozás Perl nyelven

Perjés László Perjés László, 1999. augusztus 13. 22:23
Manapság divatos boltot nyitni az Interneten. Ha eltekintünk attól, hogy ennek sikere elsősorban stratégiai kérdés, megvizsgálhatjuk, milyen technikai feltételek szükségesek egy virtuális üzlethez.
Többféle módszer terjedt el az áruk megrendelését illetően. Van olyan, ahol több lapon keresztül gyűjtögethetjük az árut, és akár később is visszatérhetünk fizetni vagy rendelni, most azonban egy olyan, egyszerű Perl nyelvű megoldást mutatunk be, amely egyszerre egy tetszőleges HTML-oldalt is feldolgoz.

Első lépésként el kell készíteni azt az űrlapot, ahol vagy bejelölhető a kiválasztott áru, vagy beírható a kívánt mennyiség egy szövegmezőbe. Itt használni fogjuk azt az űrlapelem-típust, amely adatot ad át a feldolgozó programnak, de az oldalon nem jelenik meg. Ez az adat tartalmazza majd az árat. Sorszámozni fogjuk, hogy ne keveredhessen össze a be nem jelölt, illetve meg nem rendelt árukkal. Nézzünk egy olyan példát, ahol mind a checkboxos, mind a szövegmezős változatot használjuk:


[…]
Áru 1

Az első űrlapelem (checkbox) "name" paramétere közömbös, a "value" viszont legyen egyenlő a megvásárolható mennyiséggel. Fontos, hogy a rejtett (hidden) űrlapelem közvetlenül a mennyiséget tartalmazó mező után kerüljön, így olyan elemek is beszúrhatók, amelyek nem kerülnek majd kiszámításra a végösszeg megállapításánál. A rejtett elem "name" paraméterének utolsó karaktereit egyesével felfelé kell sorszámozni a keveredés elkerülése miatt. A fenti példában a "mycgi" alkönyvtárban található "hshopbuy.cgi" lesz a Perl nyelvű feldolgozóprogram. Ennek analógiájára következzen egy olyan példa is, ahol a kívánt mennyiséget a látogató írja be:

darab.

[…]

A módszer előnye, hogy a fenti szabályok betartásával egy tetszőleges felépítésű oldalban bármennyi megvásárolható elemet bárhol felsorolhatunk. Az űrlaphoz tartozó Perl-scripttel két lépésben dolgozzuk fel a látogató által bevitt adatokat. Az elsőnél a következőket tesszük: szokásos módon megadjuk a szükséges útvonalakat, beállítjuk a MIME fájltípust és fejlécet, valamint hátteret definiálunk, megköszönjük az üzenetet, amelynek tartalmát alatta egy táblázatba foglaljuk:

#!/usr/local/bin/perl5
push (@INC, '/cgi-bin');
print "Content-type: text/html\n\n";
print "Check the form!";
print '';
print '

Köszönjük üzenetét!


';
print '

Kérjük ellenőrizze le mégegyszer mielőtt postázza!
';
print '';
print "";
print '";
if ($vegar != 0){
print '>td bgcolor=#ffaaee align="center">';
print "
Összeg: $vegar Forint.

"; }
print "
$FORM{'subject'}
';
print '';

A szóban forgó Perl-program kimenetét feldolgoztatjuk egy második Perl-programmal, ezért nyitunk egy új formot amit a "getform.cgi"-vel fogunk kiértékelni a végösszeg elfogadása után, és definiálunk néhány változót:

$ar = 0;
$i = 1;
print '';

Kiolvassuk a HTML-űrlap tartalmát, és addig olvassuk, amíg van feldolgozandó adat:

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairsx = split(/&/, $buffer);
foreach $pairx (@pairsx) {
($name, $value) = split(/=
/, $pairx);
$value =~ tr/+/ /;B $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;B $value =~ s/~!/ ~!/g;

Ha az adatbeviteli mező tartalma nem "0", és nem is üres, akkor elkezdjük a feldolgozást:
if ($value ne "" && $value ne "0"){

Definiálunk egy változót, amibe elmentjük az éppen aktuális árat tartalmazó mezőnevet ($valt), egy másikban pedig azt figyeljük, van-e az oldalban olyan mező, amely árat tartalmaz ($ar1), és az árat tartalmazó mezőt megszorozzuk a látogató által beírt mennyiséggel ($ar):
$valt = "Value_$i";
$ar1 = substr($name, 0, 6);
$ar = $FORM{"$valt"} * $value;

Ha a mező nem árat tartalmaz, akkor egyszerűen kiírjuk egy táblázat cellájába a mező nevét, és értékét:

if ($ar1 ne "Value_"){
print "

";
$tartalom = "$value";
$tartalom1 = "";

Ha a mező árat tartalmaz, és az nem egyenlő nullával, akkor megszorozzuk a mennyiséggel, és azt is kiírjuk az aktuális táblázatcellába:

if ($FORM{"$valt"} != 0) {
if ($ar != 0) {
print "

";
$tartalom1 = "$FORM{\"$valt\"} Ft. X $value = $ar Ft."; }

Ha a $ar változó értéke nulla, nem írunk ki semmit a mezőnevek és azok értéke mögé, de elkezdjük öszszeadni az eddig összegyűlt értékeket a végső ár kiszámítása céljából:

if ($ar == 0){
print "

";}
$vegar = ($vegar + $ar);
print "
\n";}

Az itt kiszámolt adatokat és az eredeti űrlapba beírtakat majd átadjuk egy másik programnak további feldolgozásra, ezért ezeket rejtett űrlapmezőkbe írjuk. Színes csíkokkal díszítjük a táblázatot, megnöveljük 1-gyel az "i" változót, amely az így adódó sorszám alapján az árat tartalmazó mezőket összerendeli a mennyiség mezőkkel. Majd kiírjuk a táblázat utolsó sorába a végösszeget, ha már nincs több adat, és mindezt rejtett mezőbe is beírjuk, hogy átadásra kerüljön. Lezárjuk a formot, a táblázatot és a HTML-oldalt:

print "\n";
if ($FORM{"$valt"} == 0){
print "

";
print ">tr>\n";}
print "
";
print "\n";}}
if ($ar1 eq "Value_"){
$i++;} } }
print "
$name:$value $FORM{\"$valt\"} Ft. X $value = $ar Ft.  
  
";
if ($vegar != 0){
print "\n";}
print '
';
print '

';

Végül a "getform.cgi" programnak, amely közvetlenül a fenti CGI-scripthez csatlakozik, semmi más dolga nincs, mint hogy elpostázza címünkre a HTML-űrlap adatait, és mindazt, amit a "hshopbuy.cgi" programban kiszámoltunk, valamint ugyanezeket megjelenítse egy újabb oldalon:

#!/usr/local/bin/perl
push (@INC, '/cgi-bin');
$mailprog = '/usr/lib/sendmail';
$recipient = "lezli\@best.com";
print "Content-type: text/html\n\n";

print "Get the form";
print "

";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairsx = split(/&/, $buffer);
foreach $pairx (@pairsx) {
($name, $value) = split(/=/, $pairx);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/~!/ ~!/g;
print MAIL "$name: $value\n";
print "$name: $value
\n\n"; }
close (MAIL);
print "";

Kövess minket a Facebookon!

Cikkgyűjtő

További fontos híreink

Huszadik alkalommal adták át a Hégető Honorka-díjakat

2024. november 21. 16:58

Hosszabbít ’Az Év Honlapja’ pályázat!

2024. november 19. 09:54

Törj be a digitális élvonalba: Nevezz ’Az Év Honlapja’ pályázatra!

2024. november 14. 16:36

A virtuális valóság az egészségügyet is forradalmasíthatja

2024. november 12. 18:01