#!/usr/bin/perl

use strict;
use DBI;

my (%form, $lastname, $firstname, $city, $state, $age);

Print_Head(); 
Query_Database();
Print_Ending();

sub Print_Head {
  print "Content-type: text/html\n\n";
  print "<html>";
  print "<body>";
  print "<center>";
}

sub Print_Ending {
  print "</center>";
  print "</body>";
  print "</html>";
}

sub Query_Database {

  my $host = "roger";
  my $user = "cs898n";
  my $password = "abc123";
  my $dbname = "cs898n";

  my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host", $user, $password);  
  $dbh or die "cannot connect to the database:$!\n";

  my $sth = $dbh->prepare (Query_String());
  $sth->execute();

  while (my $data = $sth->fetchrow_arrayref ()) {
    Print_Result(@$data);
  }
  $sth->finish ();
  $dbh->disconnect;
}

sub Break_CGI {
  my ($buffer, @pairs, $pair, $name, $value);
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  chomp $buffer;
  @pairs = split(/&/, $buffer);
  foreach $pair (@pairs)
  {
      ($name, $value) = split(/=/, $pair);
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $name =~ tr/+/ /;
      $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $form{$name} = $value;
  }
  $lastname = $form{"lastname"};
  $firstname = $form{"firstname"};
  $city = $form{"city"};
  $state = $form{"state"};
  $age = $form{"age"};
}

sub Query_String {
  Break_CGI();
  my $query_string;
  if (defined($form{"state"}) && $state) {
    $query_string = "select * from friend where state = '"
                  . uc(substr($state, 0, 2)) . "'";
  } else {
    $query_string = "select * from friend where state = 'CA'";
  }
  return $query_string;
}

sub Print_Result {
  ($firstname, $lastname, $city, $state, $age) = @_;
  print "First Name: ", $firstname, "<br>";
  print "Last Name: ", $lastname,  "<br>";
  print "City: ", $city,  "<br>";
  print "State: ", $state, "<br>";
  print "Age: ", $age,  "<p>";
}
