Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Insertar registros con 1 campo de otra tabla

Estas en el tema de Insertar registros con 1 campo de otra tabla en el foro de Bases de Datos General en Foros del Web. Hola amigos. Estoy por terminar mi formulario de contacto pero este me envía el siguiente error No se pudo insertar el registro1452: Cannot add or ...
  #1 (permalink)  
Antiguo 15/11/2010, 20:36
 
Fecha de Ingreso: noviembre-2010
Mensajes: 14
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Insertar registros con 1 campo de otra tabla

Hola amigos.
Estoy por terminar mi formulario de contacto pero este me envía el siguiente error

No se pudo insertar el registro1452: Cannot add or update a child row: a foreign key constraint fails (`database`.`usuarios`, CONSTRAINT `usuarios_ibfk_4` FOREIGN KEY (`UBICACION`) REFERENCES `ubicacion` (`codigo`))


Soy sincero, sé a qué se refiere, pero no tengo idea de como arreglarlo en la consulta SQL.
A continuación el código:

$pais = $_POST['registro_lista_pais'];
$ciudad = $_POST['registro_lista_ciudad'];
$lcsql2 = "select ubicacion.codigo from ubicacion where ubicacion.pais=('$pais') and ubicacion.ciudad=('$ciudad')";
$lires2 = mysql_query($lcsql2,$link);
if (!$lires2)
{ die ("No se pudo consultar su ubicación" . mysql_errno() . ": ". mysql_error());
}
else
{ $lcsql="insert into usuarios(campo1, campo2,campo3,campo4) values('valor1','valor2','valor3','$lires2')";
$lires = mysql_query($lcsql,$link);
if (!$lires)
{ die ("No se pudo insertar el registro" . mysql_errno() . ": ". mysql_error());
}

}


Obviamente, no se completa la inserción del registro. presumo que por una mala sintaxis de la variable con la primera consulta.

Agradecería mucho su ayuda.
  #2 (permalink)  
Antiguo 16/11/2010, 03:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Insertar registros con 1 campo de otra tabla

Muy probablemente tengas un error en las variables de PHP (cosa que debes consultar en el Foro de PHP), porque lo que te dice MySQL es que no puede insertar el registro porque el valor asignado al campo4, contenido en $lires2 no existe en la tabla ubicacion, por lo que no se está cumpliendo con la restricción de FK.

Te doy un anticipo: $lires2 no es un dato, es un resultado de consulta, lo que significa que es un resultado de query PHP que puede contener uno o más registros (un puntero a un array de arrays). Para poder acceder al dato debes leer el registro.

Revisa el origen de ese dato.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/11/2010, 11:16
 
Fecha de Ingreso: noviembre-2010
Mensajes: 14
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Respuesta: Insertar registros con 1 campo de otra tabla

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Muy probablemente tengas un error en las variables de PHP (cosa que debes consultar en el Foro de PHP), porque lo que te dice MySQL es que no puede insertar el registro porque el valor asignado al campo4, contenido en $lires2 no existe en la tabla ubicacion, por lo que no se está cumpliendo con la restricción de FK.

Te doy un anticipo: $lires2 no es un dato, es un resultado de consulta, lo que significa que es un resultado de query PHP que puede contener uno o más registros (un puntero a un array de arrays). Para poder acceder al dato debes leer el registro.

