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

ユーザーが 1 つのチェックボックスをオンにすると、すべてのデータが正常に取得されますが、ユーザーが両方のチェックボックスをオンにすると、最初のチェックボックスの値のみが表示されます。

両方の値を取得するには、ここで何をする必要がありますか?

name="request[][][]" を取得するには、ここで 3 番目の foreach が必要ですか?

編集:ここでいくつかの更新...

彼の foreach を使用する場合:

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

これらの結果がエコーアウトされます: Type of Folder:Content DBType of Folder:File SystemType of Folder:Array

彼の foreach を使用する場合:

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

これらの結果がエコーアウトされます: Type of Folder:Array

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 に答える