Portada » Lenguaje PHP » Solución Warning: Undefined array key PHP

Solución Warning: Undefined array key PHP

La solución Warning: Undefined array key php se presenta en formularios PHP cuando se envía la información para su proceso, ya sea inserción en base de datos o recuperación de variables.

Cuando deseamos obtener la información de un input en PHP mediante el método $_GET y un array, nos suele presentar un tipo de error PHP llamado Warning esto indica que la variable no está definida, a continuación, el código:

<form action="" method="GET">
<label>Usuario:</label><br>
<input type="text" name="txtusuario"><br>
<label>Email:</label><br>
<input type="text" name="txtemail"><hr>
<input type="submit" name="submit" vlaue="Agregar">
<a href="index.php">Volver</a>
</form>

<?php

include 'conexion.php';
$user=$_GET['txtusuario'];
$email=$_GET['txtemail'];
if($user!=null || $email!=null){
$sql="INSERT INTO users('ID','Usuario','Email') VALUES('.$user.','.$email.','')";
mysqli_query($sql);
if ($user=1) {
header("location:index.php");
}
}
?>

El error que genera e  imprime lo siguiente:

Warning: Undefined array key "txtusuario" in C:\xampp\htdocs\adm\agregar.php on line 17
Warning: Undefined array key "txtemail" in C:\xampp\htdocs\adm\agregar.php on line 18

¿Cuál sería la solución?

Vamos a detallar 3 soluciones concretas para estos mensajes de advertencias que debemos de corregir.

  • Primera solución: Función ISSET
  • Segunda Solución: operador de fusión de null
  • Tercera forma: Operador Ternario

Veamos las 3 soluciones.

Primera solución: Función ISSET

Para que el error desaparezca podemos apalancarnos de la función ISSET de PHP para validar valores procesados de formularios HTML

if (isset($_GET['usuario'])) {

}

Segunda Solución: operador de fusión de null

En este ejemplo si alguno de los valores esta vacío, la variable tendrá el valor null. Luego en el if verificamos en positivo, para menos confusiones.

Desde PHP 7+ puedes usar el operador de fusión de null de este modo:

<?php
include 'conexion.php';
$usuario=$_GET['txtusuario'] ?? null;
$email=$_GET['txtemail'] ?? null;

if($usuario&& $email){

$sql="INSERT INTO users(ID,Usuario,Email) VALUES('$usuario','$email','')";
mysqli_query($sql);
if ($user=1) {
header("location:index.php");
}
}
?>

Tercera forma: Operador Ternario

En PHP anterior a la versión 7 puedes usar un operador ternario, porque en esas versiones no existe fusión de null:

<?php
include 'conexion.php';
$usuario =!empty($_GET['txtusuario']) ? $_GET['txtusuario'] : null;
$email=!empty($_GET['txtemail']) ? $_GET['txtemail'] : null;
if($usuario && $email){

$sql="INSERT INTO users(ID,Usuario,Email) VALUES('$usuario','$email','')";
mysqli_query($sql);
if ($user=1) {
header("location:index.php");
}
}
?>

El método es el mismo, sólo que hay que verificar con la función empty() si hay datos o no en la variable PHP.

Al momento de enviar un formulario, los inputs que no tienen datos no son enviados, por tanto, si intentas recuperar alguno de esos datos no enviados tendrás un mensaje de advertencia tipo: Undefined index, como de hecho ocurre en este ejemplo.

Conclusiones y recomendaciones

Tu código es altamente vulnerable a ataques de inyección SQL, considera usar consultas preparadas para neutralizar ese grandísimo agujero de seguridad.

En versiones anteriores de PHP se usaba isset() para controlar esta situación, de hecho, por lo general te sugerirán su uso y en la mayoría de tutoriales verás esa práctica.

Por lo tanto, usar isset() no está mal, no está prohibido, solo que es un método antiguo. Sin embargo, el lenguaje PHP cambio mucho desde PHP 7 y más aún en versiones PHP 8+.

Ahora las cosas son mas más simples. Por lo tanto, esto significa que hay formas más elegantes, más limpias y más modernas de resolver estos tipos de advertencias en PHP.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad