Foros del Web » Programando para Internet » PHP »

Error de integridad al agregar mas de un registro

Estas en el tema de Error de integridad al agregar mas de un registro en el foro de PHP en Foros del Web. Estimados, a ver si alguien me puede ayudar con esto que no puedo solucionar.... se trata de insertar registros multiples en una tabla... para insertar ...
  #1 (permalink)  
Antiguo 16/07/2011, 06:30
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Error de integridad al agregar mas de un registro

Estimados, a ver si alguien me puede ayudar con esto que no puedo solucionar.... se trata de insertar registros multiples en una tabla...

para insertar hago lo siguiente:

Código PHP:
$emails=$_POST['email'];
$id_cliente=$_POST['id_cliente'];

for (
$i=0$i<=count($emails); $i++) {    
    echo 
$emails[$i].'<br>'.$id_cliente[$i];

    
$que "INSERT INTO factura (cantidad1, id_cliente)";
    
$que.= "VALUES ( '$emails[$i]', '$id_cliente[$i]' )";
    
$res mysql_query($que$conexion) or die(mysql_error());

si inserto en una tabla normal, funciona muy bién.

pero al insertar en una tabla con campo foraneo me aparece el siguiente error:

Código:
Cannot add or update a child row: a foreign key constraint fails (`basedatos/factura`, CONSTRAINT `factura_ibfk_1` FOREIGN KEY (`id_cliente`) REFERENCES `clientes` (`id_cliente`))
tengo entendido que este error aparece cuando el valor o dato que estoy poniendo en el campo foraneo no existe... pero los registros que inserto si existen. pero a pesar de este error igual me inserta los datos en la base de datos...

las tablas son como sigue ambas innodb

-- clientes --
id_cliente (indice: primary)
nombre
rut

-- factura --
id_factura (indice: primary)
cantidad
...
id_cliente (indice: index)

y porsupuesto con phpmyadmin en vista relacion escojo en id_cliente su primaria.

bueno ese es mi problema aparece el error pero igual inserta los datos... al usar un insert normal funciona bien... el error aparece cuando uso for... esta mal el for?? cual puede ser el problema??

gracias desde ya, saludos.
  #2 (permalink)  
Antiguo 16/07/2011, 08:01
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Error de integridad al agregar mas de un registro

Parece un error de comillas, probá asi:


$que.= "VALUES ( '".$emails[$i]."', '".$id_cliente[$i]."' )";


.
__________________
la la la
  #3 (permalink)  
Antiguo 16/07/2011, 09:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

Gracias truman_truman por tu ayuda... lamentablemente sigue dandome el mismo error, es un error raro ya que he probado varias formas pero sigo en lo mismo... será que me falta algo que agregarle al for? que mas podría probar??...

lei que quizá para esto, ya que trabajo con arrays me pudiese servir un explode, será esto alguna solución o no tiene nada que ver? de ser asi como podría implementarla??

gracias, saludos.
  #4 (permalink)  
Antiguo 16/07/2011, 13:27
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error de integridad al agregar mas de un registro

Imprime por separado los $id_cliente[$i], y fíjate que cada uno de esos valores impresos existan en la tabla clientes.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 17/07/2011, 00:57
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

Estimado, le he hecho pero el error sigue apareciendo.... he provado varias pormas pero quedo siempre con el error, auque como dije antes, si me inserta los datos en la tabla...

¿Será posible que alguien pueda ejecutar este ejemplo en su servidor como prueba? falta un archivo js, se lo enviaría... esto solo si es posible... no me quiero aprovechar pero he probado tantas formas y no logro sacar nada en limpio con este error...

saludos.
  #6 (permalink)  
Antiguo 17/07/2011, 21:46
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error de integridad al agregar mas de un registro

¿Podrías mostrarnos que imprime el for? Me refiero específicamente a esta parte :

Código PHP:
echo $emails[$i].'<br>'.$id_cliente[$i]; 
Además, algo que vi que me da mala espina es esto :

Código PHP:
for ($i=0$i<=count($emails); $i++) 
Creo que está mal hecha la comparación, deberia ser $i<count($emails);, no <=.

Prueba eso y nos avisas.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 18/07/2011, 00:18
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

Muchas gracias por escribir...

Bueno esta parte funciona bién ya que si en los imputs al ingresar 5 o 50 filas me las muestra tal cual.... en ella imprimo un campo email y el otro id_cliente....

echo $emails[$i].'<br>'.$id_cliente[$i];

si me imprime bien quiere decir que el for está funcionando bien?... y si así fuera el insert into también debería hacerlo...

en el insert VALUES le puse estas variables '$id_cliente[$i]' y también directamente con '".$_POST['id_cliente']."' , siempre me dió el mismo error.

al cambiar estas variables y poner un id que exista como '2' .... este funciona bién y no me envía el mensaje de error...

Ahora... al dejar las variables en el VALUES tal como estan mas arriva... y quitar esa parte del for que te llama la atencion y reemplazarlo por un numero por ejemplo 5, efectivamente me inserta 5 registros pero el error aún aparece.

es muy extraño....

será posible que envíe el zip con los archivos?? son tres archivos aunque se pueden dejar solo dos... el formulario junto con el procesar....

gracias por la ayuda.
  #8 (permalink)  
Antiguo 18/07/2011, 19:51
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error de integridad al agregar mas de un registro

A ver... postea el código del formulario y el del PHP, que la verdad estoy un tanto confundido. Y como no nos dices que imprime el echo, es difícil poder adivinar.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 19/07/2011, 00:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

Jejeje.. ahí va todo el código...

INDEX

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Jquery Agregar campos</title>
<
script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<link href="style.css" rel="stylesheet" type="text/css" />

<script type="text/javascript">
emails=0;
function agregar() {
    emails=emails+1;
    $("#campos").append('<li class="email'+emails+'"><input type="text" name="email[]" size="25" />&nbsp;&nbsp;<a href="#" onclick="javascript:borrar('+emails+');">Borrar</a></li>');
}
function borrar(cual) {
    $("li.email"+cual).remove();
    return false;
}
</script>
</head>
<body>
    <form name="frm_multiple" method="post" action="procesar.php">
    <ul id="emails">
        <li>
        <input type="text" size="20" name="email" /><a href="javascript:agregar();">Agregar</a>
        </li>
        <li id="campos"><!-- aqui se crean los CAMPOS --></li>
    </ul>
    
    <p align="center"><input type="submit" name="Send" value="Send" /></p>
    </form>
</body>
</html> 
PROCESAR

Código PHP:
<h2>Emails</h2>
<?php
include "conexion.php";

$emails=$_POST['email'];

for (
$i=0$i<=count($emails); $i++) {    
    echo 
$emails[$i].'<br>'.$id_cliente[$i];


    
$que "INSERT INTO facturation (id_cliente)";
    
$que.= "VALUES ( '".$emails[$i]."')";
    
$res mysql_query($que$conexion) or die(mysql_error());


}
?>

Pensando que el index podía estar mal probé con otro pero hecho con javascript... los resultados fueron los mismos.

saludos.
  #10 (permalink)  
Antiguo 19/07/2011, 22:07
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error de integridad al agregar mas de un registro

Pero ahora no aparece el campo id_cliente en ninguna parte. Ya vi que creas los campos de email con javascript, pero... ¿haces lo mismo con el campo id_cliente? Porque en el primer código que mostraste, lo recibes por medio de $_POST. ¿De dónde obtienes los ID de los clientes? ¿Los ingresa el usuario?
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #11 (permalink)  
Antiguo 20/07/2011, 21:50
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

jaja....

primero disculpas por no responder antes, no me había podido conectar....

Bueno, es cierto, con esto que no ha funcionado he probado de tantas formas, quitado y puesto campos que finalmente estuve probando insertar solo en el campo foraneo... este es justamente id_cliente... dejé entonces solo eso en el insert

el campo "email" es donde digito el id_cliente, ya que no importa como se llame el campo... y luego lo envio con el insert... he probado de estas formas en el insert...

'".$emails[$i]."' (inserta, pero aparece el error)
'$emails[$i]' (inserta, pero aparece el error)
'"$_POST['email']"' (inserta, pero aparece el error)
'2' (inserta sin error)

gracias.
  #12 (permalink)  
Antiguo 20/07/2011, 22:24
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error de integridad al agregar mas de un registro

Ok, me di la lata de buscar en google, y creo haber hallado la solución. La verdad son 2 soluciones : una que hallé en google y otra que se me ocurre.

1. De acuerdo al primer comentario que se encuentra en este link, el problema es que en tu tabla facturación, debes tener algúna fila que hace referencia a un id_cliente que no existe en la tabla clientes. En el mismo link que te pasé, hay una consulta que te ayudará a encontrar esa fila 'huérfana'.


2. Al hacer el for, estás recorriendo una cantidad determinada de datos ingresados desde el formulario, y seguramente alguno de estos valores no se encuentran en tu tabla clientes. Me explico : El for va por ejemplo del 1 al 10 (1,2,3,4,5,6,7,8,9,10), pero en tu tabla clientes existen los id_cliente 1,2,5,6,9 y 10. En ese caso, toparía en los valores 3,4,7 y 8, que no existirían, pero aún así estaría tratando de relacionarlos con la tabla clientes.

Espero sea una de estas soluciones. Si no, sería bueno que nos muestres que tienes en las 2 tablas (clientes y facturacion), para ver si hay algún dato estorbando por ahí.

Espero te sirva. Saludos.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #13 (permalink)  
Antiguo 20/07/2011, 22:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 162
Antigüedad: 15 años, 6 meses
Puntos: 11
Respuesta: Error de integridad al agregar mas de un registro

Gracias spider_boy por tooooooooda tu ayuda!!!

Revisaré lo que me acabas de enviar.... y probaré según sea el caso... mil gracias!

saludos.

Etiquetas: integridad, mysql, registro, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:04.