Edit report at https://bugs.php.net/bug.php?id=51634edit=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] fel...@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=51634edit=1