b310 has asked for the wisdom of the Perl Monks concerning the following question:
This code shows the products and adds to the cart...elsif ($choice eq "add") # add item to shopping cart { add_item ($dbh, $cart_ref, param ("item_id"), param("quantity"), p +aram("color")); $page .= format_cart_html ($cart_ref, 1); }
This is the add item subroutine...sub get_product_table { my $sth = shift; my @row; my @nav_link; my @color; while (my $ref = $sth->fetchrow_hashref ()) { my $serve_url = sprintf ("serve_image.cgi?item_id=%s;picture", es +cape ($ref->{item_id})); @color = split (/,/, $ref->{color}); # generate a form allowing a quantity of the item to be added # to the cart push (@row, start_form(-method=>'POST', -action=>url()), hidden( -name => "choice", -override => 1, -default => "add" ), hidden( -name => "item_id", -override => 1, -default => escapeHTML($r +ef->{item_id})), Tr ({-style=>"font-family: verdana; font-size: 10pt;"}, td (img ({-src => $serve_url, -alt => escapeHTML($ref->{item_id})}) +), td ({-width=>"80", -valign=>"top", -align => "center"}, escapeHTML( + $ref->{item_id} )), td ({-width=>"190", -valign=>"top"}, escapeHTML( $ref->{description +} ))), td (" "), Tr ({-style=>"font-family: verdana; font-size: 10pt;"}, td ({-colspan => "3", -align => "right", -style=>"font-weight: 700; + color:blue;"}, "Price: \$", escapeHTML( sprintf( "%.2f", $ref->{pri +ce}))), Tr ({-style=>"font-family: verdana; font-size: 10pt;"}, td ({-colspan => "3", -align => "right"}, "Colors:", popup_menu( -n +ame => "color", -values => \@color))), Tr ({-style=>"font-family: verdana; font-size: 10pt;"}, td ({-colspan => "3", -align => "right"}, "Quantity:", popup_menu( +-name => "quantity", -values => ["1", "2", "3", "4", "5", "6", "7", " +8", "9"])), td (image_button( -name => "Add Item", -src=>"../images/add.jpg", - +border=>"0" )))), Tr ({-valign=>"top"}, td ({-colspan=>"7", -width=>"100%"}, hr)), end_form() ); } $sth->finish (); return undef unless @row; # no items? return (table ({-border => 0, -align => "center", -style=>"font-fa +mily: verdana; font-size: 10pt;"}, @row)); }
Finally, this produces the cart...sub add_item { my ($dbh, $cart_ref, $item_id, $qty, $color) = @_; # If the item isn't already in the cart, look it up from the datab +ase # and store it in the cart as a new entry with a quantity of zero. if (!exists ($cart_ref->{$item_id})) { my $sth = $dbh->prepare ("SELECT * FROM catalog_pet WHERE item_id = ?"); $sth->execute ($item_id); my $item_ref = $sth->fetchrow_hashref (); $sth->finish (); return if !defined ($item_ref); # this shouldn't happen... $cart_ref->{$item_id} = {}; # create new entry, indexed by +item ID $cart_ref->{$item_id}->{description} = $item_ref->{description +}; $cart_ref->{$item_id}->{price} = $item_ref->{price}; $cart_ref->{$item_id}->{qty} = 1; } $cart_ref->{$item_id}->{qty} = $qty; $cart_ref->{$item_id}->{color} = $color; }
Thank you ahead of time for all and any help.sub format_cart_html { my ($cart_ref, $show_links) = @_; my $total_price = 0; my @row; if (!keys (%{$cart_ref})) { return (p ("Shopping cart is empty.")); } $page .= h3 ({-align=>"center", -style=>"font-family: +verdana; font-size: 16pt; color: blue;"}, ("Shopping Cart")); push (@row, Tr ({-align => "CENTER", -valign=>"TOP", -BGCOLOR=>" +silver", -style=>"font-family: verdana; font-size: 10pt;"}, th ({-width=>"50"},("Item")), th ({-width=>"50"},("Qty")), th ({ +-width=>"90"},("Color")), th ({-width=>"190"},("Description")), th ({-width=>"94"},("Unit Price")), th ({-width=>"94"},("Price")) )); foreach my $item_id (sort (keys (%{$cart_ref}))) { my $item_ref = $cart_ref->{$item_id}; my $total_item_price = $item_ref->{qty} * $item_ref->{price}; $total_price += $total_item_price; # generate a link allowing the item to be deleted from the car +t my $url = sprintf ("%s?choice=delete;item_id=%s", url (), escape ($item_id)); push (@row, start_form(-method=>'GET', + -action=>url()), hidden( -name => "choice", -override => 1, -default => "update" ), hidden( -name => "item_id", -override => 1, -default => escapeHTML( $i +tem_id )), Tr ({-valign=>"center", -style=>"font-f +amily: verdana; font-size: 10pt;"}, td ({-align => "center"},(escapeHTML ($ +item_id))), td ({-align => "center"},( textfield( - +name => "quantity", -size => "1", -override => 1, -value => $item_ref +->{qty}))), td (escapeHTML ($item_ref->{color})), td (escapeHTML ($item_ref->{description})), td ({-align => "right"}, escapeHTML (sprintf ("%.2f", $item_ref->{price +}))), td ({-align => "right"}, escapeHTML (sprintf ("%.2f", $total_item_price +))), td (a ({-href => $url}, img ({-src => ".. +/images/delete1.jpg", -border => "0"}))), td (image_button( -name => "update", -src +=>"../images/update1.jpg", -border=>"0" )), end_form() )); } push (@row, Tr ({-align => "CENTER", -valign=>"center", -style=>" +font-family: verdana; font-size: 10pt;"}, td ({-colspan => "2"}, ""), td ({-colspan => "3", -align=>"right", -style=>"font-w +eight: 700;"}, "Total"), td ({-align => "right", -style=>"font-weight: 700;"}, escapeHTML (sprintf ("%.2f", $total_price))) )); return (table ({-align => "CENTER", -border => 0}, @row)); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Need duplicate item entries in shopping cart
by perrin (Chancellor) on Feb 19, 2003 at 17:57 UTC | |
by b310 (Scribe) on Feb 19, 2003 at 19:05 UTC | |
by b310 (Scribe) on Feb 20, 2003 at 00:02 UTC | |
by perrin (Chancellor) on Feb 20, 2003 at 02:07 UTC | |
by b310 (Scribe) on Feb 20, 2003 at 14:32 UTC | |
by perrin (Chancellor) on Feb 20, 2003 at 18:09 UTC | |
|
Re: Need duplicate item entries in shopping cart
by jasonk (Parson) on Feb 19, 2003 at 17:48 UTC | |
by b310 (Scribe) on Feb 19, 2003 at 18:12 UTC |