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
我敢肯定,没有与处理窗体本身作为表单上的其他元素有自己的价值观保存得很清楚该文件的代码中的问题(单选按钮,文本框,下拉所有的工作)。复选框不会,它们会拒绝$ _POST HTML元素的值,并且只需继续输出该名称两次。
例如,上面列出的名为smoked_if的数组示例中没有列出的表单中的另一个元素是一个单选按钮对,询问申请人是否吸烟。这是来自最近应用程序的示例输出。
可以看出我的代码的预期结果正在执行。
smoked_if no
我在这里损失,因为这不仅违背了$ _ POST本身,而是因为在表格上的所有其他元素都贴出他们的价值观没有问题,它告诉我的功能有一个与复选框问题元素和$ _POST。
任何援助不胜感激。
尝试把TL; DR版本放在最上面;) – Rob
相关?:http://stackoverflow.com/questions/8613250/process-html-checkboxes-and-their-values – GreenMatt
你做了一个'var_dump( $ _POST)',以确保你的'是'值甚至显示出来?表单字段中的“id”值不会被提交,只是'name'属性。 –