用于处理$ _POST提交表单的代码在大多数表单上都能正常工作,但突然在一组新表单上中断。我看不到表单本身有任何差异,因为它完全基于发布的值,并且已经修复,但是我很好奇为什么会出现突然的问题。
在某些情况下,某些特定的帖子值将不被处理,而在不需要时,它们以逗号分隔的列表形式出现在$ RemoveFields中,该列表将转换为数组,并在一组表单上转换为数组$ RemoveFields是否具有任何值都无关紧要,但是在另一组上,它为空时会崩溃。
通过添加条件,我可以使其生效,但是谁能告诉我原始代码出了什么问题?新旧都在下面。第一种仅适用于某些形式,而第二种似乎适用于所有形式。
原始代码:
// Remove unneeded fields specified in $RemoveFields variable
if (isset($RemoveFields) && !is_array($RemoveFields)) $RemoveFields = array($RemoveFields);
$filteredarray = array_diff_key($_POST, array_flip($RemoveFields));
相同的代码,但带有$ filteredarray值的条件:
// Remove unneeded fields specified in $RemoveFields variable
if (isset($RemoveFields) && !is_array($RemoveFields)) $RemoveFields = array($RemoveFields);
$filteredarray = (isset($RemoveFields)) ? array_diff_key($_POST, array_flip($RemoveFields)) : $_POST;
答案 0 :(得分:1)
在原始代码中,即使未设置array_flip($RemoveFields)
,您也会调用$RemoveFields
。之所以失败,是因为array_flip()
的参数必须是一个数组。
您应该使用isset()
保护这两行代码:
if (isset($RemoveFields)) {
if (!is_array($RemoveFields)) {
$RemoveFields = array($RemoveFields);
}
$filteredarray = array_diff_key($_POST, array_flip($RemoveFields));
} else {
$filteredarray = $_POST;
}