3

Estoy haciendo un registro, el código es siguiente:

Cuando le agrego las relación respectiva con otras tablas, no me deja insertar lo datos ¿A qué se puede deber esto? Tenga las siguientes tablas

  • TABLA ninos.
  • TABLA condiciones.
  • TABLA ninos_condicion.(Esta tabla recibe los id de las anteriores)

$insert = mysqli_query($conexion,"
                    INSERT INTO `ninos`(`nivel_educ`, `fecha_ingreso`, `persona_id`, `representante_id`) 
                    VALUES ('$nivel','$fecha_ingreso','$persona_id','$representante_id')
                ");
                /*Consultamos el id del niño para asignarlo a la condicion*/
                $query = mysqli_query($conexion,"SELECT id FROM `ninos` WHERE `persona_id`='$persona_id'");
                $data = mysqli_fetch_array($query);
                $nino_id = $data['id'];
                //No me ingresa al relacionar las tablas.
                $insert = mysqli_query($conexion,"INSERT INTO `nino_condicion`(`nino_id`, `condicion_id`) VALUES ('$condicion','$nino_id')");

                if ($insert) {
                    $alert = '<p class="msg_save">Registro completado exitosamente</p>';
                }
Dev. Joel
  • 23,229
  • 3
  • 25
  • 44

1 Answers1

0

Estás rompiendo las regla de las foreign Key, al intentar ingresar un valor que no existe en la tabla ninos, en nino_id le estás enviando la condición.

Al no existir una relación no valida que el id enviado exista en la tabla relacionada por eso dejaba ingresar, pero al añadir la relación realiza la validación previa y falla.

La query final debería ser.

$insert = mysqli_query($conexion,"INSERT INTO `nino_condicion`(`nino_id`, `condicion_id`) 
                      VALUES ('$nino_id','$condicion')");

Además podría revisar el método mysqli_insert_id() para obtener el último id auto generado, para campos AUTO_INCREMENT.

Recomendaría utilizar sentencias preparadas para brindar un poco de seguridad a su código, para esto existen dos preguntas recomendadas ¿Qué es la Inyección SQL ? Y ¿Cómo evitar la inyección SQL en PHP?

Dev. Joel
  • 23,229
  • 3
  • 25
  • 44
  • Gracias por la observación, no me había dado cuenta ¿Como son las sentencias preparadas? – Jesus Sandino Rodrguez Figuera Jul 06 '19 at 04:12
  • @JesusSandinoRodrguezFiguera hay dos preguntas que pueden darte más alcance de esto [¿Qué es la Inyección SQL ?](https://es.stackoverflow.com/questions/10518/qu%c3%a9-es-la-inyecci%c3%b3n-sql-y-c%c3%b3mo-puedo-evitarla) Y [¿Cómo evitar la inyección SQL en PHP?](https://es.stackoverflow.com/questions/18232/c%c3%b3mo-evitar-la-inyecci%c3%b3n-sql-en-php) puedes revisarlas y mejorar tu código. ;) – Dev. Joel Jul 06 '19 at 04:14