所以我有一个生成 html 调查的 3rd 方调查工具,对于给定问题中的多选复选框,它会将它们命名为相同的:
<input type="checkbox" value="1" id="V25_1" name="V25">
<input type="checkbox" value="2" id="V25_2" name="V25">
有没有办法可以在 PHP 中检索所有选定的值?$_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]
你可以在表单提交之前运行这样的东西:
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("id"));
});
或者
$(":checkbox").each(function(){
$(this).attr("name",$(this).attr("name")+"[]");
});
当您有多个具有相同“名称”参数的元素时,可以检索所有变量。在互联网上搜索了很多解决方案后,我编写了以下 php 脚本,该脚本获取原始帖子数据并对其进行解析:
<?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 所做的那样。这里可能有很大的改进空间,我敢肯定并不是所有情况都考虑在内,但它对我的应用程序很有效。
可以提出改进的建议表示赞赏。