Posibles soluciones al error Undefined index

Soluciones a los errores más comúnes en PHP: Undefined index o Undefined Variable

solución de errores

Aun cuando llevamos años en esto, de vez en cuando y delante de nuestras narices nos encontramos con Notice: Undefined index XXXX on line XXXX. Un problema que es sencillo de resolver pero que proviene de las excesivas facilidades que nos da PHP a la hora de programar.

¿Por qué me aparece un mensaje el error Undefined index o variable?

En la gran mayoría de lenguajes compilados, no declarar variables y su tipo suele ser un error muy grave, falta por la cual nuestro desarrollo ni tan siquiera funcionaría. Sim embargo, en PHP, un lenguaje interpretado al que "le da igual" que no definamos una variable y al que le es indiferente el cambio de tipo de estas, es algo habitual. Entonces ¿Es una contradicción que nos muestre este error PHP? Realmente no, si nos fijamos no nos indica un error en el sentido estricto, el mensaje dice Notice, que significa un aviso, algo así como los Warning de otros lenguajes

Vayamos al grano entonces, ¿Para qué me avisa PHP con este error? Pues en el fondo es una ayuda para avisarnos de un posible problema en nuestra programación, una pista para la depuración de nuestro código en un lenguaje que carece de herramientas completas para su depuración como si tienen los IDE de lenguajes compilados.

¿Solucionar o no solucionar errores Notice?

Puede que te surja el dilema de si detenerte a solucionar o no los errores Notice. Aunque es verdad que nuestro código funcionará igual en la mayoría de los casos si hemos realizado una programación acordeno es buena práctica dejar variables sin definir aquí y allí, sobre todo si pensamos que más tarde o más temprano debamos programar en otros lenguajes susceptibles a errores. Sin ir más lejos Javascript. En mi opinión, cuanto mejor sea nuestro código y cuanto mejores nuestras estrategias, evitando incluso los avisos, por pequeños que estos sean, mejores programadores seremos.

Posibles soluciones a los errores Notice Undefined index o variable

Podemos optar por dos estrategias para abordar este problema común. En orden de prioridad:

  1. Perfeccionar nuestro código para evitar este error, acostumbrándonos a tenerlo en cuenta mientras desarrollamos.
  2. Ignorar estos errores mientras todo funcione y activarlos tan solo cuando aparecen errores que afectan al buen funcionamiento de nuestro código.

1. Solución a Notice: Undefined index o variable

Solucionar estas notificaciones pasará por revisar nuestro código en las líneas indicadas, desarrollar estrategias para evitarlos y en un futuro programar siempre acorde a ellas. Os aseguro que es cuestión de coger el hábito y en poco tiempo tu código mejorará. ¡Evitarás muchos errores producidos por esta causa!

Solucionar Notice: Undefined index o Undefined Variable

El error de Undefined index (indice no definido) se produce al intentar obtener el valor de una clave de un array que no existe, mientras que Undefined Variable se refiere a una variable que hemos olvidado de definir antes de utilizar su valor

Ambos errores son muy similares y las estrategias para solucionarlos también lo son. Vamos a ver las más comunes:

Cuando definir o no variables

Lo primero que nos viene a la cabeza para solucionar estas notificaciones es declarar todas las variables que vayamos a utilizar en un script. Aunque esta estrategia solucionaría el problema en muchos casos, en otros es totalmente innecesario. Este error no se produce por ejemplo cuando realizamos una asignación de una nueva clave o damos valor a una variable, así por ejemplo el siguiente código sería innecesario:

<?php
$array['pos1'] = '';
//AQUI HABRIA LINEAS DE CODIGO
$array['pos1'] = $a + $b; //$a es 'HOLA '  y $b es 'MUNDO'
?>

Como ves, declarar una clave del array que posteriormente voy a asignar es innecesario, en cambio, si voy a asignar un valor a esta clave dentro de un posible IF, bucle o función, si que evitará un Notice: Undefined index. Por ejemplo:

<?php
$array['pos1'] = 'Adiós';
if ( $a == 2 ) {
   $array['pos1'] = 'Hola mundo';
}
echo $array['pos1'];
?>

En este ejemplo SÍ que he evitado el error, un fallo que en mi experiencia es bastante común cuando programamos en PHP.

Causas de Notice: Undefined index trabajando con formularios

Otro caso muy común en el que se produce este error es en el script que recibe variables de un formulario POST o GET. Los más recomendable en este caso es evitar los condicionales del tipo if ( $_POST['input1'] ) aunque sepamos que una variable no definida se evaluará a false, y en cambio utilizar la función PHP destinada para este fin: isset ( mixed $var ).

El siguiente código producirá un Notice aunque su funcionamiento sea correcto:

<?php
if ( $_POST['submit'] ) {
    echo 'Bienvenido suscriptor a la mejor web de programación';
}
?>

El siguiente código resuelve el mismo problema pero evita el Notice:

<?php
if ( isset($_POST['submit']) ) {
    echo 'Bienvenido suscriptor a la mejor web de programación';
}
?>

Orden correcto de condiciones múltiples

Un lugar muy común donde se producen los Notice: Undefined index es cuando incluimos varias condiciones, imaginemos por ejemplo el siguiente caso:

<?php
if ( $_POST['acepta_publicidad'] == 2 && isset ( $_POST['acepta_publicidad'] ) ) {
     echo 'Le mandamos publicidad';
}
?>

En este ejemplo, aunque me aseguro de que no se muestre el mensaje con dos condiciones, el orden de estas condiciones es incorrecto. Como las condiciones enlazadas con AND o && solo serán verdadero SI Y SOLO SI ambas se cumplen, deberíamos haber colocado el isset primero. De esta forma si no existe la clave acepta_publicidad en el array $_POST, PHP no comprobará su valor y evitaremos un Notice: Undefined index.

Las condiciones enlazadas con AND o && solo serán verdadero SI Y SOLO SI ambas se cumplen

2. Desactivar los errores Notice

Si hemos decidido olvidarnos de los errores Notice, bien por que creemos que nuestro código funciona perfectamente o bien por centrarnos en errores más graves, podemos utilizar la función php error_reporting ([ int $level ])

La función PHP error_reporting nos permite seleccionar el nivel de errores a mostrar (E_WARNING, E_NOTICE, E_ERROR, E_PARSE). Podemos indicar la NO aparición de los errores Notice de las siguientes formas:

  • Indicando todos los tipos, olvidándonos del nivel E_NOTICE: error_reporting(E_ERROR | E_WARNING | E_PARSE)
  • Indicando que queremos ver todos los tipos (E_ALL), menos los del nivel (E_NOTICE) mediante el símbolo ^: error_reporting(E_ALL ^ E_NOTICE)

Extra: activar errores solo para el desarrollador

Por regla general en nuestro Hosting contratado el fichero de configuración php.ini no es accesible y tiene desactivado el muestreo de errores, pero si por alguna razón esto no ocurre o queremos manipular la configuración a nuestro antojo, podemos hacer uso de la función php ini_set() para modificar la variable display_errors.  

Con el siguiente script de ejemplo podremos hacer que automáticamente se muestren cuando desarrollamos en local y se oculten en remoto:

<?php
if($_SERVER['REMOTE_ADDR']=="00.00.00.00") { 
    ini_set('display_errors','On'); 
} 
else { 
    ini_set('display_errors','Off'); 
} 
?>

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.