未定义的索引错误4

时间:2014-05-15 06:09:42

标签: php wordpress

在我的插件选项页面中,我使用了一个选项复选框。当它检查时,这没关系。但当我取消选中它时,显示错误,这个:

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']; ?>"/>

它工作正常,并没有显示任何这样的错误。

3 个答案:

答案 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']); ?> />