Revisa el origen de ese dato.
OK.
No puedo insertar debido a que no existe ese valor en la tabla, no es eso (adjunto imagen para que vean el resultado de la consulta en la ventana de phpmyadmin.






Respecto a que no es un dato sino un resultado de query con uno o mas registros, entonces como no es un dato no puedo escribir '$lires2' en la consulta, pero como puedo consultar en SQL ó acceder a ese dato ya que lo desconozco, depende de la elección del usuario, como puedo insertar con SQL ese registro en mi tabla teniendo en cuenta que hay 1 campo o 1 dato que resulta de otra consulta?




Solo por si no salen las imagenes que adjunté:

Valor de consulta a ubicacion: Resource id #6
Pais: 6
Ciudad: 1
No se pudo insertar el registro1452: Cannot add or update a child row: a foreign key constraint fails (`database`.`usuarios`, CONSTRAINT `usuarios_ibfk_4` FOREIGN KEY (`UBICACION`) REFERENCES `ubicacion` (`codigo`))



Nota: La consulta en la ventana de phpmyadmin mi da solo 1 resultado o 1 registro únicamente.



Gracias por su ayuda.
  #4 (permalink)  
Antiguo 16/11/2010, 11:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 14
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Insertar registros con 1 campo de otra tabla

Solucionado.
Gracias al aporte de gnzsoloyo, corregí el código y ya pude insertar el registro:

$pais = $_POST['registro_lista_pais'];
$ciudad = $_POST['registro_lista_ciudad'];
$lcsql2 = "select codigo from ubicacion where ubicacion.pais='$pais' and ubicacion.ciudad='$ciudad'";
$lires2 = mysql_query($lcsql2,$link);
while($registro_actual=mysql_fetch_array($lires2))
{ $aux=$registro_actual['codigo'];
}
if (!$lires2)
{ die ("No se pudo consultar su ubicación" . mysql_errno() . ": ". mysql_error());
}
else
{ $lcsql="insert into usuarios(campo1, campo2,campo3,campo4) values('valor1','valor2','valor3','$aux')";
$lires = mysql_query($lcsql,$link);
if (!$lires)
{ die ("No se pudo insertar el registro" . mysql_errno() . ": ". mysql_error());
}

}


Me queda la duda si lo podré hacer directamente en la sentencia SQL evitando el uso del while para recorrer los registros, pero bueno. Gracias.
  #5 (permalink)  
Antiguo 16/11/2010, 11:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Insertar registros con 1 campo de otra tabla

Cita:
Respecto a que no es un dato sino un resultado de query con uno o mas registros, entonces como no es un dato no puedo escribir '$lires2' en la consulta, pero como puedo consultar en SQL ó acceder a ese dato ya que lo desconozco, depende de la elección del usuario, como puedo insertar con SQL ese registro en mi tabla teniendo en cuenta que hay 1 campo o 1 dato que resulta de otra consulta?
Como te decía en mi post anterior, es tema de programación en PHP y no de bases de datos. En realidad es una pregunta que deberías postear en el Foro de PHP, donde ya te hubiesen respondido y muy eficientemente la duda.
Este foro es de Bases de Datos. Es para resolver problemas de SQL y/o de administración, pero las normas del foro nos piden que no pongamos código de programación:
Cita:
Función de la sección Bases de Datos
Explicado lo anterior y para evitar confundir a los foreros que hacen o hacemos uso de esta sección, les pedimos su colaboración en realizar solamente preguntas propias de Base de Datos.

Para ser más explicito, por favor NO coloquen código de php, asp u otro similar, ya que eso es programación.

Los foros tienen secciones exclusivas para ese tipo de preguntas y obtendrán respuestas más prontas y puntuales en los mismos.
Pero anticipándome un poco a lo que te respondan en el otro foro, mi sugerencia es que profundices en PHP y uses los ejemplos que están en el manual on line o de la FAQs de PHP.
En el manual puedes encontrar ejemplos como este, donde puedes ver cómo se toma un resultado de una query y se lee como array:
Código PHP:
Ver original
  1. <?php
  2. // This could be supplied by a user, for example
  3. $firstname = 'fred';
  4. $lastname  = 'fox';
  5. string()
  6. $query = sprintf("SELECT firstname, lastname, address, age FROM friends WHERE firstname='%s' AND lastname='%s'",
  7.     mysql_real_escape_string($firstname),
  8.     mysql_real_escape_string($lastname));
  9.  
  10. // Realiza la consulta
  11. $result = mysql_query($query);
  12.  
  13. // Verifia que haya resultados
  14. if (!$result) {
  15.     $message  = 'Invalid query: ' . mysql_error() . "\n";
  16.     $message .= 'Whole query: ' . $query;
  17.     die($message);
  18. }
  19.  
  20. // Lee la tabla obtenida
  21. while ($row = mysql_fetch_assoc($result)) {
  22.     echo $row['firstname'];
  23.     echo $row['lastname'];
  24.     echo $row['address'];
  25.     echo $row['age'];
  26. }
  27.  
  28. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: registros, tablas, campos
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 19:21.