TL;DR 版本
我有一个包含数百个 html 输入元素的大表单,我制作了一个 php 数组来存储其中的所有元素名称。当我运行我的 process.php 文件时,它使用循环遍历该数组并创建一个新数组,该数组的键是每个元素的名称,该数组的值是每个元素的值。我知道这段代码作为文本框、单选按钮和下拉选择的元素值工作正常。复选框没有将值放入数组,而是键和值读取相同的内容,即元素的名称。为什么 $_POST 给我复选框的名称或 ID,而不是它的值?
完整解释 /w 代码示例:
我遇到的问题对我来说似乎很不寻常,因为据我了解它与 $_POST 的工作方式背道而驰。
无论如何,过去一年我一直在开发一个旅游保险网站,它即将完成。客户希望我创建一个表单版本,他们可以在人们提交申请后查看该表单,它将从他们选择的文件中获取值。
我的问题是 $_POST 没有获取我的复选框元素的值,而是获取它们的名称或 ID(两者相同,因此我无法确定它获取的是哪个)。$_POST 成功获取所有单选、文本和下拉元素的值,而不是复选框。
我的 process.php 文件中有一个非常大的数组,因为表单非常大。我所做的是创建一个数组,其中包含我希望访问的每个元素的名称。下面是数组遵循的结构示例,在这里发布整个内容(表格上的 400 多个元素)太大了。
$form_data = array
('trav_emer_med_insur',
'trav_emer_single',
'trav_emer_single_date_go',
'trav_emer_single_date_ba',
'trav_emer_single_days',
'trav_emer_annual',
'trav_emer_annual_date_go',
'trav_emer_annual_days',
'trav_emer_extend',
'trav_emer_extend_date_go',
'trav_emer_extend_date_ef',
'trav_emer_extend_date_ba',
'trav_emer_extend_days',
);
这是在 process.php 上运行以创建用户数据文件的代码,该文件保存在服务器上的受保护文件夹中。
// Create user output data
$out_data = array();
$count = count($form_data);
for( $i = 0; $i < $count; $i++ )
{
if(empty($_POST[$form_data[$i]])) {
$out_data[$form_data[$i]] = " ";
}
else {
$out_data[$form_data[$i]] = $_POST[$form_data[$i]];
}
}
//Set variable names for new file
$dir = "/home/imelnick/public_html/getawayinsured.ca/userdata/";
$timestamp=date("YmdGis");
$name = $out_data['txtApp1Name'];
$value = str_replace(" ", "", $name);
$item = $value . "^" . $timestamp . ".txt";
$filename = $dir . $item;
//Put data in file
//Open file for writing
$fileHandle = fopen($filename, 'w') or die("Can't open file");
//Write contents of out_data array to file
foreach ($out_data as $key => $value) {
$fileLine = $key . "\t" . $value . "\r\n";
fwrite($fileHandle, $fileLine);
}
//Close file
fclose($fileHandle);
数组中的第一个名称块属于复选框,它们遵循以下格式:
<input type="checkbox" name="trav_emer_med_insur" id="trav_emer_med_insur_if" value="YES" class="form_elements" onClick="if(this.checked){document.getElementById('trav_emer_med_options').style.display='block';}else{document.getElementById('trav_emer_med_options').style.display='none';}"/>
onClick 语句扩展了一个 div,其中包含为申请人提供更多选项的附加复选框。
我从表单数据创建的输出数据数组具有数组中每个项目的键作为元素的名称,数组中每个项目的值是相应 HTML 元素的值。
拆分数组并写入 $key/$value 组合后,预期值$_POST[$form_data[0]] (note: $form_data[0] = trav_emer_med_insur)
是上述复选框代码的值,value="YES"
. 但是文件中的输出如下所示。
trav_emer_med_insur trav_emer_med_insur
我很确定处理表单本身的代码没有问题,因为表单上的其他元素的值很好地保存到文件中(单选按钮、文本框、下拉菜单都可以使用)。Checkboxes 没有,它们拒绝 $_POST HTML 元素的值,只是不断地输出名称两次。
例如,上面我的数组示例中未列出的表单中的另一个名为smoked_if 的元素是一个单选按钮对,它询问申请人是否吸烟。这是最近应用程序的示例输出。
可以看出我的代码的预期结果正在执行。
smoked_if no
我在这里不知所措,因为这不仅与 $_POST 本身的功能相矛盾,而且由于表单上的所有其他元素的值都没有问题地发布,它告诉我复选框元素和 $_POST 存在问题。
非常感谢任何帮助。