#!/usr/bin/perl -w # cart.cgi use strict; use CGI qw(:standard); use lib qw(.); use ShopCart; $|=1; my $action = param('action'); my $Session_ID = Check_Session(); my (%cart, $color); tie %cart, 'ShopCart'; tie $color, 'Colors', qw(ffffff e0e0e0); if($action =~ /view/) { View_Cart(); } elsif($action =~ /update/) { Update_Cart(); } elsif($action =~ /add/) { Add_Item(); } else { Display_Search_Page(); } exit; sub Add_Item{ my $sku = param('sku'); $cart{$sku} = '1'; Print_Added($sku); } sub Print_Added{ my $sku = shift; print<Item $sku Added

Item $sku added

[ Search Again ] [ View Cart ]
HTML } # End of Print_Added sub Check_Session{ my $session = cookie('session'); if($session){ print header(); return $session; } else{ $session = time() . $$; my $cookie = cookie( -name => 'session', -value => $session, -expires => '3h' ); print header( -cookie => $cookie ); return $session; } } # End of Check_Session sub Update_Cart{ my $sku = param('sku'); my $qty = param('qty'); $cart{$sku} = $qty; View_Cart(); exit; } # End of Update_Cart sub Session{ return $Session_ID; } # End of Session sub View_Cart{ print < Checkout Page

Checkout Page

Ship To:
Amelia A. Camel
321 Desert Dr.
Sahara, CA 90220
HTML my $grand_total = 0; while(my($sku, $qty) = each %cart){ my($name, $price) = Get_Product_Info($sku); my $total = sprintf("%.2f", ($price * $qty)); $price = sprintf("%.2f", $price); $grand_total += $total; print<
HTML } $grand_total = sprintf("%.2f", $grand_total); print<
SKU Item Qty Price Total Update
$sku $name \$$price \$$total
Total: \$$grand_total

Link back to cart

To remove an item, set it's qty to 0 and click it's "Update" button. HTML } sub Get_Product_Info{ my $sku = shift; my $dbh = DBI->connect("DBI:mysql:book", "book", "addison") or die "Error: $DBI::errstr\n"; my $SQL = "select * from products where sku = ?"; my $sth = $dbh->prepare($SQL); $sth->execute($sku); my $p = $sth->fetchrow_hashref; my $price = $p->{price}; my $name = $p->{name}; $sth->finish(); $dbh->disconnect(); return ($name, $price); } sub Display_Search_Page{ print<Product Search

Tied Hash Shopping Cart

View Cart/Checkout

HTML } # End of Display_Search_Page