Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema al insertar datos a tabla con FK

Estas en el tema de Problema al insertar datos a tabla con FK en el foro de PHP en Foros del Web. Buenas! les comento un poco el error que vengo teniendo. Cuento con un formulario donde capturo 3 datos (2 nombre y una cantidad) al momento ...
  #1 (permalink)  
Antiguo 17/06/2016, 23:54
 
Fecha de Ingreso: junio-2016
Mensajes: 3
Antigüedad: 7 años, 10 meses
Puntos: 0
Problema al insertar datos a tabla con FK

Buenas! les comento un poco el error que vengo teniendo.
Cuento con un formulario donde capturo 3 datos (2 nombre y una cantidad) al momento de intentar ingresar estos datos me tira un error 1452 de Mysql. paso a agregar parte del codigo para que se entienda mejor a lo que me refiero

Código:
 <form id="frmINS" action="ProcInsumoEXT.php" method="POST">
           <fieldset id="frm">
                <legend>Ingreso de Datos</legend>
                   <table class="tabla">
                    <tr>
                           <td class="ImpStyle">Tipo de insumo:</td>
                           <td>
                             <?php

                              /*
                               * Código para mostrar datos dinámicamente en un combobox.
                               */

                             include 'conexion.php';

                             $tipo_ins = 'SELECT * FROM tipo_insumo';

                             $resultado = $conexion->query($tipo_ins);

                             ?>
                             <select  
                                   id="TIPINS"
                                   name="TIPINS" 
                                   class="entrada"
                                   >    
                                 <?php    
                                  while ( $fila = $resultado->fetch_array() )    
                              {
                               ?>
                               <option value=" <?php echo $fila['nomb_tipo'] ?> " >
                               <?php echo $fila['nomb_tipo']; ?>
                              </option>
        
                               <?php
                           }    
                           ?>        
                              </select>
                                 <?php
                                 ?>
                           </td>
                      </tr>
                       <tr>
                           <td class="ImpStyle">Almacen de destino:</td>
                           <td>
                             <?php

                              /*
                               * Código para mostrar datos dinámicamente en un combobox.
                               */

                             include 'conexion.php';

                             $num_almacen = 'SELECT * FROM almacen';

                             $resultado2 = $conexion->query($num_almacen);

                             ?>
                             <select  
                                   id="ALMINS"
                                   name="ALMINS" 
                                   class="entrada"
                                   >    
                                 <?php    
                                  while ( $fila1 = $resultado2->fetch_array() )    
                              {
                               ?>
                               <option value=" <?php echo $fila1['nomb_almacen'] ?> " >
                               <?php echo $fila1['nomb_almacen']; ?>
                              </option>
        
                               <?php
                           }    
                           ?>        
                              </select>
                                 <?php
                                 ?>
                           </td>
                      </tr>

Código:
<?php
	// ESTABLECER CONEXION
	include "conexion.php";

	// TOMA DATOS DEL FORMULARIO
	$tipo 	  = $_POST["TIPINS"] ;
	$almacen 	  = $_POST["ALMINS"] ;
	$cantidad 	  = $_POST["CANT"] ;		
    

    mysqli_select_db($database);
  
    $sql= "INSERT INTO insumo (nomb_insumo) VALUES ('$tipo')"; 

    mysqli_query($conexion,$sql);
    
    $var = mysqli_insert_id($conexion); 
 

    while ($cantidad <>0) {
    
    
	// CREAR SENTENCIA SQL
    $sql2= "INSERT INTO ins_al (id_insumo,nomb_almacen) VALUES ('$var','$almacen')";


	// EJECUTAR SENTENCIA SQL
	mysqli_query($conexion,$sql2);
	
    //Commit transaction
    mysqli_commit($conexion);
 
    $var ++;
    $cantidad --;
    }

	// CLOSED CONNECTION
	mysqli_close($conexion);
	
	// VOLVER AL FORMULARIO
	header("Location: Altas.php");
?>

ins_al es la relación de las tablas insumo y almacén, y contiene las fk_id_insumo relacionando id_insumo de la tabla insumo(donde es PK) con id_insumo de la tabla ins_al, lo mismo con nomb_almacen de almacén (donde es PK) con nomb_almacen de ins_al

probé haciendo una tabla ins_alPrueba para sacarme la duda si el sistema estaba capturando y procesando bien los datos y si ingresa sin problemas(en esta no use FK haciendo referencias a las otras 2 tablas), corrí la consulta en Heidi y me salio ese error en Mysql (1452) se que debe de haber algo que evidentemente tengo mal, pero hace rato vengo dando vuelta y no doy pie en que puede ser o que debo de buscar

dejo el codigo de las 4 tablas que estan implicadas por si se necesita

