After days of frustration, I must turn to the list for some help. Below is my code for the start of a rewrite of a shopping cart. I am rewriting it to CGI::App with CGI::App:Sess. I don't know what Im doing wrong and about to give up. I cat get the hash ref that the cart is in to store in the session table. See anything?
#!/usr/bin/perl -w use strict; use lib './'; use CGI::Carp qw(fatalsToBrowser); use Store::Customer; my $customer=Store::Customer->new(); $customer->run(); package Store; use base 'CGI::Application'; use CGI::Application::Session; use DBTools; sub cgiapp_init { my $self = shift; # Initialize Variables my $query = $self->query; my ($cart_ref, $session); # Initialize Databasew Connection and put in paraemeter space $self->param('dbh' => DBTools->connect()); my $dbh=$self->param('dbh'); $self->session_config( CGI_SESSION_OPTIONS => [ "driver:MySQL", $self->query, {Handle=>$dbh} ], COOKIE_PARAMS => { -path => '/', }, SEND_COOKIE => 1, ); # Extract the shopping cart from the session, if there isn't one yet create it if (!defined ($cart_ref=$self->session->param("cart"))) { # The cart is a hash reference of items indexd by item id $cart_ref={}; } } sub teardown { my $self=shift; # If the session still exists, store the cart back into it my $cart_count=0; my $session=$self->session; my $cart_ref=$session->param('cart'); if (defined($session)) { $session->param("cart", $cart_ref); $session->close(); } #Disconnect because we are done $self->param('dbh')->disconnect(); } 1; # KEEP PERL HIP-HOP-HAPPY package Store::Customer; # # LOOK UP HTML FORM BUILDER # # use base 'Store'; #use CGI qw{:standard}; sub setup { my $self=shift; $self->start_mode('add_item'); $self->mode_param('shopping_action'); $self->run_modes ( 'view_cart' => 'view_cart', 'add_item' => 'add_item', ); } sub add_item { my $self=shift; my $q=$self->query(); my $dbh=$self->param('dbh'); # Retrieve Session and get the cart my $session=$self->session; my $cart_ref=$session->param("cart"); # Get the current Item Number from the input form my $item_id=$q->param('item_id'); my $customer_id=$q->param('customer_id'); # Required form parameters passed into cart my @keys_to_get=('customer_id', 'qty', 'item_name', 'price', 'return_url', 'taxable'); my $sth=$dbh->prepare("SELECT parameter FROM user_parameters WHERE customer_id='$customer_id'"); $sth->execute(); while (my $row=$sth->fetchrow_hashref()) { push (@keys_to_get, $row->{parameter}); } unless ($item_id eq "" || !defined($item_id)) { if (!exists ($cart_ref->{$item_id})) { $cart_ref->{$item_id}={}; foreach (@keys_to_get) { $cart_ref->{$item_id}->{$_}=$q->param("$_"); } } ++$cart_ref->{$item_id}->{qty}; } } sub view_cart { my $self=shift; my $q=$self->query(); my $session=$self->session; my $cart_ref=$session->param("cart"); my $total_price=0; my @row; my $page; my $total_qty; my $return_to; return ("<h2>Shopping Cart is Empty!</h2>") if (!keys (%{$cart_ref})); push (@row, $q->Tr({-style=>"background-color:#CCCC66; color:black"}, $q->td("Quantity"), $q->td("Product Number"), $q->td("Product Name"), $q->td("Description"), $q->td("Unit Price"), $q->td("Unit Total"), )); foreach my $item_id (sort (keys (%{$cart_ref}))) { my $item_ref=$cart_ref->{$item_id}; my $qty_name="qty".$item_id; my $total_item_price=$item_ref->{qty}*$item_ref->{price}; $total_price += $total_item_price; $total_qty += $item_ref->{qty}; $return_to=$item_ref->{returnto}; my $url_delete=sprintf("%s?choice=delete;item_id=%s", $q->url(), $q->escape($item_id)); push (@row, $q->Tr({-style=>"background-color:#CCCCCC;"}, $q->td ($q->textfield({-name=>"$qty_name", -size=>'3', -value=>$q->escapeHTML ($item_ref->{qty})}), "<input type='submit' name=choice value='Update'> <a href=$url_delete>Delete</a>"), $q->td ($q->escapeHTML ($item_ref->{ID})), $q->td ($q->escapeHTML ($item_ref->{name})), $q->td ($q->escapeHTML ($item_ref->{description}), "<br>", $item_ref->{color}, "<br>", $item_ref->{size}, "<br>", $item_ref->{finish}, "<br>", $item_ref->{style}), $q->td ($q->escapeHTML (sprintf ("%.2f", $item_ref->{price}))), $q->td ($q->escapeHTML (sprintf ("%.2f", $total_item_price))) )); } # $total_price += get_shipping($total_qty); push (@row, $q->Tr({-style=>"background-color:#CCCCCC;"}, $q->td ({-colspan=>"3"}, ""), $q->td ({-colspan=>"2"}, "Total"), $q->td ({-align=>"right"}, $q->escapeHTML (sprintf ("%.2f", $total_price))) )); $page .= "<form action='https://secure.bigdawgcommunications.com/~woodbyma/cgi-bin/bd_ca rt.cgi' method=POST>"; $page .= $q->table({-width=>"100%", -style=>"font-size:12px"}, @row); unless ($show_links == 2) { $page .= "<input type='submit' name='choice' value='Checkout'><a href=$return_to>Continue Shopping</a><br><br>"; } $page .= "</form>"; #print header(); return $page; } 1; Thanks for any help. Scott --------------------------------------------------------------------- Web Archive: http://www.mail-archive.com/[EMAIL PROTECTED]/ http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2 To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]