I am trying to submit an external form using PHP cURL. All form fields are working fine, except a problem I have with multiple checkboxes with the same name.
<input type="checkbox" name="same_name" value="value_1">
<input type="checkbox" name="same_name" value="value_2">
<input type="checkbox" name="same_name" value="value_3">
I have no problem with passing ONE of the checkboxes in the cURL request. In my POST string, I just do:
curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name=value_1');
But now, I want to submit the form with multiple boxes checked. I tried the suggestion in the comments on this StackOverflow post:
curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name[]=value_1&same_name[]=value_2');
But then I get a response which is based on no checked checkboxes at all, ergo it doesn't work.
Basically, how can I submit such an array correctly in this request? Who can point me in the right direction?
Hmm, it's really weird. I just tried to setup my own page (this one is external) with the following code, and it indeed seemed impossible to select more than one value:
<form method="post">
<input type="checkbox" name="same_name" value="1">Value 1<br />
<input type="checkbox" name="same_name" value="2">Value 2<br />
<input type="checkbox" name="same_name" value="3">Value 3<br />
<input type="submit">
</form>
<?php
if(isset($_POST))
{
print_r($_POST);
}
?>
But after some tweaking, I think I got it working anyhow with ..&same_name=value_1&same_name=value_2.
I don't know HOW they do it on their serverside, but it appears to work!
If it's your form (you can change the code), change checkbox's name to same_name[]
<input type="checkbox" name="same_name[]" value="value_1">
<input type="checkbox" name="same_name[]" value="value_2">
<input type="checkbox" name="same_name[]" value="value_3">
and call curl_setopt($ch, CURLOPT_POSTFIELDS, '...&same_name[]=value_1&same_name[]=value_2');
, it's OK.
If it's external - you can't have multiple choice.
It is totally fine to pass an array for multi-value fields. It is usually a checkbox, but it can be any field such as multi-select. CURLOPT_POSTFIELDS is capable to handle this correctly and in the backend you get it as an array - identical to the submission from
<input type="checkbox" name="same_name" value="1">Value 1
<input type="checkbox" name="same_name" value="2">Value 2
<input type="checkbox" name="same_name" value="3">Value 3
$fields['name']='Smith';
$fields['email']='you@your-domain.com';
....
$fields['same_name'][]=1;
$fields['same_name'][]=2;
$fields['same_name'][]=3;
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);