Accessing Form Parameters (Perl Cookbook, 2nd Edition)

## 21.6. Accessing Form Parameters

### 21.6.1. Problem

You want the values for form fields submitted by the client.

### 21.6.2. Solution

To access the form's various parameters, use `$r->content` to access POSTed parameters and `$r->args` to access GET parameters encoded in the URL.

>     %post_parameters = $r->content;
>     %get_parameters  = $r->args;

You can call `$r->content` only once per request because the first call consumes all POSTed data.

The Apache::Request module from CPAN gives you a `$r->param` method to access specific parameters, regardless of whether they're from GET or POST:

>     use Apache::Request;

>     sub handler {
>       my $r = Apache::Request->instance(shift);
>       my @param_names = $r->param;
>       my $value       = $r->param("username");  # single value
>       my @values      = $r->param("toppings");  # multiple values

>       # ...
>     }

### 21.6.3. Discussion

Processing form parameters without Apache::Request is problematic with values that occur multiple times. For example, a `SELECT` list with `MULTIPLE` enabled sends repeated entries for the same parameter name. Putting them into a hash preserves only one of those entries. Apache::Request solves this problem by accumulating multiply-submitted parameters in an array.

Form parameters POSTed to your handler can be a problem. The nature of Apache is that once one handler reads the POSTed data, another handler cannot come along later and reread that same information. So if you're going to process POSTed form parameters, you had better keep the decoded parameters around in case another handler wants to access them. The `instance` constructor handles this for us. When two handlers both call the `instance` constructor, the second handler gets back the Apache::Request object populated by the first, with form parameters already decoded.

The Apache::Request `$r->param` interface is based on the CGI module's parameter-parsing interface.

### 21.6.4. See Also

The Apache.pm manpage; Writing Apache Modules with Perl and C; Recipe 3.5 in mod_perl Developer's Cookbook; the Apache::Request manpage; Recipe 20.2

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