I submitted this to the lib-apreq mailing list ([EMAIL PROTECTED])
but didn't hear anything back, so I thought I'd try here...

I'm seeing an odd problem with libapreq 1.3 (mod_perl2 just isn't quite
mature enough yet...) and buttons on a form with file upload fields.
Basically it seems that a browser that submits the button field immediately
after a file upload field on a form, the button value disappears from the
params() result in libapreq. It's probably best to show what's going on with
an example:

I put this in my usual conf/perl.conf setup...

<Location /test>
  SetHandler perl-script
  PerlHandler main::test
<Perl>
package main;
use Apache::Request;
use Data::Dumper;
sub test {
  my $R = shift;

#  my $R = Apache::Request->new($R);
#  $Status = $R->parse;
#  my %Params = map { $_ => $R->param($_) } $R->param;
#  warn Dumper(\%Params);

   chomp($_ = <STDIN>);
   while ($_) { warn "$_\n"; chomp($_ = <STDIN>); }

  $R->content_type('text/html');
  $R->send_http_header;

  print <<'EOF';
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd";>
<html> <head> <title>Test</title> </head> <body>
<form method="post" action="http://localhost:8080/test/";
enctype="multipart/form-data">
<input type="submit" name="somename" value="Click"><br>
<input type="file" name="FMC-UploadFile1" size="20"><br>
<input type="submit" name="somename" value="Click"><br>
</form> </body> </html>
EOF

  return Apache::OK;
}
</Perl>
</Location>


If I click the first button, in the log I see:

------------jZLJfj7sG9kLeKXzCBVikO7gXcwytA8ahRtMA1FQAxjmGHkSSF9AbEp
Content-Disposition: form-data; name="somename"

Click
------------jZLJfj7sG9kLeKXzCBVikO7gXcwytA8ahRtMA1FQAxjmGHkSSF9AbEp
Content-Disposition: form-data; name="FMC-UploadFile1"; filename=""

------------jZLJfj7sG9kLeKXzCBVikO7gXcwytA8ahRtMA1FQAxjmGHkSSF9AbEp--

No problem. If I click the second button, in the log I see:

------------bQaJLMV8JU2DxyhdPfNYApBF5BDgYSk7tIRCewKvOK6LInxiTKEb8Pq
Content-Disposition: form-data; name="FMC-UploadFile1"; filename=""

------------bQaJLMV8JU2DxyhdPfNYApBF5BDgYSk7tIRCewKvOK6LInxiTKEb8Pq
Content-Disposition: form-data; name="somename"

Click
------------bQaJLMV8JU2DxyhdPfNYApBF5BDgYSk7tIRCewKvOK6LInxiTKEb8Pq--

Also apparently no problem, the actual data is there. Ok, now if I change
the code so that it uses libapreq to parse the params instead for just
"warning" them out to the log (just uncomment the commented out lines above,
and comment out the 'while' line beneath them). If I click the first button,
I see:

$VAR1 = {
  'somename' => 'Click',
  'FMC-UploadFile1' => ''
};

Which is good. But if I click the second button I see:

$VAR1 = {
  'FMC-UploadFile1' => ''
};

Ah, the button has disappeared!

To be honest, I haven't dug through the spec to see if buttons are supposed
to come before other fields, but as far as I can tell, this problem only
happens if the button field is submitted by the browser immediately after a
file field, and at the moment the only browser I've seen do that is
Konquerer.

Anybody know what's broken here? Is it libapreq? Is it Konquerer?

Rob




-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to