0

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

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

如果我使用他的 foreach:

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

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

4

1 回答 1

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;
        }
    }
  }
}
于 2012-07-25T12:41:58.840 回答