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

 ID:               51634
 User updated by:  bart at tremby dot net
 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

 New Comment:

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.


Previous Comments:
------------------------------------------------------------------------
[2010-04-22 15:53:32] [email protected]

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 http://bugs.php.net/bug.php?id=51634&edit=1

Reply via email to