CURL和PHP - 发布多个键/值对数组

时间:2014-06-16 11:21:40

标签: php arrays forms post curl

我需要使用curl发布表单。

这是表格。

<form action="post.php" method="POST">
    <input name="tm[0][name]" value="name" type="hidden" maxlength="255">
    <input name="tm[0][mobile]" value="mobile" type="hidden" maxlength="10">
    <input name="tm[0][email]" value="email" type="hidden" maxlength="255">
    <input name="tm[0][address]" value="address" type="hidden">
    <input name="tm[0][pincode]" value="pincode" type="hidden" maxlength="6">
    <input name="tm[0][refCode]" value="refCode" type="hidden" maxlength="255">
    <input name="tm[0][partnerRef]" value="partnerRef" type="hidden" maxlength="255">

    <input name="tm[1][name]" value="name" type="hidden" maxlength="255">
    <input name="tm[1][mobile]" value="mobile" type="hidden" maxlength="10">
    <input name="tm[1][email]" value="email" type="hidden" maxlength="255">
    <input name="tm[1][address]" value="address" type="hidden">
    <input name="tm[1][pincode]" value="pincode" type="hidden" maxlength="6">
    <input name="tm[1][refCode]" value="refCode" type="hidden" maxlength="255">
    <input name="tm[1][partnerRef]" value="partnerRef" type="hidden" maxlength="255">
    <input type="submit" name="yt0" value="Submit">
</form>

这是我的代码:

$ch = curl_init();

$postArray = array(
    'api_key' => api_key,
    'api_secret' => api_secret
);

$data = array();
foreach( $postData as $key => $node ) {
    $postArray[ $key ] = array(
        'name' => $node[ 'name' ],
        'mobile' => $node[ 'mobile' ],
        'email' => $node[ 'email' ],
        'address' => $node[ 'address' ],
        'pincode' => $node[ 'pincode' ],
        'refCode' => $node[ 'refCode' ],
        'partnerRef' => $node[ 'partnerRef' ]
    );
}

curl_setopt( $ch, CURLOPT_URL, 'check.php' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-type: multipart/form-data' ) );
curl_setopt( $ch, CURLOPT_POST => true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $postArray );

$response = curl_exec( $ch );

我不知道如何制作数组,因为每个数组的键都相同。

我想为CURLOPT_POSTFILEDS创建数组。

感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:0)

将PHP的括号(例如name[])的输入名称映射到$_POST

中的数组是PHP的惯例

如果您尝试从html表单复制帖子,那么您只需要将帖子字段名称与原始格式的内容重新匹配即可:

foreach ( $postData['tm'] as $id => $node ) {
    foreach ( $node as $key => $value ) {
        // eg name="tm[1][name]"
        $postArray['tm['.$id.']['.$key.']'] = $value;
    }
}

(假设$postData相当于$_POST

答案 1 :(得分:0)

$postStr = "config[api_key]=api_key&config[api_secret]=api_secret&";;
foreach ($postData as $index => $node) {
    foreach ($node as $key => $value) {
        $postStr .= "data[{$index}][{$key}]=$value&";
    }

}
$postStr = rtrim($postStr, '&');

使用以下行

curl_setopt( $ch, CURLOPT_POSTFIELDS, $postStr );

您已制作两个包含数据的阵列,另一个具有配置。它将来会帮助你。

答案 2 :(得分:0)

您可以像这样添加顶部结构:

$postArray = array(
    'api_key' => api_key,
    'api_secret' => api_secret,
    'tm' => $_POST['tm'],
);

curl_setopt($ch, CURLOPT_POSTFIELD, $postArray);

除此之外,您应该将“Content-Type”标题保留为默认设置,即删除此行:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: multipart/form-data'));