所以我有一个第三方调查工具可以生成html调查,对于给定问题中的多选复选框,它会将它们命名为:
<input type="checkbox" value="1" id="V25_1" name="V25">
<input type="checkbox" value="2" id="V25_2" name="V25">
有没有办法可以在PHP中检索所有选定的值? 默认情况下,$ _POST似乎只存储最后选择的值。
答案 0 :(得分:1)
您的代码应大致如下:
<select multiple="multiple">
<input type="checkbox" value="1" id="V25_1" name="V25[]">
<input type="checkbox" value="2" id="V25_2" name="V25[]">
</select>
V25[]
表示您可以从数组中获取值。例如$_GET['V25'][0]
您还可以根据需要指定索引:
V25[1]
或V25[a]
答案 1 :(得分:0)
您可以在表单提交之前运行类似的内容:
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("id"));
});
或
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("name")+"[]");
});
答案 2 :(得分:0)
当您有多个具有相同“name”参数的元素时,可以检索所有变量。 经过互联网搜索解决方案后,我编写了以下php脚本来抓取原始帖子数据并解析它:
<?php
function RawPostToArray() {
$rawPostData = file_get_contents("php://input");
if($rawPostData) {
$rawPostData = explode('&', $rawPostData);
if($rawPostData && is_array($rawPostData) && count($rawPostData)) {
$result = array();
foreach($rawPostData as $entry) {
$thisArray = array();
$split = explode('=', urldecode($entry), 2);
$value = (count($split) == 2) ? $split[1] : '';
if(array_key_exists($split[0], $result)) {
if(is_array($result[$split[0]])) {
$result[$split[0]][] = $value;
}
else {
$thisArray[] = $result[$split[0]];
$thisArray[] = $value;
$result[$split[0]] = $thisArray;
}
}
else {
$result[$split[0]] = $split[1];
}
}
return $result;
}
else return array();
}
else return array();
}
?>
当HTML正确编码时,任何重复的'名称'都会被压缩到结果中的数组中,就像$ _POST一样。 这里可能还有很大的改进空间,我确信不是所有的情况都会被考虑在内,但它适用于我的应用程序。
建议在可以进行改进的地方受到赞赏。