Código:
DROP TABLE IF EXISTS `proyecto`.`tipo_insumo`;
CREATE TABLE  `proyecto`.`tipo_insumo` (
  `id_tipo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nomb_tipo` varchar(30) NOT NULL DEFAULT '',
  `desc_tipo` varchar(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id_tipo`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
Código:
DROP TABLE IF EXISTS `proyecto`.`ins_al`;
CREATE TABLE  `proyecto`.`ins_al` (
  `id_entrada` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_insumo` int(10) unsigned NOT NULL DEFAULT '0',
  `nomb_almacen` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`id_entrada`),
  KEY `FK1_id_insumo` (`id_insumo`),
  KEY `FK2_nomb_almacen` (`nomb_almacen`),
  CONSTRAINT `FK1_id_insumo` FOREIGN KEY (`id_insumo`) REFERENCES `insumo` (`id_insumo`),
  CONSTRAINT `FK2_nomb_almacen` FOREIGN KEY (`nomb_almacen`) REFERENCES `almacen` (`nomb_almacen`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
Código:
DROP TABLE IF EXISTS `proyecto`.`almacen`;
CREATE TABLE  `proyecto`.`almacen` (
  `nomb_almacen` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`nomb_almacen`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Código:
DROP TABLE IF EXISTS `proyecto`.`insumo`;
CREATE TABLE  `proyecto`.`insumo` (
  `id_insumo` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nomb_insumo` varchar(30) NOT NULL DEFAULT '',
  PRIMARY KEY (`id_insumo`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=latin1;
si alguien ve algo o se le ocurre le agradecería una enormidad, hace tiempo deje la programación y ahora vengo retomando

un saludo!
  #2 (permalink)  
Antiguo 18/06/2016, 03:05
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Problema al insertar datos a tabla con FK

Pues aparentemente esta bien, lo único que veo es que pasas el id insumo como cadena de texto y debería se un entero, vamos sin las comillas, quedando asi:
Código PHP:
Ver original
  1. // CREAR SENTENCIA SQL
  2.     $sql2= "INSERT INTO ins_al (id_insumo,nomb_almacen) VALUES ($var,'$almacen')";

También veo que tanto id_insumo como nomb_almacen son FK, por lo que para poder crear el registro en la tabla hija debe de existir primero en la tabla a la que hacen referencia, con $var no creo que tengas problema ya que lo optienes de la última inserción, pero $almacen lo traes por POST, y puede que no se corresponda, o que contenga algún carácter como un espacio de más y por eso no se corresponde.

pero así a simple vista no veo nada más
__________________
Unset($vida['malRollo']);
  #3 (permalink)  
Antiguo 18/06/2016, 10:16
 
Fecha de Ingreso: junio-2016
Mensajes: 3
Antigüedad: 7 años, 10 meses
Puntos: 0
Respuesta: Problema al insertar datos a tabla con FK

hola xerifandtomas, gracias por tomarte el tiempo de leer y responder.

probé cambiando a $var sin '' y nada, tambien me fije lo que trae por POST y tampoco hay problema con eso, osea lo que trae es el dato que ya esta insertado en la tabla padre con su nombre

voy a desmenuzar todo haber si doy pie con la solución

un saludo!
  #4 (permalink)  
Antiguo 18/06/2016, 12:38
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: Problema al insertar datos a tabla con FK

Dumpeando tu consulta, pude ver que te la traía algo así:

Código SQL:
Ver original
  1. INSERT INTO ins_al (id_insumo,nomb_almacen) VALUES ('43',' almacen2 ')

Entonces, obvio que ' almacen 2 ' no es lo mismo que 'almacen 2' sin espacios, por eso la fk no te la tomaba.

Añade esta linea antes del while

Código PHP:
Ver original
  1. $almacen = rtrim(ltrim($almacen));

Y listo

Edito. O también acá

Código PHP:
Ver original
  1. <option value=" <?php echo $fila['nomb_tipo'] ?> " >

Elimina los espacios del value.

Última edición por rodocoyote15; 18/06/2016 a las 12:45
  #5 (permalink)  
Antiguo 18/06/2016, 16:22
 
Fecha de Ingreso: junio-2016
Mensajes: 3
Antigüedad: 7 años, 10 meses
Puntos: 0
Respuesta: Problema al insertar datos a tabla con FK

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Dumpeando tu consulta, pude ver que te la traía algo así:

Código SQL:
Ver original
  1. INSERT INTO ins_al (id_insumo,nomb_almacen) VALUES ('43',' almacen2 ')

Entonces, obvio que ' almacen 2 ' no es lo mismo que 'almacen 2' sin espacios, por eso la fk no te la tomaba.

Añade esta linea antes del while

Código PHP:
Ver original
  1. $almacen = rtrim(ltrim($almacen));

Y listo

Edito. O también acá

Código PHP:
Ver original
  1. <option value=" <?php echo $fila['nomb_tipo'] ?> " >

Elimina los espacios del value.

Muchismias gracias!! hoy dezmenusando en la tarde habia llegado a la conclucion de que venia por ahi la mano, pero no tenia idea de como solucionarlo, con la linea antes del while anda de 10

Etiquetas: formulario, mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:44.