dave,

below is a snipet of the code.  the most relavant part.  when i enter some
bad data in or mysql has problems, it should go to error_handler()  at the
bottom of my script.  well it does, then it returns unless i put an exit at
the end of error_handler.

----------------------------------------------------------------------------
-------------------------------
#!/usr/bin/perl -wT

use CGI::Fast;
$CGI::DISABLE_UPLOADS = 1;          # Disable uploads
$CGI::POST_MAX        = 512 * 1024; # limit posts to 512K max

use DBI;
use HTML::Template;


while ($q = new CGI::Fast) {

print_firstpage() if (!$q->param());
print_search_by_listing() if ($q->param("by_listing"));
print_search_by_state() if ($q->param("search_by_state"));
print_firstpage() if ($q->param("done"));

sub print_firstpage { 

my $template = HTML::Template->new(filename => 'myindex-front.html' );
print $q->header();
print $template->output();

} 

sub print_search_by_listing {

 my $first = $q->param("listing");

 if ((defined($first)) && ($first =~ /^[0-9]+$/)){

  my $dbh = DBI->connect("DBI:mysql:database=test","myuser",
"mypassword",{RaiseError=>0,PrintError=>0}) or error_handler(2);
  $quoted_first = $dbh->quote($first);

  my $sth = $dbh->prepare("select * from usernames where user =
$quoted_first") or error_handler(2);
  $sth->execute() or error_handler(2);
  $refer = $sth->fetchall_arrayref([
0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 ]) or
error_handler(1,$first);
  $sth->finish;
  $dbh -> disconnect;

    if (@$refer) {
     print_table($refer); ## jump to sub to print table ##
    } else {
     error_handler(1,$first);
    }
 } elsif ((defined($first)) && ($first =~ /\D+/)) {
   error_handler(1,$first);
 }
} 

sub print_search_by_state {

my $template = HTML::Template->new(filename => 'myindex-by-state-final.html'
);

my $dbh = DBI->connect("DBI:mysql:database=test","myuser",
"mypassword",{RaiseError=>0,PrintError=>0}) or error_handler(2);

$the_state = $q->param("by_state");
$the_type = $q->param("types");
$lo = $q->param("lo"); #used for keeping track of count.

if (($q->param("sort_by") eq "location") || ($q->param("sort_by") eq
"city")){
$the_sort_criteria = "city";
}
if (($q->param("sort_by") eq "price") || ($q->param("sort_by") eq "ask")){
$the_sort_criteria = "ask + 0";
}
if (($q->param("sort_by") eq "bedrooms") || ($q->param("sort_by") eq
"bed")){
$the_sort_criteria = "bed";
}

    if ($the_state =~ /[\!\@\#\%\^\&\*\(\)\{\}\[\]\:\;\"\'\?\<\>\/\~\`\|]/)
{
        error_handler(1,$the_state);
    }
    if ($the_type =~ /[\!\@\#\%\^\&\*\(\)\{\}\[\]\:\;\"\'\?\<\>\~\`\|]/) {
        error_handler(1,$the_type);
    }
    if ($the_sort_criteria =~
/[\!\@\#\$\%\^\&\*\(\)\{\}\[\]\:\;\"\'\?\<\>\,\/\~\`\|]/) {
        error_handler(1,$the_sort_criteria);
    }
    if (($lo) && ($lo =~
/[\!\@\#\$\%\^\&\*\(\)\{\}\[\]\:\;\"\'\?\<\>\,\/\~\`\|]/)) {
        error_handler(1,$lo);
    }

$quoted_the_state = $dbh->quote($the_state);
$quoted_the_type = $dbh->quote($the_type);

if ($the_type =~ /All-Types/) {
  $sth1 = $dbh->prepare("select count(*) from usernames where state =
$quoted_the_state") or error_handler(2);
} 
if ($the_type !~ /All-Types/) {
  $sth1 = $dbh->prepare("select count(*) from usernames where state =
$quoted_the_state and type = $quoted_the_type") or error_handler(2);
}

$sth1->execute()or die "died on executing";# or error_handler(2);
my @rows = $sth1->fetchrow_array;
$sth1->finish;

....

sub error_handler {

$template_error = HTML::Template->new(filename => 'error.html' );

$code = shift;
$error_data = shift;
$error_data2 = shift;

 if ($code == 1) {
  $template_error->param( THE_DATA => $error_data );
  $template_error->param( NO_RECORD => 1 );
 }
 if ($code == 2) {
  $template_error->param( DATABASE_ERROR => 1 );
 }
 if ($code == 3) { # this handles the type and state error from line 139
  $template_error->param( NO_STATED_TYPE => 1 );
  $template_error->param( THE_STATED => $error_data );
  $template_error->param( THE_TYPED => $error_data2 );
 }
print $q->header();
print $template_error->output();
exit;  ### how can i not "exit" and still stop the processing?
}
}
----------------------------------------------------------------------------
-------------------------------



> -----Original Message-----
> From: David Gray [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, April 23, 2002 3:51 PM
> To: [EMAIL PROTECTED]; 'Boex,Matthew W.'
> Subject: RE: exiting correctly
> 
> 
> > i have a regex that checks for a string in a param, if not 
> > found, it should jump to an error subroutine.  from there, i 
> > print out "this is an error", etc.  after that prints, unless 
> > i have an "exit" to stop the processing, the sub jumps back 
> > and prints out what i don't want it to.  how can i end the 
> > cgi at that point without calling exit?
> 
> Can you post your code please?
> 
> Sounds like:
> 
> FILE: while(<FILE>) {
>   if($line =~ /somestring/i) {
>     # do stuff
>   } else {
>     error_msg('somestring not found');
>     next FILE;
>   }
>   # do more stuff
> }
> 
> HTH,
> 
>  -dave
> 
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to