为每个循环获取两个或一个Checkbox值

时间:2012-07-25 12:37:09

标签: php checkbox foreach

我有一个表单,用户可以提交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;
                }
            }
        }

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

为了获得这两个值,我需要做什么?

我在这里需要第3个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;
                }
            }
        }

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

如果我使用他的foreach:

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

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

1 个答案:

答案 0 :(得分:2)

将表单元素的名称更改为

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;
        }
    }
  }
}