Foros del Web » Programando para Internet » PHP »

BD guarda datos duplicados

Estas en el tema de BD guarda datos duplicados en el foro de PHP en Foros del Web. Hola aver si me podeis ayudar resulta que estoy asiendo una tienda online y e echo una consulta pa que me guarde los pedidos que ...
  #1 (permalink)  
Antiguo 15/11/2011, 11:33
(Desactivado)
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 20 años, 5 meses
Puntos: 0
BD guarda datos duplicados

Hola aver si me podeis ayudar
resulta que estoy asiendo una tienda online y e echo una consulta pa que me guarde los pedidos que hacen los clientes en la base de datos automaticamente,
La consulta funciona bien, pero el problema es, que me los guarda duplicado al comprar solo un producto.

Os dejo el codigo:

Código PHP:
<?php require_once('Connections/tienda.php'); ?>
<?php
session_start
();
if(isset(
$_SESSION['carrito'])){
    
$carrito_mio=$_SESSION['carrito'];
}

?>

<?php 
    
if(isset($_SESSION['carrito'])){
        
$total=0
    for(
$i=0;$i<=count($carrito_mio)-1;$i ++){
        
$resumen'hay carrito';
    if(
$carrito_mio[$i]==NULL){
        
$resumen'no hay productos que enviar';
            }else{
            
$resumen'hay productos que enviar'
            
$usuarioid $_SESSION['MM_Username']; 
            
date_default_timezone_set('Europe/Madrid');
            
$fecha date('d-n-o');
            
$hora date('H:i:s',strtotime('+0hours'));
            
$nombre_productos $carrito_mio[$i]['nombre'];
            
$cantidad $carrito_mio[$i]['cantidad'];
            
$precio_unidad $carrito_mio[$i]['precio'];
            
$precio_total $total;
            
$total=$carrito_mio[$i]['precio'] * $carrito_mio[$i]['cantidad']; 
            
$estado 'recibido';
            
$pagos 'pendiente';

            
$pedido "INSERT INTO pedidos(usuarioid,fecha,hora,nombre_productos,cantidad,estado,precio_total,precio_unidad,pagos)";
            
$pedido.= "VALUES ('".$usuarioid."','".$fecha."','".$hora."','".$nombre_productos."','".$cantidad."','".$estado."','".$precio_total."','".$precio_unidad."','".$pagos."')";
            
$pedido_query mysql_query($pedido) or die (mysql_error());
    if(!
$pedido_query){header("location:error2.php");}
        }
        }
        }else{
            
$resumen'no hay carrito';}

?>
<?php

mysql_free_result
($pedidos);
?>

Por cierto lo hago con el dreamweaver por eso sale asi.

y el codigo del carrito es este:


Código PHP:
<?php
if(isset($_SESSION['carrito']) || isset($_POST['nombre'])){
    if(isset(
$_SESSION['carrito'])){
        
$carrito_mio=$_SESSION['carrito'];
        if(isset(
$_POST['nombre'])){
            
$nombre=$_POST['nombre'];
            
$precio=$_POST['precio'];
            
$cantidad=$_POST['cantidad'];
            
$donde=-1;
            for(
$i=0;$i<=count($carrito_mio)-1;$i ++){
               if(
$nombre==$carrito_mio[$i]['nombre']){
                   
$donde=$i;
               }
            }
            if(
$donde != -1){
                
$cuanto=$carrito_mio[$donde]['cantidad'] + $cantidad;
                
$carrito_mio[$donde]=array("nombre"=>$nombre,"precio"=>$precio,"cantidad"=>$cuanto);
            }else{
                
$carrito_mio[]=array("nombre"=>$nombre,"precio"=>$precio,"cantidad"=>$cantidad);
            }
        }
    }else{
        
$nombre=$_POST['nombre'];
        
$precio=$_POST['precio'];
        
$cantidad=$_POST['cantidad'];
        
$carrito_mio[]=array("nombre"=>$nombre,"precio"=>$precio,"cantidad"=>$cantidad);    
    }
    if(isset(
$_POST['cantidad2'])){
        
$id=$_POST['id'];
        
$cuantos=$_POST['cantidad2'];
        if(
$cuantos<1){
            
$carrito_mio[$id]=NULL;
        }else{
            
$carrito_mio[$id]['cantidad']=$cuantos;
        }
    }
    if(isset(
$_POST['id2'])){
        
$id=$_POST['id2'];
        
$carrito_mio[$id]=NULL;
    }
    
    
$_SESSION['carrito']=$carrito_mio;
}

?>

Última edición por loro25; 15/11/2011 a las 11:40
  #2 (permalink)  
Antiguo 15/11/2011, 12:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: BD guarda datos duplicados

Realiza antes de tu for() un var_dump($carrito_mio) y revisa que variables tienes, si tienes más de dos entradas es por eso que te inserta dos veces el item.

Saludos.
  #3 (permalink)  
Antiguo 15/11/2011, 12:29
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: BD guarda datos duplicados

para empezar, ¿que resource de consulta estás liberando si no existe?:

mysql_free_result($pedidos);

en el segundo código, del cual no especificas orden ni procedencia al igual que el primero, nunca abres la sesión, realmente debes depurar adecuadamente para que consigas el porqué de la doble inserción, me parece que puede ser problema de un doble post del lado del cliente que no está controlado, ¿estás usando AJAX?, y si no ¿cuando insertas no redireccionas con header?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: bd, duplicados, mysql, sql, usuarios, guardar
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 22:10.