Errores “Undefined index” ¿por qué está sucediendo?

publicado por: Anonymous
<?php

include('conexion.php');

if ($_POST['contrasena1'] == $_POST['contrasena2']) {
     $rut = $_POST['rut'];
     $nombre = $_POST['nombre'];
     $apellido = $_POST['apellido'];
     $email = $_POST['email'];
     $contraseña = md5($_POST['contrasena2']);
     $consulta = "INSERT INTO registros (rut, nombre, apellido, email, contraseña) VALUES ('$rut', '$nombre', '$apellido', '$email', '$contraseña')";
    
     $ejecutar=mysqli_query($conexion, $consulta) or die ("No se pudo crear el registro");
    
     header("Location:formulario.php?valida=si");
    
}else{
     header("location:formulario.php?errornea=si");
    }

?>

Conexion exitosa
Base de Datos encontrada

Notice: Undefined index: contrasena1 in C:xampphtdocsJPsesion6_PHPregistro.php on line 5

Notice: Undefined index: contrasena2 in C:xampphtdocsJPsesion6_PHPregistro.php on line 5

Notice: Undefined index: rut in C:xampphtdocsJPsesion6_PHPregistro.php on line 6

Notice: Undefined index: nombre in C:xampphtdocsJPsesion6_PHPregistro.php on line 7

Notice: Undefined index: apellido in C:xampphtdocsJPsesion6_PHPregistro.php on line 8

Notice: Undefined index: email in C:xampphtdocsJPsesion6_PHPregistro.php on line 9

Notice: Undefined index: contrasena2 in C:xampphtdocsJPsesion6_PHPregistro.php on line 10

No se pudo crear el registro

solución

El error se debe a que $_POST no tiene los indices a los cuales estás intentando acceder. Por indice me refiero a la clave con la cual quieres obtener el valor dentro de $_POST (contrasena1, contrasena2, rut, etc)

Ahora, no encuentra el valor por alguno de los siguientes motivos:

1) Los nombres de los inputs en tu formulario no corresponden a los nombres de las claves que quieres acceder.

2) Tu formulario tiene el metodo GET definido en vez de POST.

Si el problema es el primer caso, la solución es simplemente utilizar los mismos nombres. Por el contrario, si tu problema es el segundo, debes acceder a las propiedades mediante $_GET o $_REQUEST y no $_POST.

La solución es validar que exista la clave antes de acceder a ella, para ello puedes utilizar la función isset().

<?php

if(isset($_POST['contrasena1']) && isset($_POST['contrasena2']) && isset($_POST['rut'])
   && isset($_POST['nombre']) && isset($_POST['apellido']) && isset($_POST['email'])){

  if ($_POST['contrasena1'] == $_POST['contrasena2']) {
     $rut = $_POST['rut'];
     $nombre = $_POST['nombre'];
     $apellido = $_POST['apellido'];
     $email = $_POST['email'];
     $contraseña = md5($_POST['contrasena2']);
     $consulta = "INSERT INTO registros (rut, nombre, apellido, email, contraseña) VALUES ('$rut', '$nombre', '$apellido', '$email', '$contraseña')";

     $ejecutar=mysqli_query($conexion, $consulta) or die ("No se pudo crear el registro");

     header("Location:formulario.php?valida=si");

}else{
     header("location:formulario.php?errornea=si");
    }
}else{
    echo "FALTAN DATOS PARA PROCESAR EL FORMULARIO";
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *