2013-06-28 107 views
0

所以我有一個第三方的調查工具,可生成HTML調查,並在給定的問題多選複選框,將他們的名字都一樣:

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

有沒有一種方法可以在PHP中檢索所有選定的值? 默認情況下,$ _POST似乎只存儲最後選擇的值。

+0

理想情況下,您希望命名以'[]'結尾的複選框,以便您可以在PHP中獲取數組。您不能更改複選框的名稱? – j08691

回答

0

有可能如果有多個具有相同「名稱」參數的元素,則檢索所有變量。 多在網上淘了一個解決方案後,我寫了下面的PHP腳本,它抓住原始post數據,並對其進行解析:

<?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的做法。 這裏可能有很大的改進空間,我相信並不是所有的情況都可以考慮,但它對我的應用程序來說效果很好。

建議表示讚賞可以改進的地方。

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]

+0

我明白,我上面有什麼是不正確的標記,但正如我所說,這是一個第三方工具。提交數據時,Firebug會在發送的發佈數據中顯示多個「V25」實例。有沒有辦法檢索它? – SuperJer

+0

那麼,使用JavaScript和硬編碼 - 是:D – vikingmaster

+0

雖然這個答案中的信息是正確的,但它不能準確地解決原始問題。在研究了一堆之後,我能夠提出一種適用於所描述情況的解決方案。 – SuperJer

0

您可以運行類似這樣的表格前提交:

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

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