$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!
| $form{'searchtext'} |
!; # 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!
|
$company_name
$street
$city_st_zip
$phone
$fax
$website
$email
|
!;
}
sub table_footer
{
print qq!
| | | |
!;
}
(!$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 "Sorry, nothing has matched what you are searching for. Please try again.
";
}
$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