【问题标题】:Getting both or one Checkbox value in for each loop为每个循环获取两个或一个复选框值
【发布时间】:2012-07-25 12:37:08
【问题描述】:

我有一个表单,用户可以提交 1 个或 2 个复选框。它必须至少为 1。复选框设置如下所示:

    <input name="request['+fields+'][Type of Folder:]" 
id="cbpathCDB'+fields+'" type="checkbox" 
value="Content Database" class="cbShowPath required" data-id="'+fields+'"/>

    <input name="request['+fields+'][Type of Folder:]" 
id="cbpathEFS'+fields+'" type="checkbox" 
value="File System" class="efsShowPath required" data-id="'+fields+'"/>

还有其他输入也正在提交,所以我对每个输入都使用这个:

$a=$_REQUEST['request'];        

        foreach ($a as $name) {         
            foreach ($name as $key => $desc) {
                if ($desc !== '') {
                    $note.= $key;
                    $note.= $desc;
                }
            }
        }

如果用户选中一个复选框,这将获得所有数据,但如果用户同时选中两个复选框,则仅显示 FIRST 复选框的值。

我需要在这里做什么才能获得这两个值?

我是否需要在这里进行第三次 foreach 才能获得 name="request[][][]"?

编辑:这里有一些更新...

如果我使用他的 foreach:

foreach ($a as $name) {         
            foreach ($name as $key => $desc) {
                foreach ($desc as $d){
                        $note.= $key;
                        $note.= $d; 
                }
                if ($desc !== '') {
                        $note.= $key;
                        $note.= $desc;
                }
            }
        }

我得到了这些结果: 文件夹类型:文件夹内容数据库类型:文件夹文件系统类型:数组

如果我使用他的 foreach:

        foreach ($a as $name) {         
        foreach ($name as $key => $desc) {
            if ($desc !== '') {
                $note.= $key;
                $note.= $desc;
            }
        }
    }

我得到了这些结果: 文件夹类型:数组

【问题讨论】:

  • 这些是一些非常丑陋的字段名称

标签: php checkbox foreach


【解决方案1】:

将表单元素的名称更改为

request['+fields+'][Type of Folder:][]

所以对于你的代码

<input name="request['+fields+'][Type of Folder:][]" id="cbpathCDB'+fields+'" type="checkbox" value="Content Database" class="cbShowPath required" data-id="'+fields+'"/>

<input name="request['+fields+'][Type of Folder:][]" id="cbpathEFS'+fields+'" type="checkbox" value="File System" class="efsShowPath required" data-id="'+fields+'"/>

这将使$_REQUEST['request']["'+fields+'"]['Type of Folder:'] 成为一个数组,其中包含每个复选框的值。

您需要修改代码中使用$desc 的部分以包含另一个循环。

foreach ($a as $name) {         
  foreach ($name as $key => $desc) {
    switch (gettype($desc)) {
      case 'array':
        foreach ($desc as $i => $item) {
          $note .= "{$key}[{$i}]";
          $note .= $item;
        }
        break;
      case 'string':
      default:
        if ($desc !== '') {
          $note.= $key;
          $note.= $desc;
        }
    }
  }
}

【讨论】:

  • ZOIX!那是快人。几分钟前我确实尝试过,我得到了 ARRAY 的结果。为什么名字不只通过 ARRAY?
  • 不确定你的意思。您问题中两个复选框的名称相同,因此将[] 附加到每个复选框的字段名称将允许两者都映射到['request']["'+fields+'"]['Type of Folder:']。您可以使用复选框对应的数组索引来访问每个。 $_REQUEST['request']["'+fields+'"]['Type of Folder:'][0]$_REQUEST['request']["'+fields+'"]['Type of Folder:'][1]等……
  • 是的,没错。这对我来说很有意义,谢谢。我从 foreach 中得到回显的是数组,这在某种程度上是正确的,但我不确定为什么我没有得到回显的结果 ---> 文件夹类型:内容数据库,文件夹类型:文件系统...我刚刚收到 Array 的字样。其中文件夹类型在名称=[][][] 和值 = Conent DB 或文件系统中找到
  • 感谢@Deefour 的帮助。我可以通过添加第三个 foreach 来获取每个复选框的值: foreach ($a as $name) { foreach ($name as $key => $desc) { foreach ($desc as $d){ if ($desc !== '') { $note.= $key; $注.= $d; } } } },但是我没有得到任何其他结果......我不能得到二维数组的多个输入的结果,也不能像这个复选框的想法一样从一个 3 维的输入中提取结果吗?
  • 因为您的$_REQUEST 对象是混合类型,您需要查看每个输入的类型。您不能盲目地循环遍历每个输入,将它们全部视为数组或字符串;您需要独立处理每种类型的输入(因此我在上面的编辑中使用了 switch 语句)
猜你喜欢
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 2011-12-04
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2019-02-17
相关资源
最近更新 更多