$datafile = "entries.dat"; @searchterms = ("company_name","street","city_st_zip","phone","fax","website","email"); @table_fields = ("company_name","street","city_st_zip","phone","fax","website","email"); $limit_of_search_results = 20; $bgcolor1 = "white"; $bgcolor2 = "white"; sub table_header { print qq!
!; # end of print statement } sub table_row { if ($field[0] ne "") {$company_name="$field[0]
";} if ($field[1] ne "") {$street="$field[1]
";} if ($field[2] ne "") {$city_st_zip="$field[2]
";} if ($field[3] ne "") {$phone="$field[3]
";} if ($field[4] ne "") {$fax="FAX: $field[4]
";} if ($field[5] ne "") {$website="$field[5]
";} if ($field[6] ne "") {$email="$field[6]
";} if ($field[9] ne "") {$logo="";} if ($field[8] ne "") {$storefront="";} if ($field[11] ne "") {$first_name="$field[11]";} print qq! !; } sub table_footer { print qq!
$form{'searchtext'}
$company_name $street $city_st_zip $phone $fax $website $email
   
!; } (!$ENV{'REQUEST_METHOD'}) && (die __FILE__.' line '.__LINE__." No Request method, $!\n"); if ($ENV{'REQUEST_METHOD'} =~ /^(GET|HEAD)$/ ) { $query_string = $ENV{'QUERY_STRING'}; if(!$query_string) { $form{1}=1; } } if ($ENV{'REQUEST_METHOD'} eq 'POST') { $length = $ENV{'CONTENT_LENGTH'} if $ENV{'CONTENT_LENGTH'}; (!$length) && (die __FILE__.' line '.__LINE__." No content length with with POST request, $!\n"); ($length > 163840) and (die __FILE__.' line '.__LINE__." Content Length exceeded Post hard limit of 16384, $!\n"); while($length){ $query_string .= getc(*STDIN); $length--; } !$query_string && (die __FILE__.' line '.__LINE__." No standard input with POST request, $!\n"); } my(@pairs) = split('&',$query_string); my($key,$value); my(@pairs) = split('&',$query_string); my($key,$value); foreach (@pairs) { ($key,$value) = split('='); $key = &unescape($key); !$key and next; !$value and next; $value = &unescape($value); $form{$key} = $value; } sub unescape { my($string) = @_; $string =~ tr/+/ / $string =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge; return $string; } print "Content-type: text/html\n\n"; open (DATABASE, "$datafile") || die print "$datafile"; @data=; close (DATABASE); $counter = 1; foreach $data(@data) {$search_data{$counter} = $data; $counter++;} $counter = 0; foreach $table_fields(@table_fields) {$field_placement{$table_fields} = "$counter"; $counter++;} $results_counter = 1; if ($form{'search'}) { $search_terms_present = 0; # Split keywords ######################################### @searchText = split(/\x20/,$form{'searchtext'}); foreach $test (@searchText) {if ($test =~ /\S{2,}/){ push @searchKey, $test;}} # Prepare Link ######################################### $search_query = "search=1"; $form{'searchtext'} and $search_query .= "&searchtext=$form{'searchtext'}" and $search_terms_present++; foreach $searchterms(@searchterms) {$form{$searchterms} ne "" and $search_query .= "&$searchterms=$form{$searchterms}" and $search_terms_present++;} # Loop Through Data ######################################### foreach $key(keys %search_data) { $found = 0; @line = split (/\|/, $search_data{$key}); # Custom Searching ######################################### foreach $searchterms(@searchterms) {$form{$searchterms} and $line[$field_placement{$searchterms}] =~ /\b$form{$searchterms}\b/i and $found++;} # Text Searching ######################################### if ($form{'searchtext'}) { foreach $test(@searchKey) {$search_data{$key} =~ /\b$test\b/i and $found++;} } # end if we have search text # Check Results ######################################### # if we find something we make a new hash relation ship called %search_results $found > 0 and $found == $search_terms_present and do{ $search_results{$key} = $search_data{$key}; $result_map{$results_counter} = $key; $results_counter++; }; #end found do } #end foreach search key # Begin the page of results ############################################################## $starting_point = $form{'starting_point'}; !$starting_point and $starting_point = 1; $current_page_number = int($form{'starting_point'}/$limit_of_search_results) +1; $end_point = ($current_page_number * $limit_of_search_results); if (%search_results) { &table_header; $result = $starting_point; for $result($starting_point..$end_point) { !$search_results{$result_map{$result}} and next; $last_displayed = $result; @field = split (/\|/, $search_results{$result_map{$result}}); if ($bgcount > 1) {$bgcolor=$bgcolor2;$bgcount=1;} else {$bgcolor=$bgcolor1;$bgcount=2;} &table_row; } &table_footer; } else { print "

"; } $results_counter--; $results_counter > $limit_of_search_results and do{ $page_count = int($results_counter/$limit_of_search_results) +1; ($results_counter/$limit_of_search_results) == int($results_counter/$limit_of_search_results) and $page_count--; $next_starting_point = ($last_displayed + 1); $count =1; $starting_point = 1; until ($count > $page_count) { $count == $current_page_number and $next_results_link .= qq~$count | ~; $count != $current_page_number and $next_results_link .= qq~$count | ~; $starting_point += $limit_of_search_results; $count++; } $next_starting_point > $results_counter and $next_starting_point = 1; $next_results_link .= qq~Next Page~; print "

$next_results_link

"; };#end do