This is a more complex and larger script. It illustrates how information may be queried from a information stored in a type database -- for now we keep things simple. The data base is just a text file and we can only read from the file.
The HTML Form Front-End is as composed via:
<HTML> <HEAD> <TITLE>Address Book Search Forms</TITLE> </HEAD> <BODY> <H1>WWW Address Manager</H1> <P>Enter search values in any field. <PRE><HR> <FORM METHOD=POST ACTION="http://www.cs.cf.ac.uk/User-bin/Dave.Marshall/address.pl"> <P><B>Name:</B> <INPUT TYPE="text" NAME="Name" SIZE=40> <P><B>Address:</B> <INPUT TYPE="text" NAME="Address" SIZE=40> <P><B>Home Phone:</B> <INPUT TYPE="text" NAME="Hphone" SIZE=40> <P><B>Work Phone:</B> <INPUT TYPE="text" NAME="Wphone" SIZE=40> <P><B>Email Address:</B> <INPUT TYPE="text" NAME="Email" SIZE=40> <P><B>Home Page: </B> <INPUT TYPE="text" NAME="WWW" SIZE=40> </PRE> <INPUT TYPE="submit" VALUE="Search"> <INPUT TYPE="reset" VALUE="Clear"> <HR> </FORM> </BODY> </HTML>
and looks like this:
Enter search values in any field.
The Perl CGI script is as follows:
require 'cgi-lib.pl'; # grab values passed from form: &ReadParse(*in); print "Content-type: text/html\n\n"; # print the top part of the response print "<HTML><HEAD><TITLE>Addresss Book Search Results</TITLE></HEAD>\n"; print "<BODY><H1>Addresss Book Search Results</H1>\n"; # read and parse data file $data="address.data"; open(DATA,"$data") || die "Can't open $data: $!\n</BODY></HTML>\n"; while(<DATA>) { chop; # delete trailing \n if (/^\s*$/) { # break between records if ($match) { # if anything matched, print the whole record &printrecord($record); $nrecords_matched++; } undef $match; undef $record; next; } # tag: value ($tag,$val) = split(/:/,$_,2); if ($tag =~ /^Name/i) { $match++ if( $in{'Name'} && $val =~ /\b$in{'Name'}\b/i) ; $record = $val; next; } if ($tag =~ /^Address/i) { $match++ if( $in{'Address'} && $val =~ /\b$in{'Address'}\b/i) ; $record .= "\n<BR>$val" if ($val); next; } if ($tag =~ /^Home\s*Pho/i) { $match++ if( $in{'Hphone'} && $val =~ /\b$in{'Hphone'}\b/i) ; $record .= "\n<BR>Home: $val" if ($val); next; } if ($tag =~ /^Work/i) { $match++ if( $in{'Wphone'} && $val =~ /\b$in{'Wphone'}\b/i) ; $record .= "\n<BR>Work: $val" if ($val); next; } if ($tag =~ /^Email/i) { $match++ if( $in{'Email'} && $val =~ /\b$in{'Email'}\b/i) ; $record .= "\n<BR><A HREF=\"mailto:$val\">$val</A>" if ($val); next; } if ($tag =~ /Page/i) { $match++ if( $in{'WWW'} && $val =~ /\b$in{'WWW'}\b/i) ; $record .= "\n<BR><A HREF=$val>$val</A>" if ($val); next; } # anything else $record .= $_; } close DATA; if (! defined $nrecords_matched) { print "<H2>No Matches</H2>\n"; } print "</BODY></HTML>\n"; exit; sub printrecord { local($buf) = @_; print "<P>\n$buf<P>\n"; }
What is going on here?
This Perl Script essentially does the following: