所以我有一個第三方的調查工具,可生成HTML調查,並在給定的問題多選複選框,將他們的名字都一樣:
<input type="checkbox" value="1" id="V25_1" name="V25">
<input type="checkbox" value="2" id="V25_2" name="V25">
有沒有一種方法可以在PHP中檢索所有選定的值? 默認情況下,$ _POST似乎只存儲最後選擇的值。
所以我有一個第三方的調查工具,可生成HTML調查,並在給定的問題多選複選框,將他們的名字都一樣:
<input type="checkbox" value="1" id="V25_1" name="V25">
<input type="checkbox" value="2" id="V25_2" name="V25">
有沒有一種方法可以在PHP中檢索所有選定的值? 默認情況下,$ _POST似乎只存儲最後選擇的值。
有可能如果有多個具有相同「名稱」參數的元素,則檢索所有變量。 多在網上淘了一個解決方案後,我寫了下面的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的做法。 這裏可能有很大的改進空間,我相信並不是所有的情況都可以考慮,但它對我的應用程序來說效果很好。
建議表示讚賞可以改進的地方。
您的代碼應該大致如下:
<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]
我明白,我上面有什麼是不正確的標記,但正如我所說,這是一個第三方工具。提交數據時,Firebug會在發送的發佈數據中顯示多個「V25」實例。有沒有辦法檢索它? – SuperJer
那麼,使用JavaScript和硬編碼 - 是:D – vikingmaster
雖然這個答案中的信息是正確的,但它不能準確地解決原始問題。在研究了一堆之後,我能夠提出一種適用於所描述情況的解決方案。 – SuperJer
您可以運行類似這樣的表格前提交:
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("id"));
});
或
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("name")+"[]");
});
理想情況下,您希望命名以'[]'結尾的複選框,以便您可以在PHP中獲取數組。您不能更改複選框的名稱? – j08691