From: James Taylor <[EMAIL PROTECTED]>
> Chris Devers wrote:
> > On Fri, 10 Dec 2004, James Taylor wrote:
> > 
> > 
> >>Hi everyone, wondering if anyone knew how to pass an associative
> >>array via POST to mod_perl.  Something like:
> > 
> > 
> > HTML forms don't really provide for complex data structures, so any
> > solution is going to have to be cobbled together.
> > 
> > I think your best bet is to just have form elements with names like
> > 'searchname', 'searchemail', etc, and just have code on the server
> > to organize it into a hash:
> > 
> >   $search{name}  = $req->param('searchname');
> >   $search{email} = $req->param('searchemail');
> > 
> > etc. 
> 
> Eh, score 1 for PHP then.  The reason I can't specifically do what
> you're mentioning is that the field names being passed could be
> ANYTHING, as the code is for a module I'm writing.  Anyway, I went
> ahead and just made it cheesy, instead of doing field[something], i
> made all of the input names "field=something", send the hash through a
> foreach loop - if the name of the field =~ /field/, i split on the =
> and ditch the first variable.  Feh

Specialized tools often give you shortcuts for their special stuff 
(and fail badly as soon as you try to do something too general).

        %params = $req->Vars;
        foreach my $key (keys %params) {
                next unless $key =~ /^([^\[]+)\[([^\]]+)\]$/;
                $params->{$1}->{$2} = $params->{$key};
                delete $params->{$key};
        }

doesn't look to complex to me and you end up with 

        ?search[name]=Jenda&[EMAIL PROTECTED]&page=1

being converted to

        %params = (
                search => { name => 'Jenda', 'email' => '[EMAIL PROTECTED]'},
                page => 1
        )

Is that what you wanted?

Jenda
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to