【问题标题】:HTML multiple checkboxes with identical name= into PHP $_POSTHTML 多个具有相同名称的复选框= 到 PHP $_POST
【发布时间】:2013-06-28 20:41:15
【问题描述】:

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

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

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

【问题讨论】:

  • 理想情况下,您希望命名以[] 结尾的复选框,以便在 PHP 中获得一个数组。您不能更改复选框的名称?

标签: php html post checkbox


【解决方案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]

【讨论】:

  • 我知道我上面的标记不正确,但就像我说的,这是一个 3rd 方工具。提交数据后,Firebug 在发送的发布数据中显示多个“V25”实例。有没有办法找回来?
  • 好吧,使用 javascript 和硬编码 - 是的:D
  • 虽然此答案中的信息是正确的,但它并不能准确地解决原始问题。在研究了一堆之后,我想出了一个适用于所描述情况的解决方案。
【解决方案2】:

你可以在表单提交之前运行这样的东西:

$(":checkbox").each(function(){
   $(this).attr("name",$(this).attr("id"));
});

$(":checkbox").each(function(){
   $(this).attr("name",$(this).attr("name")+"[]");
});  

【讨论】:

    【解决方案3】:

    当您有多个具有相同“名称”参数的元素时,可以检索所有变量。 在网上搜索了很多解决方案后,我编写了以下 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 所做的那样。 这里可能还有很大的改进空间,我敢肯定并不是所有情况都考虑在内,但它对我的应用程序很有效。

    欢迎提出可以改进的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 2011-12-20
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多