在我的插件设置页面中,我有一个复选框列表,可以将值存储到数组中。虽然它按预期工作,但每当我取消选中所有复选框并保存这些更改时,都会出现以下错误:
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
. 但是,这不会存储插件设置中复选框中的值。
如上所述,只有在取消选中并保存所有复选框时,才会显示此错误。在数组中保存空值时,似乎存在问题。虽然插件设置按预期工作,但我想解决这个问题。
最合适的回答,由SO网友:jdm2112 整理而成
我没有看到以前的原始片段,因此我不再确定上下文。你收到的未定义索引通知告诉你$_POST[\'remove_field\']
不存在。如果数组中未设置复选框,则$_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 );
}
}