in reply to Re: Multiple Check boxes and Handling
in thread Multiple Check boxes and Handling

Looks good. One thing in need to do. I need to put each oid value into a separate variable so i can repeat the delete subroutine once per value.
  • Comment on Re: Re: Multiple Check boxes and Handling

Replies are listed 'Best First'.
Re: Re: Re: Multiple Check boxes and Handling
by tachyon (Chancellor) on Oct 08, 2001 at 02:11 UTC

    They are in separate variables in the @deletes array.

    $deletes[0] # contains first $oid to delete $deletes[1] # contains second $oid to delete ... $deletes[n] # contains n+1 th .....

    Here is how you use your array. Assunimg that $oid contains a filepath to a file you want to delete this will do that.

    <code> #/usr/bin/perl -w use CGI; use CGI::Carp('fatalsToBrowser'); use strict; my $q = new CGI; my @deletes = $q->param('delete_this_value'); print "Content-type: text/plain"; foreach my $oid (@deletes) { # you get the value of $oid here for all checked boxes &do_delete($oid); } sub do_delete { my $oid_to_delete = shift; unlink $oid_to_delete or die "Can't unlink $oid $!\n"; print "Deleted $oid_to_delete\n"; }

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

      In this case, it's an SQl db. I have:

      search.cgi - Only the relevant form
      sub normal_results{ print <<HTML; <HTML><HEAD><TITLE>search- Timeclock Search</TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"> <CENTER> <a href="$home">Home</A> | <a href="in_form.cgi">Clock In</A> | <a href="search_form.cgi">Search</A> </CENTER> <CENTER><FONT SIZE=6 FACE=ARIAL>Search Results for $username</FONT> +</CENTER> <HR WIDTH=80%> <P> <CENTER><TABLE BORDER=1 CELLSPACING=0> <TR> <TD BGCOLOR="#eecb27" COLSPAN=7><FONT FACE=ARIAL> <CENTER><B>- Employee Timeclock Database</B></CENTER> </FONT></TD> </TR> <TR> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Oid</B></CENTER></FONT></TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Date</B></CENTER></FONT></TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Username</B></CENTER></FONT>< +/TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Clocked In</B></CENTER></FONT +></TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Clocked Out</B></CENTER></FON +T></TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>Daily Total</B></CENTER></FON +T></TD> <TD BGCOLOR="eecb27"> <FONT SIZE=2 FACE=ARIAL><CENTER><B>notes</B></CENTER></FONT></TD +> </TR> HTML while (@row = $sth->fetchrow()){ $total_time = $row[9]; $allhours = $allhours + $total_time; ## Make our HTML look better if no data. $row[0] = "&nbsp;" if($row[0] eq ""); $row[1] = "&nbsp;" if($row[1] eq ""); $row[2] = "&nbsp;" if($row[2] eq ""); $row[3] = "&nbsp;" if($row[3] eq ""); $row[4] = "&nbsp;" if($row[4] eq ""); $row[6] = "&nbsp;" if($row[6] eq ""); $row[7] = "&nbsp;" if($row[7] eq ""); $row[9] = "&nbsp;" if($row[9] eq ""); $row[10] = "&nbsp;" if($row[10] eq ""); print <<HTML; <TR BGCOLOR="#FFFFFF"> <TD><FONT SIZE=2 FACE=ARIAL>$row[0]</FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[1]</FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[2]</FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[3]:$row[4]</A></FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[6]:$row[7]</FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[9]</FONT></TD> <TD><FONT SIZE=2 FACE=ARIAL>$row[10]</FONT></TD> HTML } # End of while. print<<HTML; </TR><tr> <td></TD> <td></TD> <td></TD> <td></TD> <td>Total Time:</TD><td bgcolor=#FFFF99>$allhours</TD><td></TD></TR></ +TABLE></CENTER> <P> <HR WIDTH=80%> <P> <CENTER> <FONT SIZE=4> <A HREF="">Main Page</A> </FONT> </CENTER> </BODY></HTML> HTML } # End of normal_results subroutine ################ END NORMAL RESULTS SUBROUTINE


      delete.cgi
      #!/usr/bin/perl use CGI qw/:standard/; require "common.sub"; print header; #$oid = $ENV{QUERY_STRING}; #$sav_oid = $oid; if ($user eq "$admin"){ use CGI; my $q = new CGI; @deletes = $q->param('delete_this_row'); foreach (@deletes) { &Create_DB_Connection; &delete_results; } &print_results; $dbh->disconnect; }else{ &print_error; } ################ BEGIN DELETE RECORD SUBROUTINE sub delete_record{ $SQL="DELETE FROM timeclock WHERE oid = '$sav_oid'"; my $sth = &Do_SQL; } ################ END DELETE RECORD SUBROUTINE ################ BEGIN PRINT RESULTS SUBROUTINE sub print_results{ print <<HTML; <HTML><HEAD><TITLE>Delete Entry</TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"> <CENTER><FONT SIZE=6 FACE=ARIAL>Delete Results</FONT></CENTER> <HR WIDTH=80%> <P> <CENTER> <FONT SIZE=6 FACE=ARIAL>Record Deleted!</FONT> </CENTER> <P> <HR WIDTH=80%> <P> <CENTER> <FONT SIZE=4 FACE=ARIAL> <a href="$home">Home</A> | <a href="in_form.cgi">Clock In</A> | <a href="search_form.cgi">Search</A> </FONT> </CENTER> </BODY></HTML> HTML # Release the statement handle resources $sth->finish; } # End of print_results subroutine ################ END PRINT RESULTS SUBROUTINE

        Move your &Create_DB_Connection outside the loop (you only need to do it once. It looks as though you are fairly unfamiliar with DBI so here is a start. I just typed this out so there are probably typos/syntax errors.

        #!/usr/bin/perl -w use strict; use CGI; use CGI::Carp('fatalsToBrowser'); use DBI; my $home = $ENV{HOME}; my $q = new CGI; # get rows to delete my @deletes = $q->param('delete_this_row'); # print a header using CGI.pm print $q->header(); # connect to database, only need to do once (fill in values) my $dbh = DBI->connect($data_source, $username, $auth, \%attr) or erro +r("Can't connect to database!"); # prepare and cache SQL - we use a placeholder ? ALWAYS USE ? placehol +ders! my $SQL="DELETE FROM timeclock WHERE oid = ?"; my $sth = $dbh->prepare_cached($SQL) or error("Could not prepare $SQL" +); # do the deletions my $results; foreach my $delete(@deletes) { $sth->execute($delete) or error("Could not execute $detete"); $results .= "<LI>Deleted $delete</LI>\n"; } # commit the changes $dbh->commit or do {$dbh->rollback; error("Could not commit changes")} +; $dbh->disconnect or error("Disconnect error"); sub error { my $error = shift; print "<h2>Database error!</h2>\n" print "<p>$error " . $DBI::errstr; exit; } ################ BEGIN PRINT RESULTS SUBROUTINE sub print_results{ print <<HTML; <HTML><HEAD><TITLE>Delete Entry</TITLE></HEAD> <BODY BGCOLOR="#FFFFFF"> <CENTER><FONT SIZE=6 FACE=ARIAL>Delete Results</FONT></CENTER> <HR WIDTH=80%> <P> <CENTER> <UL> $results </UL> </CENTER> <P> <HR WIDTH=80%> <P> <CENTER> <FONT SIZE=4 FACE=ARIAL> <a href="$home">Home</A> |<a href="in_form.cgi">Clock In</A> | <a + href="search_form.cgi">Search</A> </FONT> </CENTER> </BODY> </HTML> HTML } # End of print_results subroutine

        Totally untested. See btrott for a basic guide to DBI and the DBI pod.

        cheers

        tachyon

        s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print