具有相同名称的HTML多个复选框=到PHP $ _POST

时间:2013-06-28 20:41:16

标签: php html post checkbox

所以我有一个第三方调查工具可以生成html调查,对于给定问题中的多选复选框,它会将它们命名为:

<input type="checkbox" value="1" id="V25_1" name="V25">
<input type="checkbox" value="2" id="V25_2" name="V25">

有没有办法可以在PHP中检索所有选定的值? 默认情况下,$ _POST似乎只存储最后选择的值。

3 个答案:

答案 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一样。 这里可能还有很大的改进空间,我确信不是所有的情况都会被考虑在内,但它适用于我的应用程序。

建议在可以进行改进的地方受到赞赏。