Foros del Web » Programando para Internet » PHP » CodeIgniter »

[SOLUCIONADO] Esto me graba dos veces los mismos datos

Estas en el tema de Esto me graba dos veces los mismos datos en el foro de CodeIgniter en Foros del Web. Hola, quiero guardar el contenido de mi carrito de compra en 2 tablas: "pedidos" y "pedidos_detalles", De guardar si guarda, pero me lo guarda 2 ...
  #1 (permalink)  
Antiguo 13/11/2017, 19:44
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 931
Antigüedad: 14 años, 11 meses
Puntos: 8
Esto me graba dos veces los mismos datos

Hola, quiero guardar el contenido de mi carrito de compra en 2 tablas: "pedidos" y "pedidos_detalles", De guardar si guarda, pero me lo guarda 2 veces, aquí les paso el modelo:
Código PHP:
Ver original
  1. public function savePedido($cli, $tot, $fec, $est)
  2. {
  3.     $this->db->trans_start();
  4.  
  5.     $dataSave = array(
  6.             'fecha'     => $fec,
  7.             'cliente'   => $cli,
  8.             'total'     => $tot,
  9.             'estado'    => $est
  10.         );
  11.     $this->db->insert('pedidos', $dataSave);
  12.  
  13.     $pedido = 0;
  14.     $this->db->select_max('codigo', 'cod_ped');
  15.     $q = $this->db->get('pedidos');
  16.     $r = $q->result();
  17.     foreach ($r as $row) {
  18.         $pedido = $row->cod_ped;
  19.     }
  20.  
  21.     $i = 1;
  22.     foreach ($this->cart->contents() as $items) {
  23.         $qty = $items['qty'];
  24.         $pro = $items['id'];
  25.  
  26.         $i = 0;
  27.         $opt = array();
  28.         foreach ($this->cart->product_options($items['rowid']) as $option_name => $option_value) {
  29.             $opt[$i] = $option_value;
  30.             $i++;
  31.         }
  32.  
  33.         $ing = $opt[0];
  34.  
  35.         $dataDeta = array(
  36.                 'pedido'        => $pedido,
  37.                 'cantidad'      => $qty,
  38.                 'producto'      => $pro,
  39.                 'ingredientes'  => $ing
  40.             );
  41.         $this->db->insert('pedidos_detalles', $dataDeta);
  42.     }
  43.  
  44.     $this->db->trans_complete();
  45.  
  46.     if ($this->db->trans_status() === false) {
  47.         return false;
  48.     } else {
  49.         return true;
  50.     }
  51. }
Espero que me puedan ayudar.

Gracias,
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 13/11/2017, 21:28
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 786
Antigüedad: 11 años, 2 meses
Puntos: 20
Respuesta: Esto me graba dos veces los mismos datos

pues, podrían ser muchas cosas, ¿donde te graba doble, en

$this->db->insert('pedidos', $dataSave);

o en

$this->db->insert('pedidos_detalles', $dataDeta);

?, necesitarías revisar como llamas a la función, si no la estás llamando dos veces.

Otra manera sencilla, que no es lo ideal, pero funciona, es que pongas una variable booleana de forma global, cuando llames a la función que inserte los datos, puesto que la variable está en falso permitas que se inserten los datos, inmediatamente la cambias a verdadero. Si por alguna razón se esta llamando la función, aunque no encuentres donde la variable ya usada previamente impediría que se ejecuta el código de nuevo, y así no se pueden duplicar.
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592
  #3 (permalink)  
Antiguo 14/11/2017, 06:32
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 931
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Esto me graba dos veces los mismos datos

Yo también pensé que la podría estar llamando 2 veces, pero no, en el controlador que llama a esta función va esto:
Código PHP:
Ver original
  1. public function comprar()
  2. {
  3.     $cli = $this->input->post('txtHiddenCliente');
  4.     $tot = $this->input->post('txtHiddenTotal');
  5.     $fec = date('Y-m-d H:i:s');
  6.     $est = 0;
  7.     $msg = '';
  8.  
  9.     $res = $this->Carrito_model->savePedido($cli, $tot, $fec, $est);
  10.  
  11.     if ($res === false) {
  12.         redirect('carrito/compra_error');
  13.     } else {
  14.         redirect('carrito/compra_ok');
  15.     }
  16.  
  17.     echo $msg;
  18. }
Y por cierto, me graba 2 veces en las dos tablas. En mi ejemplo, meto solo un producto, lo cual me tendría que grabar una entrada en "pedidos" y una en "pedidos_detalles", pero me graba 2 veces en ambas tablas.
__________________
El aprendiz.

Última edición por juandedios; 14/11/2017 a las 06:34 Razón: Me olvidé agragar
  #4 (permalink)  
Antiguo 14/11/2017, 09:38
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.315
Antigüedad: 2 años, 10 meses
Puntos: 247
Respuesta: Esto me graba dos veces los mismos datos

Prueba cambiando esto:
Código PHP:
Ver original
  1. $this->db->trans_start();

por esto:
Código PHP:
Ver original
  1. $this->db->trans_begin();


y esto:
Código PHP:
Ver original
  1. if ($this->db->trans_status() === false) {
  2.         return false;
  3.     } else {
  4.         return true;
  5.     }

por
Código PHP:
Ver original
  1. if ($this->db->trans_status()=== FALSE)
  2. {
  3.         $this->db->trans_rollback();
  4.         return false;
  5. }else{
  6.         $this->db->trans_commit();
  7.         return true;
  8. }
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 14/11/2017, 14:46
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 931
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Esto me graba dos veces los mismos datos

Hola xfxstudios, antes lo tenía así como dices y me grababa doble, por eso lo cambié a como está actualmente, pero pasa lo mismo.
__________________
El aprendiz.
  #6 (permalink)  
Antiguo 15/11/2017, 06:56
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.315
Antigüedad: 2 años, 10 meses
Puntos: 247
Respuesta: Esto me graba dos veces los mismos datos

entonces tu problema no esta en la funcion si no antes de esta, debes verificar la cadena de codigo que envía los datos a la funcion, puews se estan enviando 2 veces, ya que en la funcion no veo nada del otro mundo ni que refiera a una doble insercion
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 15/11/2017, 18:58
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 786
Antigüedad: 11 años, 2 meses
Puntos: 20
Respuesta: Esto me graba dos veces los mismos datos

los datos a grabar en tu tabla, tienen alguna llave para que no se dupliquen, por ejemplo algún index?, porque si no tienes un index esto es susceptible a duplicarse y tal vez nunca te des cuenta de donde, pero si tienes una llave única no se te pueden duplicar si los datos son exactamente iguales (por ahí puedes controlar el duplicado de datos).
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592
  #8 (permalink)  
Antiguo 17/11/2017, 09:21
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 931
Antigüedad: 14 años, 11 meses
Puntos: 8
Respuesta: Esto me graba dos veces los mismos datos

Tenías razón haggenx, en el JS, donde paso los datos al controller, no había puesto un preventDefault al submit del formulario. Le puse y ahora está de maravilla.

Gracias a todos
__________________
El aprendiz.
  #9 (permalink)  
Antiguo 18/11/2017, 16:36
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 786
Antigüedad: 11 años, 2 meses
Puntos: 20
Respuesta: Esto me graba dos veces los mismos datos

ahhh que bueno que ya funcionó
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592



La zona horaria es GMT -6. Ahora son las 07:34.