带有多个复选框值的$ _POST键

时间:2014-04-16 21:56:21

标签: php http-post

我正在使用http_build_query构建$ _POST查询,但我需要为一个密钥传输多个值。该问题涉及United States Naval Observatory Flagstaff Station中的HTML表单。在Catalogue Lists部分中,您可以选择要显示的多个值。

提交请求后,您将获得搜索参数的概述。简短摘录显示多个值指的是同一个键。

...
colbits = cb_id
colbits = cb_ra
...
colbits = cb_mag
...

问题是我没有机会在PHP中为同一个密钥传输多个值。如果我按照以下方式执行,则密钥的值将被覆盖。

$url = 'http://www.nofs.navy.mil/cgi-bin/tfch4.test.cgi';
$data = array('colbits' => 'cb_id', 'colbits' => 'cb_ra', 'colbits' => 'cb_mag');

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data),
    ),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

这有什么解决方法吗?我已经尝试将不同的值作为关键字“colbits”的数组发送,但这并没有按预期工作。

2 个答案:

答案 0 :(得分:0)

如果你想在$ _POST中获得一个名为'colbits'的数组:

$_POST['colbits'] == ['cb_id','cb_ra','cb_mag']
正确的方法是在'colbits'定义之后放一对方括号,喜欢这样:

$data = array('colbits[]' => 'cb_id', 'colbits[]' => 'cb_ra', 'colbits[]' => 'cb_mag');

答案 1 :(得分:0)

通过http_build_query将params附加到生成的查询字符串中就可以了。

$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)."&colbits=cb_id&colbits=cb_altid&colbits=cb_ra&colbits=cb_mag",
    ),
);