保存带有复选框的空数组时出现“未定义的索引”错误

时间:2016-08-15 作者:Ethan O\'Sullivan

在我的插件设置页面中,我有一个复选框列表,可以将值存储到数组中。虽然它按预期工作,但每当我取消选中所有复选框并保存这些更改时,都会出现以下错误:

Notice: Undefined index: 删除\\u字段在。。。\\设置配置文件。php第19行

以下是相关代码:

if ( isset( $_POST[\'dsbl_options\'] ) && !empty( $_POST[\'dsbl_options\'] ) ) {
    update_option( \'dsbl_remove\', $_POST[\'remove_field\'] ); // (Line 19)
}
其余源代码可在此处找到:GitHub

通过对类似错误的在线研究,我发现建议将$_POST[\'remove_field\'] 使用isset. 但是,这不会存储插件设置中复选框中的值。

如上所述,只有在取消选中并保存所有复选框时,才会显示此错误。在数组中保存空值时,似乎存在问题。虽然插件设置按预期工作,但我想解决这个问题。

2 个回复
最合适的回答,由SO网友:jdm2112 整理而成

我没有看到以前的原始片段,因此我不再确定上下文。你收到的未定义索引通知告诉你$_POST[\'remove_fiel‌​d\'] 不存在。如果数组中未设置复选框,则$_POST 数组将没有索引\'remove_field\', 您将看到错误。

要防止这种情况发生,请确保它存在:

if ( isset( $_POST[\'remove_field\'] ) ) {
    // do stuff with the values
}
在OO环境中,更常见的解决方案是在不存在值的情况下退出,这样您就可以扭转您的状况:

if ( !isset( $_POST[\'remove_field\'] ) ) {
    return;
}

SO网友:Ethan O\'Sullivan

如上所述here (感谢bcworkz), 我可以通过插入NULL 如果所有复选框均未选中:

if ( isset( $_POST[\'dsbl_options\'] ) && !empty( $_POST[\'dsbl_options\'] ) ) {
    if ( array_key_exists(\'remove_field\', $_POST )) {
        update_option( \'dsbl_remove\', $_POST[\'remove_field\'] );
    }
    else { // When all options are unchecked, set array to null
        update_option( \'dsbl_remove\', NULL );
    }
}