Php 如何通过cURL发布数组字段数据?

Php 如何通过cURL发布数组字段数据?,php,arrays,post,curl,Php,Arrays,Post,Curl,我需要以以下形式提交帖子数据: first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange&fruit[]=Banana 然而,使用下面的代码,我得到的数据发布为: first_name=Joe&last_name=Jones&fruit[]=Array 如何更改cURL脚本以提交数据,如上面第一个示例所示 以下是当前代码: <?php // Setup empty fields

我需要以以下形式提交帖子数据:

first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange&fruit[]=Banana
然而,使用下面的代码,我得到的数据发布为:

first_name=Joe&last_name=Jones&fruit[]=Array
如何更改cURL脚本以提交数据,如上面第一个示例所示

以下是当前代码:

<?php
// Setup empty fields
$first_name = $last_name = $fruit = "";

// Session
session_start();
session_register('first_name');
session_register('last_name');
session_register('fruit');
$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['fruit'] = $fruit; 

// Redirect valid form to process
if($valid)
    //set POST variables
    { $url = 'http://example.com/submit.php';
    $fields = array( //your parameters here
                            'first_name' => $first_name,
                            'last_name' => $last_name,
                            'fruit[]' => $fruit
                    );

    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));

    //execute post
    $result = curl_exec($ch);

    if(curl_errno($ch)) {
        print 'CURL Error: '.curl_error($ch);
    }

    echo http_build_query($fields);

    //close connection
    curl_close($ch);

}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    </head>
    <body>
        <div>

        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="submit_data" method="POST" id="submit_data">

                    <p><label for="first_name">First Name</label><input type="text" id="first_name" size="20" maxlength="120" name="first_name" /></p>
                    <p><label for="last_name">Surname</label><input type="text" id="last_name" size="20" maxlength="120" name="last_name" /></p>
                    <p><label for="fruit">Pick some fruit</label>
                        <select id="fruit" name="fruit" multiple="multiple">
                            <option value="Apple">Apple</option>
                            <option value="Orange">Orange</option>
                            <option value="Pear">Pear</option>
                            <option value="Banana">Banana</option>
                        </select></p>

            <input type="submit" value="Submit" />
        </form>
        </div>
    </body>
</html>
So 2问题:

1) 未提交水果数组 2) 方括号格式需要保留,但已替换为%5B%5D

我需要的格式是:

    first_name=Joe&last_name=Jones&fruit[]=Apple&fruit[]=Orange
你知道我做错了什么吗?谢谢

使用:


您正在
foreach
循环内的数组上进行串联

您的阵列:

'fruit' => array($fruit)
当执行下面这样的连接时,您将在
$value
中以纯文本形式获得
数组

$fields_string .= $key.'='.$value.'&';
因此,最终您将发布:
first\u name=Joe&last\u name=Jones&fruit=Array

我的建议是使用
http\u build\u query()
并删除手动生成的post数据

curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));

不要手动生成查询字符串。改为使用。这是否会替换“//url”并为“发布”行提供数据?我正在尝试在正确的位置添加http\u build\u查询,但失败。谢谢。是的,它将返回字符串,可以直接传递到
curl\u setopt
,请参阅我的更新帖子。谢谢。这会发布,但打印数据会显示first_name=Joe&last_name=Jones&fruit=Thank Sabuj。我如何添加生成的查询的打印,以便检查它现在的格式是否正确?感谢
echo http\u build\u查询($fields)可以帮你。如果您想从服务器端获取打印(如果您正在发布到服务器),则执行
print\r($\u POST)你好,萨布吉。我试着添加了回音,显示了代码,谢谢。然而,我仍然对提交的数据有疑问。我已经更新了我的原始问题,以显示使用http_build_查询的新代码。你能告诉我哪里出了问题吗?感谢you@MCG也许你的水果是空的。试试这个
$fruit=array('mango','banana')谢谢@Sabuj。如何从人们选择一个或多个水果的多选字段填充卷曲数组?我在上面原始问题中的代码没有实现这一点。非常感谢。
'fruit' => array($fruit)
$fields_string .= $key.'='.$value.'&';
curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($fields));