Insert into table when user clicks one of many submit buttons

jwalker's Avatar, Join Date: Nov 2011
Newbie Member
Hi,I am trying to create a site that sells music. I have page with a list of tracks, each with a submit button to buy the track. When a user clicks on one of the submit buttons, the catalog number gets inserted into a table called cart. The problem is that whichever submit button is pressed, only the first row is inserted.
Each line of the form has a hidden field with a value of the row from the tracks table in the database. Here is the code I have so far:

foreach ($cgi_object->param())
{
$form{$_} = $cgi_object->param($_);
$catnum = $form{cat_num};
$row = $form{id};
}
my $insert=qq~ insert into cart (id,cat_num) select id,catalog_num from tracks where id ='$row'~;
my $dbh=DBI->connect($connectionInfo,$user,$passwd);
my $sth=$dbh->prepare($insert);
$sth->execute();

When I execute the mysql statement in the database and replace $id with a row number I get the desired result. I'm guessing the problem has something to do with putting the insert into a loop? Not sure quite how to do this. Any help would be much appreciated. Thanks.
pradeep's Avatar, Join Date: Apr 2005
Team Leader
Code: Perl
my $insert = qq~ insert into cart (id,cat_num) select id,catalog_num from tracks where id =?~;
my $dbh    = DBI->connect( $connectionInfo, $user, $passwd );
my $sth    = $dbh->prepare($insert);

foreach ( $cgi_object->param() ) {
    $form{$_} = $cgi_object->param($_);
    $catnum   = $form{cat_num};
    $row      = $form{id};

    $sth->execute($row);
}
awatson's Avatar, Join Date: Feb 2008
Newbie Member
Also, it sounds to me like you might one to go with checkboxes rather than submit buttons so that they can add a bunch of tracks to the cart at once, rather than one at a time...