Click Here!
home account info subscribe login search My ITKnowledge FAQ/help site map contact us


 
Brief Full
 Advanced
      Search
 Search Tips
To access the contents, click the chapter and section titles.

Perl CGl Programming: No experience required.
(Publisher: Sybex, Inc.)
Author(s): Erik Strom
ISBN: 0782121578
Publication Date: 11/01/97

Bookmark It

Search this book:
 
Previous Table of Contents Next


Adding Guest Book Entries

Gathering and filing an entry from the guest book form is a straightforward job in Perl. Let’s create a program called addguest.pl.

   #!/perl/bin/perl

       require ("d:/pub/scripts/perl-cgi/GuestBook.pm") ||
            die ("Can't find GuestBook header file: $!\n");

   # Get the POSTed information from STDIN and put it in $post_info.

       read (STDIN, $post_info, $ENV {'CONTENT_LENGTH'});

   # Split off the fields, which are delimited with '&',
   # and put them in @InfoArray.

       @InfoArray = split (/&/, $post_info);

   # Go through each element in @InfoArray, split off the
   # "variable=" part, then translate pluses into spaces and
   # any escaped hex chars back into their real character values.

       for ($n = 0; @InfoArray[$n]; $n++)
           {
           ($dummy, $temp) = split (/=/, @InfoArray[$n]);
           $temp =∼ tr/+/ /;
           $temp =∼ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
           @InfoArray [$n] = $temp;
           }

   # Now we’ll check to see if we have anything to write
   # to the guest book. We need a first or last name, at
   # least; otherwise, we'll jump around the routines that
   # write this stuff to the guest book file.

       if ((length (@InfoArray[$FirstNameIndex]) != 0)
               || (length (@InfoArray [$LastNameIndex]) != 0))
           {

       # Tack the current time to the end of the array.

           $time = time ();                        # Get the current time.

           @InfoArray[$NumEntryTime] = $time;  # Put it in the array.

       # Pack the data into a binary structure, open the guest book
       # file for appending, and write it all out to disk.

           $GuestEntry = pack ($GuestEntryStruct, @InfoArray);
           open (GUEST_LOG, ">>$GuestBookPath")
                || die "Can't open guest book: $!";
           print GUEST_LOG $GuestEntry;
           close (GUEST_LOG);
           }               # End if ((length…)

   # Finally, we put up a cute little HTML document announcing
   # that everything’s done, with a link to the guest book viewer.

       &HTML_Header ("All done!");
       print "<BODY>\n";
       print "<CENTER>\n";
       print "<H1>Thanks for taking the time to ";
       print "sign our guest book…</H1>\n";
       print "<HR>\n";
       print "Click <A HREF=\"/scripts/perl-cgi/guestbook.pl\
        ">here</A> ";
       print "to view the guest book.<BR>\n";
       &HTML_Ender ();

   #                    End addguest.pl

You probably noticed a new require statement at the top of the program. Put this code in another file in the same directory as addguest.pl.

   # GuestBook.pm
   #
   # Header file for the routines to add data to and read it back from

   # the Web page Guest Book.
   #

       require ("d:/pub/scripts/perl-cgi/html.pm")
           || die ("Can't find header file\n");

   # Some useful constants.

       # Format for pack ()
       $GuestEntryStruct     = "a30a30a30a30a30a30a256l";
       # Path to guest book file
       $GuestBookPath        = "/pub/http/perl-cgi/ngbook.dat";

   # Indexes of elements in the packed structure.

       $FirstName            = 0;
       $LastName             = 1;
       $City                 = 2;
       $State                = 3;
       $Country              = 4;
       $EMail                = 5;
       $Comments             = 6;
       $NumEntryTime         = 7;
       $NumElements          = 8;    # Number of elements in structure.
       $RecordSize           = 440;  # All the sizes added up.

   #                     End GuestBook.pm

Save this file as guestbook.pm (note the pm). Rename html.pl to give it a .pm extension. Now connect with your Web server and guestbook.html. Fill out the form, as shown in Figure 7.3.


Figure 7.3:  A filled-out guest book entry in Netscape Navigator

Now submit the form. You’ll see a page similar to the one shown in Figure 7.4.


Figure 7.4:  The guest book entry has been filed.


Previous Table of Contents Next


Products |  Contact Us |  About Us |  Privacy  |  Ad Info  |  Home

Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc.
All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited.