Question

in my plugin option page, i used an option checkbox. when it checked, this is ok. but when i unchecked it, there showing an error, this :

Undefined index: enable in C:\xampp\htdocs\horror\wp-content\plugins\self-photo-gallery\photo-gallery.php on line 173
/>

the line 173 is :

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

but there is another fields

<input type="text" id="spg_settings[twitter_url]" name="spg_settings[twitter_url]" value="<?php echo $spg_options['twitter_url']; ?>"/>

it works fine and didn't showing any error like this.

Was it helpful?

Solution

Add single quotes.

Use spg_settings['enable'] instead

Always use quotes around a string literal array index. For example, $foo['bar'] is correct, while $foo[bar] is not. But why? It is common to encounter this kind of syntax in old scripts:

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

This is wrong, but it works. The reason is that this code has an undefined constant (bar) rather than a string ('bar' - notice the quotes). PHP may in the future define constants which, unfortunately for such code, have the same name. It works because PHP automatically converts a bare string (an unquoted string which does not correspond to any known symbol) into a string which contains the bare string. For instance, if there is no defined constant named bar, then PHP will substitute in the string 'bar' and use that.

UPDATE1:

replace

<input type="text" id="spg_settings['twitter_url']" name="spg_settings['twitter_url']" value="<?php echo $spg_options['twitter_url']; ?>"/>

with follow line of code

<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:

And replace

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

with

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

For more information check here

OTHER TIPS

try this

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

Try to put quotes and perform print when using the array index values:

<input id="<?php print $spg_settings['enable'];?>" name="<?php print $spg_settings['enable'];?>" type="checkbox"  value="1" <?php checked(1, $spg_options['enable']); ?> />
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top