Creating Sticky Widgets (Perl Cookbook, 2nd Edition)

## 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 (http://www.google.com/) where the keywords you searched for appear in the search dialog above the results.

### 19.10.2. Solution

Use CGI.pm'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

Copyright © 2003 O'Reilly & Associates. All rights reserved.