Recipe 19.10 Creating Sticky Widgets

19.10.1 Problem

You want form fields to default to the last values submitted. For instance, you want a search form like Google ( where the keywords you searched for appear in the search dialog above the results.

19.10.2 Solution

Use's HTML shortcuts to create your form, which automatically provides previous values as defaults:

print textfield("SEARCH");          # previous SEARCH value is the default

19.10.3 Discussion

Example 19-8 is a simple script for producing the list of users currently logged in.

Example 19-8. who.cgi
  #!/usr/bin/perl -wT   # who.cgi - run who(1) on a user and format the results nicely      $ENV{IFS}='';   $ENV{PATH}='/bin:/usr/bin';      use CGI qw(:standard);      # print search form   print header( ), start_html("Query Users"), h1("Search");   print start_form( ), p("Which user?", textfield("WHO")); submit( ), end_form( );      # print results of the query if we have someone to look for   $name = param("WHO");   if ($name) {       print h1("Results");       $html = '';              # call who and build up text of response       foreach (`who`) {           next unless /^$name\s/o;            # only lines matching $name           s/&/&amp;/g;                        # escape HTML           s/</&lt;/g;           s/>/&gt;/g;           $html .= $_;       }       # nice message if we didn't find anyone by that name       $html = $html || "$name is not logged in";              print pre($html);   }      print end_html( );

The call to textfield generates HTML for a text entry field whose parameter name is WHO. After printing the form, we check whether we were called with a value for the WHO parameter. If so, we try to find lines in the output from who for that user.

19.10.4 See Also

The documentation for the standard CGI module; Recipe 19.4; Recipe 19.6

Perl Cookbook
Perl Cookbook, Second Edition
ISBN: 0596003137
EAN: 2147483647
Year: 2003
Pages: 501

Similar book on Amazon © 2008-2017.
If you may any questions please contact us: