问题描述
我正在发布一个 html 表单,其中多个输入名称如下所示:left_impedance_TYMP[]
然而,当在冷融合中访问它们时,它会忽略空字段。
FORM["left_impedance_TYMP[]"]
检查 POST 请求似乎是正确的。
有解决办法吗?
解决方法
当您有多个同名表单域时,无论是否带有括号,GET
和 POST
都会忽略空域值。
表格:
<form action="brackets_process.cfm" method="GET">
<input type="text" name="foo" value="A"><br>
<input type="text" name="foo" value="B"><br>
<input type="text" name="foo" value="C"><br>
<input type="text" name="foo" value="D"><br>
<button>Submit</button>
</form>
处理:
<cfdump var="#url#" label="URL">
<p></p>
<cfdump var="#form#" label="FORM">
一个 GET
查询字符串 brackets_process.cfm?foo=A&foo=B&foo=C&foo=D
A POST
brackets_process.cfm
如果给 foo[]
添加方括号,则查询字符串被编码并且结构键包含方括号。
brackets_process.cfm?foo%5B%5D=A&foo%5B%5D=B&foo%5B%5D=C&foo%5B%5D=D
POST
仍然是提交值的列表。
将 POST 数据转换为数组。
PHP 自动将以括号结尾的字段名称转换为数组。 ColdFusion 有一个 @Alex linked 的 application.cfc 设置 this.sameformfieldsasarray=true;
。问题是它是一个全局设置,可能会改变大量现有功能。
启用该设置后,POST
会将值转换为数组。
A GET
坚持一个列表。因此,如果省略值 (B),则 url["foo[]']
的值是一个包含 4 个元素的列表,其中第二个元素为空。
然而,从 POST
中留下值 (B) 会返回一个包含 4 个元素的数组,其中第二个值为空。
因此,您需要确定是否要进行影响所有当前功能的全局更改,或者是否可以添加一些条件逻辑来检查列表中的元素数量与预期的字段数量。
我过去编写过代码,将字段命名为 name="fieldName.#counterValue#"
之类的名称,然后解析字段名称以设置列表或数组中的位置值以说明空值。