Foros del Web » Programando para Internet » PHP »

me da error de Duplicate Key y no sé porque.

Estas en el tema de me da error de Duplicate Key y no sé porque. en el foro de PHP en Foros del Web. Buenos días compañeros nuevamente; Estoy con una tienda online a cuestas. Cuando voy a insertar el pedido en una tabla me dice duplicate key. Os ...
  #1 (permalink)  
Antiguo 13/06/2006, 06:44
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
me da error de Duplicate Key y no sé porque.

Buenos días compañeros nuevamente;

Estoy con una tienda online a cuestas. Cuando voy a insertar el pedido en una tabla me dice duplicate key. Os pego parte del codigo esencial:
Código PHP:
//sesion
session_start(); 
//Iniciamos o retomamos la sesión 
$carro=$_SESSION['carro']; 
//La asignamos a la variable $carro 
/*require "../sesion.inc.php";
session_name(s);
$s=session_name();
$sid=$s."=".session_id();*/

//datos personales y fechas
$fecha=date("d-m-Y");
$fecha_tpvvl=date("d/m/Y");
$hora=date("H:i:s");
$hora_tpvvl=date("H:i:s");
$fecha_mysql=date("Y-m-d h:i:s");

$_POST["pago"]=="tarjeta de crédito";
$pago="V"

//quitamos la coma al importe y le ponemos los ceros a la izquierda
$importe_final=str_replace('.' ,''$importe_final); 
$importe_final=str_repeat("0", (11-strlen($importe_final))).$importe_final;

