views:

35

answers:

3

Hello!

I'm having problems posting an array using PHP cURL. I have successfully posted other values to the same page using POST-variables. But this one is hard to figure out. The only problem is how I should present the data to the server.

I checked the original form using a form analyzer. And the form analyzer shows that the POST variables are sent like this:

array fundDistribution' => 
     array
        204891 => '20' (length=2)
        354290 => '20' (length=2)
        776401 => '20' (length=2)
        834788 => '40' (length=2)

The values are just for showing an example. But they will be the same length.

My problem is that the responding server does not recognise the values when I send them like this:

Array(
[104786] => 20
[354290] => 20
[865063] => 20
[204891] => 20
[834788] => 20)

My question is: How do I send the data so the server understands it?

Thank you!

A: 

You need to set post to true. Then you can pass the associative array in the POSTFIELDS option. as shown below.

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $your_array);
Mitch C
Thank you for your answer! I have set a lot of options. Among those, the options that you refer to are set as well.
Christopher
Passing an array to CURLOPT_POSTFIELDS changes the behavior of cURL a little. It will send the data as multiform/post-data and any parameters with a value that begins with '@' will be treated as filenames.
bobdiaes
A: 
function flatten_GP_array(array $var,$prefix = false){
        $return = array();
        foreach($var as $idx => $value){
                if(is_scalar($value)){
                        if($prefix){
                                $return[$prefix.'['.$idx.']'] = $value;
                        } else {
                                $return[$idx] = $value;
                        }
                } else {
                        $return = array_merge($return,flatten_GP_array($value,$prefix ? $prefix.'['.$idx.']' : $idx));
                }
        }
        return $return;
}
//...
curl_setopt($ch, CURLOPT_POSTFIELDS,flatten_GP_array($array));
Wrikken
Christopher
Nope, at the start, don't give a prefix, just leave the second parameter out of it. it's only meant to be set on recursion. I do however expect you to send an `array('fundDistribution'=>array(...rest..));` as input.
Wrikken
Yes, and I get something like this: Array( [fundDistribution[104786]] => 20 ...)
Christopher
Hmm, that wording might be off. _"I do expect you to"_ => _"I expect that you"_ ;)
Wrikken
@Christopher: yup, and that is something cURL understands (it does not get multidimensional array, only flat ones, which this function makes).
Wrikken
Okay, thank you for your help. The problem is that the server is still not getting the data. I will continue to search for other problems, because the site in question uses JavaScript alot.
Christopher
I found the problem, they use a JavaScript cookie to pass the parameters... REALLY stupid, but I should be able to find a work-a-round.
Christopher
A: 
bobdiaes