1

用于处理表单 $_POST 提交的代码在大多数表单上运行良好,但在一组新表单上突然中断。我看不出表格本身有任何区别,因为它纯粹基于发布的值,我已经修复了它,但我很好奇为什么会突然出现问题。

在某些情况下,不处理特定的 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;
4

1 回答 1

1

在原始代码中,array_flip($RemoveFields)即使$RemoveFields未设置,您也可以调用。这失败了,因为参数 toarray_flip()必须是一个数组。

您应该使用isset()来保护两行代码:

if (isset($RemoveFields)) {
    if (!is_array($RemoveFields)) {
        $RemoveFields = array($RemoveFields);
    }
    $filteredarray = array_diff_key($_POST, array_flip($RemoveFields));
} else {
    $filteredarray = $_POST;
}
于 2019-01-26T01:02:02.877 回答