Why on Earth am I getting “undefined_index” errors?

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
3

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

Leave a Comment