在我的插件选项页面中,我使用了一个选项复选框。当它检查时,这没关系。但当我取消选中它时,显示错误,这个:
Undefined index: enable in C:\xampp\htdocs\horror\wp-content\plugins\self-photo-gallery\photo-gallery.php on line 173
/>
第173行是:
<input id="spg_settings[enable]" name="spg_settings[enable]" type="checkbox" value="1" <?php checked(1, $spg_options['enable']); ?> />
但还有另一个字段
<input type="text" id="spg_settings[twitter_url]" name="spg_settings[twitter_url]" value="<?php echo $spg_options['twitter_url']; ?>"/>
它工作正常,并没有显示任何这样的错误。
答案 0 :(得分:2)
添加单引号。
使用spg_settings['enable']
代替
始终在字符串文字数组索引周围使用引号。例如,$ foo [&#39; bar&#39;]是正确的,而$ foo [bar]则不是。但为什么?在旧脚本中遇到这种语法是很常见的:
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
这是错误的,但它确实有效。原因是这段代码有一个未定义的常量(bar)而不是一个字符串(&#39; bar&#39; - 注意引号)。 PHP可能在将来定义常量,不幸的是,这些代码具有相同的名称。它的工作原理是因为PHP自动将一个裸字符串(一个与任何已知符号不对应的不带引号的字符串)转换为包含裸字符串的字符串。例如,如果没有名为bar的已定义常量,那么PHP将替换为字符串&#39; bar&#39;并使用它。
<强> UPDATE1:强>
替换
<input type="text" id="spg_settings['twitter_url']" name="spg_settings['twitter_url']" value="<?php echo $spg_options['twitter_url']; ?>"/>
使用以下代码行
<input type="text" id="spg_settings['twitter_url']" name="spg_settings['twitter_url']" value="<?php echo (isset($spg_options['twitter_url'])) ? $spg_options['twitter_url'] : ''; ?>"/>
<强> UPDATE2:强>
并替换
<input id="spg_settings['enable']" name="spg_settings['enable']" type="checkbox" value="1" <?php checked(1, $spg_options['enable']); ?> />
与
<input id="spg_settings['enable']" name="spg_settings['enable']" type="checkbox" value="1" <?php checked(1, (isset($spg_options['enable'])) ? $spg_options['enable'] : 0); ?> />
有关详细信息,请查看here
答案 1 :(得分:2)
试试这个
<input id="<?php echo $spg_settings['enable'];?>" name="<?php echo $spg_settings['enable'];?>" type="checkbox" value="1" <?php checked(1, $spg_options['enable']); ?> />
答案 2 :(得分:0)
尝试使用引号并在使用数组索引值时执行print
:
<input id="<?php print $spg_settings['enable'];?>" name="<?php print $spg_settings['enable'];?>" type="checkbox" value="1" <?php checked(1, $spg_options['enable']); ?> />