复选框选项具有多个值的$_POST键


$_POST key with multiple values for checkbox options

我正在使用http_build_query构建$_POST查询,但我需要为一个键传输多个值。该问题涉及美国海军天文台的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"的数组发送,但这并没有如预期的那样起作用。

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

$_POST['colbits'] == ['cb_id','cb_ra','cb_mag']

。。。正确的方法是在"colbits"定义后放一对方括号,如下所示:

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

通过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",
    ),
);