Bug #51634 [Com]: Can't post multiple fields with the same name

From: Date: Mon, 14 May 2012 20:21:12 +0000
Subject: Bug #51634 [Com]: Can't post multiple fields with the same name
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-170437@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=51634&edit=1

 ID:                 51634
 Comment by:         raphael dot droz+floss at gmail dot com
 Reported by:        bart at tremby dot net
 Summary:            Can't post multiple fields with the same name
 Status:             Open
 Type:               Bug
 Package:            cURL related
 Operating System:   Ubuntu
 PHP Version:        5.2.13
 Block user comment: N
 Private report:     N

 New Comment:

This patch may solve the issue.

I can't see how may I have restricted the new code-path according to the key so I simply tested
for values which are array themselves instead of doing any string lookup/substitution when keys
matches "[]" or anything like that.

I got some problem with the test-suite (can't export PHP_CURL_HTTP_REMOTE_SERVER) anyway I
still had 40 skipped, 2 failures and 33 pass *after* the patch.
If that patch is ok I may add a patch for the test-suite if needed.

NB: please don't bite me, it's my first patch for PHP.


Previous Comments:
------------------------------------------------------------------------
[2010-04-22 16:01:30] bart at tremby dot net

That works when posting to PHP because of the way PHP handles the names but what it's actually
posting is
name "name[0]", value "val1"
name "name[1]", value "val2"

Any system but PHP as far as I know (I'm posting to a Java-based system and I don't have
control over it) keeps them as they are -- two separate entities called "name[0]" and
"name[1]". There's nothing in the HTTP specification which says anything about array
indices -- as far as I can tell that's purely PHP's invention. PHP which decides
they're the same thing and knocks off the brackets.

The system I'm posting to expects them to be posted with the same name. (The spec says this is
fine -- see <http://www.w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.1.2.3>).
The CLI example I gave in the OP does this; the PHP example you just gave does not.

------------------------------------------------------------------------
[2010-04-22 15:53:32] felipe@php.net

You can use: array("name[0]" => "val1", "name[1]" =>
"val2")

------------------------------------------------------------------------
[2010-04-22 15:07:56] bart at tremby dot net

Where I said 'PHP then parses this into an array but only "val2" is in it.' I
meant "Array", not "val2".

------------------------------------------------------------------------
[2010-04-22 15:06:01] bart at tremby dot net

Description:
------------
With CLI curl I can run
curl -F test=value -F test=value --trace-ascii trace http://localhost/test.php
and in the file trace I see that it posted multipart/form-data with two fields called
"test" with content "value".

I need this same behaviour from PHP. But the only way at present, it seems, to add form fields to
the curl handle (and have them transmit as multipart/form-data) is to use curl_setopt($ch,
CURLOPT_POSTFIELDS, $data) where $data is an array of name->value pairs.

Obviously I can't have two pairs in this array with the same name.

I've tried array("name" => array("val1", "val2")) but that
posts the string "Array" as the value for field "name".

I've tried array("name[]" => array("val1", "val2")) but that
posts the string "Array" as the value for field "name[]" (PHP then parses this
into an array but only "val2" is in it.)

I've tried array("name[]" => "val1", "name[]" =>
"val2") but of course that doesn't work since as soon as that array is initialized
it's only got one element -- the second overwrote the first.

I think allowing array("name" => array("val1", "val2")) would be
the best solution. (And brackets should not be added to the end of "name" unless
specified.)



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=51634&edit=1


Thread (12 messages)

« previous php.bugs (#170437) next »