home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam    

19.11. Creating Sticky Widgets


You want the default values for the fields in your form to be the last values submitted. For instance, you want to create a search form like AltaVista ( http://altavista.digital.com/ ) where the keywords you're searching with appear in the search dialog above the results.


Use CGI.pm's HTML shortcuts to create your form, which will automatically provide previous values as defaults:

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


Example 19.8 is a simple script for querying 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


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/&/&/g;                        # escape HTML
        $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 the lines in the output from who for that user.

See Also

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