2014-05-15 77 views
1

在我的插件选项页面中,我使用了一个选项复选框。当它检查时,这是可以的。但是当我未选中它,也出现了错误,这一点:未定义索引错误4

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

查看我的更新回答 –

+0

再次检查,是代码中的错误 –

+0

我想我不能让你理解。这在你现在已经回答之前已经有效了。但是现在我使用了你的代码,但是它没有保存任何东西。我以前的工作很好。 我的问题是在这里, /> 对不起,请勿将代码置于正确的方式 – aarif

回答

2

添加单引号。

使用spg_settings['enable']代替

始终使用引号字符串常量数组索引。例如,$ foo ['bar']是正确的,而$ foo [bar]不是。但为什么?在旧脚本中遇到这种语法是很常见的:

<?php 
$foo[bar] = 'enemy'; 
echo $foo[bar]; 
// etc 
?> 

这是错误的,但它有效。原因是这段代码有一个未定义的常量(bar)而不是一个字符串('bar' - 注意引号)。 PHP可能在将来定义常数,不幸的是,这些代码具有相同的名称。它的工作原理是PHP自动将一个裸露的字符串(不与任何已知符号对应的未加引号的字符串)转换为包含裸露字符串的字符串。例如,如果没有定义的常量bar,那么PHP将替换字符串'bar'并使用它。

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

+0

如果我使用单引号如 id =“spg_settings ['enable']”name =“spg_settings [enable]”,则发布更新后的错误代码为 –

+0

,结果与以前相同。 但我把另一个字段的文本类型: “/> 但这工作正常。我不明白什么是anoter字段 – aarif

+0

@aarif问题,把问题作为一个更新,这将更具可读性。哪些工作不起作用 –

2

试试这个

<input id="<?php echo $spg_settings['enable'];?>" name="<?php echo $spg_settings['enable'];?>" type="checkbox" value="1" <?php checked(1, $spg_options['enable']); ?> /> 
+0

如果我使用这个,另一个错误与前一个显示,也就是说,该选项现在不保存 – aarif

+0

这意味着你的'$ spg_settings ['enable']'或$ spg_options [ 'enable']'没有设置 –

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']); ?> /> 
+0

它不能正常工作。结果与以前相同。我把另一个字段的文本类型: “/>但这工作正常。 – aarif