Right, I’m banging my head against a wall here. I’m sure it’s something incredibly simple but I keep getting undefined index errors on all of these variables.
function meta_genus_species() {
global $post;
if (isset($post)) {
$custom = get_post_custom($post->ID);
}
if (isset($custom)) {
$genus = $custom["genus"][0];
$species = $custom["species"][0];
$etymology = $custom["etymology"][0];
$family = $custom["family"][0];
$common_names = $custom["common_names"][0];
}
?>
<label>Genus:</label>
<input name="genus" value="<?php if(isset($genus)) { echo $genus; } ?>" />
<label>Species:</label>
<input name="species" value="<?php if(isset($species)) { echo $species; } ?>" />
<p><label>Etymology:</label><br />
<textarea cols="50" rows="5" name="etymology"><?php if(isset($etymology)) { echo $etymology; } ?></textarea></p>
<label>Family:</label>
<input name="family" value="<?php if(isset($family)) { echo $family; } ?>" />
<label>Common Names:</label>
<input name="common_names" value="<?php if(isset($common_names)) { echo $common_names; } ?>" />
<?php
}
I get this for every variable:
Notice: Undefined index: genus in […]sf-species-profiles.php on line 207
Any ideas?
3 Answers
It’s a common PHP error, usually when you try to access an array member with a non-existent key;
$array = array( 'hello' => 'world' );
echo $array['foobar']; // undefined index
You should check for the key first with isset( $array['foobar'] );
UPDATE: In this case, I would chuck in a loop that sets-up the variables for you, checking for the index in the process.
foreach ( array( 'genus', 'species', 'etymology', 'family', 'common_names' ) as $var )
$$var = isset( $custom[ $var ][0] ) ? $custom[ $var ][0] : '';
echo $genus; // prints value of $custom['genus'][0] if set, otherwise empty