$sql_detalle_pedido="insert into detalles_pedido
(nombre, dni, direccion, cp, provincia, poblacion, email, telefono, pago, fecha, importe_final)
values
('"
.$_POST["nombre"]."', '".$_POST["dni"]."', '".$_POST["direccion"]."', '".$_POST["cp"]."', '".$_POST["provincia"]."', '".$_POST["poblacion"]."', '".$_POST["email"]."', '".$_POST["telefono"]."', '$pago', '$fecha_mysql', '".$_POST["importe_final"]."')";

$result_detalle_pedido=mysql_query($sql_detalle_pedido,$link)or die (mysql_error());

//datos del pedido
//$identificador_pedido = mysql_insert_id();  //recuperamos el id del cliente para llamar así al pedido

foreach($_SESSION['carro'] as $campo => $valor){

   
//recorremos la matriz que tiene todos los valores del carro, calculamos el subtotal y el total 
   
$sql="select *
    from productos
    where id_producto='"
.$valor["id_producto"]."'";
    
   
$result=mysql_query($sql) or die (mysql_error());

   
$row=mysql_fetch_array($result);
   
$id_producto=$row["id_producto"];
   
$nombre=$row["nombre"];
   
$precio=$row["precio"];
   
$id_subcategoria=$row["id_subcategoria"];
   
   
//cojemos la categoria y las seccion para insertarlo
$sqlb="select id_categoria, nombre
from subcategorias
where id_subcategoria='$id_subcategoria'"
;

$resultb=mysql_query($sqlb) or die (mysql_error());

$rowb=mysql_fetch_array($resultb);
$id_categoria=$rowb["id_categoria"];
$nombre_subcategoria=$rowb["nombre"];

$sqla="select nombre
from categorias
where id_categoria='$rowb[0]'"
;

$resulta=mysql_query($sqla) or die (mysql_error());

$rowa=mysql_fetch_array($resulta);
$nombre_categoria=$rowa["nombre"];

        
//insertamos todos los datos obtenidos
        
$sql_insertar_pedidos="insert into pedidos 
                         (id_pedido, nombre_producto, precio, subcategoria, categoria, cantidad)
  values
 ('"
.$_SESSION['id_pedido']."', '$nombre', '$precio', '$nombre_subcategoria', '$nombre_categoria', '".$valor["cantidad"]."')";
                        
        
$result_insertar_pedidos=mysql_query($sql_insertar_pedidos$link) or die (mysql_error());
//el error de Duplicate Key me lo da en este ultimo insertar en pedidos. 
Ese es el codigo ma o menos... le falta parte pero no influye akí. Mi problema viene en este ultimo párrafo donde inserto los datos en la tabla PEDIDOS. me dice que : "Duplicate entry '65535' for key 1" ese numero de 65535 se me ha guardado una vez en el id_pedido, pero da igual que cierre sesiones o abra nuevos exploradores con nuevos productos para la cesata que siempre me da ese mismo error...

Estoy super estancada. Alguien podría decirme que puedo hacer o como puedo solucionarlo????

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 13/06/2006, 06:58
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Obviamente, el campo 'id_pedido' es clave principal de la tabla 'pedidos'. Si es así, cuando se hace un insert no se instancia el valor de la clave primaria (porque suele ser autonumérico). De todas formas, ¿por qué guardas el 'id_pedido' como variable de sesión?
  #3 (permalink)  
Antiguo 13/06/2006, 06:59
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 13 años, 1 mes
Puntos: 1
pones que el id sea autoincremental en la base de datos? igual es por eso.. si no es asi cambialo en la base

tambien puedes hacer esto: saca el maximo id de la tabla y sumale uno antes de insertar.. puede que te funcione asi.
__________________
ALOZORRO v5.0 (ahora en .es)
  #4 (permalink)  
Antiguo 13/06/2006, 09:54
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
HOLAS COMPAÑEROS

Gracias por vuestras respuestas. ID_PEDIDO no le tengo puesto que autoincremente puesto que quiero que se guarde el valor. Por otro lado , genero un número aleatorio que contenga x cifras, para que no haya posibilidad de que se repita ese numero en el pedido si la cliente retrocede antes de hacer la compra y cosas así. Me sigue saliendo el numerito ese despues de varias horas, y sigo sin saber de donde viene y porque me dice eso.

Si imprimo el id_pedido me pone otro numero distinto, sin embargo ese numero se me ha guardado en uno de los pedidos como id_pedido, no tiene sentigo alguno, estoy mazo de confusa.
he hecho que imprima antes de la ultima consulta esto:

echo $_SESSION['id_pedido']."holaa"; <--
//insertamos todos los datos obtenidos....

y esto es lo que me sale:

"1150209714holaaDuplicate entry '65535' for key 1"

el problema está en la ultima consulta y no caigo...

ante todo muchas gracias por vuestra ayuda, y si se os ocurren algo... lo que sea...

GRACIASS!!!
  #5 (permalink)  
Antiguo 13/06/2006, 10:46
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Cita:
Iniciado por susaninhax
Gracias por vuestras respuestas. ID_PEDIDO no le tengo puesto que autoincremente puesto que quiero que se guarde el valor.
Un campo autoincremental se guarda con un valor generado por MySQL al hacer un insert.

Por otro lado, me da que (suposición) no acabas de entender lo de las sesiones. El PHP genera un id único para cada usuario que acceda a páginas que trabajen con sesiones (session_start).
Si yo tuviera que hacer un carrito de la compra, simplemente guardaría los pedidos en variables de sesión y, al final, los guardaría en la base de datos.
Código PHP:
$_SESSION['pedidos'] = array( ... ) 
  #6 (permalink)  
Antiguo 13/06/2006, 11:33
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
Es la primera tienda con pasarela que hago y la verdad me está costando bastante. He querido añadir a pelo en la base de datos otro pedido y me ha saltado este error que no entiendo...???

"545452 is not a valid value for field 'id_pedido'. The allowed range is -32768 to 32767."

¿que quiere decir?porque ahora si que estoy mas perdida aún si cabe, porque si lo intento desde la propia base de datos...?????????

perdonar por todo esto o por el modo de explicarme pero me he perdido absolutamente con todo esto...

Un saludo y gracias de antemano!!
  #7 (permalink)  
Antiguo 13/06/2006, 13:41
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
El error que te da es bastante claro. El campo 'id_pedido' es del tipo SMALLINT SIGNED (seguramente) y acepta valores enteros entre el -32768 y el 32767. Por eso no te acepta un valor fuera de ese rango. Un saludo.
  #8 (permalink)  
Antiguo 14/06/2006, 02:25
Avatar de susaninhax  
Fecha de Ingreso: noviembre-2004
Mensajes: 358
Antigüedad: 13 años
Puntos: 3
TIENES TOOOOODA la razon, jooo, que torpe por mi parte, pues menos mal que me lo has dicho porque ni siquiera había pensado en esa opción... jopé...

muchas gracias de verdad, me has ayudado a sacar un gran problema de encima. MUCHAS GRACIASSS
  #9 (permalink)  
Antiguo 22/06/2006, 17:51
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 971
Antigüedad: 13 años, 7 meses
Puntos: 2
Buenas...
casualmente tengo el mismo error, pero no es por tener un campo mas chico:

DROP TABLE IF EXISTS `tb_registrocompramateriales`;

CREATE TABLE `tb_registrocompramateriales` (
`id` int(11) NOT NULL auto_increment,
`idProveedor` int(11) NOT NULL,
`idMaterial` int(11) NOT NULL,
`fecha` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`precio` float(11,0) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



INSERT INTO `tb_registrocompramateriales` (`id`, `idProveedor`, `idMaterial`, `fecha`, `precio`) VALUES
(1,0,2,'2006-06-20 10:58:13',2),
(2,0,3,'2006-06-20 10:58:13',1),
(3,0,4,'2006-06-20 10:58:13',1),
(4,1,5,'2006-06-20 10:58:13',60),
(5,1,6,'2006-06-20 10:58:13',30),
(6,0,2,'2006-06-20 11:44:54',2),
(7,0,3,'2006-06-20 11:44:54',1),
(8,0,2,'2006-06-22 15:47:03',2),
(9,0,3,'2006-06-22 15:47:03',1),
(10,0,4,'2006-06-22 15:47:03',1),
(11,1,5,'2006-06-22 15:47:03',60),
(12,1,6,'2006-06-22 15:47:03',30);

COMMIT;

saludos
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:12.