设置API-取消选中复选框时未定义的索引

时间:2016-09-18 作者:Ben H

我知道这可能是重复的,但我无法理解之前的问题。

我在设置页面上有一个复选框。第一次加载页面时一切都正常,如果我选中该框并保存所有内容,则一切正常。如果取消选中,则会出现以下错误:

Notice: 未定义索引:dat_checkbox_field_0 在里面.../wp-content/plugins/divi-auto-testimonials/admin/dat-options.php 在第49行

功能:

function dat_checkbox_field_0_render(  ) { 

    $options = get_option( \'dat_settings\' );
    ?>
    <input type=\'checkbox\' name=\'dat_settings[dat_checkbox_field_0]\' <?php checked( $options[\'dat_checkbox_field_0\'], 1 ); ?> value=\'1\'>
    <?php

}
第49行是输入html。

我还收到了与此代码相同的错误:

$options = get_option( \'dat_settings\' );
if( $options[\'dat_checkbox_field_0\'] != \'1\' ) {
 include_once "admin/notification.php";
}
据我所知,我需要将值设置为null 我认为,但我不完全确定这是否正确,如果正确,如何正确。

3 个回复
最合适的回答,由SO网友:Ben H 整理而成

通过执行以下操作解决了此问题:

function dat_checkbox_field_0_render(  ) { 

    $options = get_option( \'dat_settings\' );
    $a = $options;
if (array_key_exists("dat_checkbox_field_0",$a))
  { } else { 
    $options[\'data_checkbox_field_0\'] = false;
  }
    ?>
      <input type=\'checkbox\' name=\'dat_settings[dat_checkbox_field_0]\' <?php checked( $options[\'dat_checkbox_field_0\'], 1 ); ?> value=\'1\'>
    <?php

}

SO网友:Otto

$options = get_option( \'dat_settings\' );
$options[\'dat_checkbox_field_0\'] = empty( $options[\'dat_checkbox_field_0\'] ) ? 0 : 1;
基本上,如果变量为“空”,意味着它没有设置,或者它等于false(零限定),那么它将被赋值为0。如果设置为true或等效值(一个符合条件),则将为其赋值1。

或者,为相同的结果反转逻辑(对于喜欢在三元语句中首先出现true的纯粹主义者):

$options[\'dat_checkbox_field_0\'] = !empty( $options[\'dat_checkbox_field_0\'] ) ? 1 : 0;

SO网友:alev

回答问题和解决问题的更好方法是让表单实际发送一个零值,并让WordPress首先用零值保存该键。

我之所以在这里发布这篇文章,是因为我使用了错误的关键字进行搜索,只找到了与这里类似的答案,这些答案可以操纵表单输出以解决Undefined index: 错误但这些解决方案仍将从选项数组中删除密钥。这可能会在其他地方造成问题。

添加另一个隐藏input 字段将实际使表单在数据库中保存零值,如下所示:

<form>
  <input type=\'hidden\' value=\'0\' name=\'selfdestruct\'>
  <input type=\'checkbox\' value=\'1\' name=\'selfdestruct\'>
</form>
确保将input 高于常规值\'0\' 与常规输入字段中的名称相同。

答案就在这里:https://stackoverflow.com/a/1992745/4688612

请把所有的信用都寄到那张海报上。

相关推荐

500 Internal Errors

我正在将当前的Eduma主题更新为最新版本(3.0.9.1),目前的版本是3.0.7。我正在运行WordPress 4.7.5。但是,在运行更新时,我得到Update Failed: Internal Server Error 安装过程中的消息。所以我启动了这个过程,它运行了一分钟,然后它就停止了工作,我陷入了维护模式。所以我必须手动删除.maintenance 来自我的服务器的文件。我截图了我在错误中看到的内容。我在WordPress网站上运行了调试模式,这就是我所拥有的[31-May-2017 15: