Foros del Web » Programando para Internet » PHP »

Consulta...tengo un array($carro) y quiero hacerlo un insert

Estas en el tema de Consulta...tengo un array($carro) y quiero hacerlo un insert en el foro de PHP en Foros del Web. Buen día amigos, Por favor si podrian ayudarme a la siguiente consulta: 1. Este codigo forma mi carrito de compras ($carro): id/precio/cantidad agregacarrito.php ------------------------ @import ...
  #1 (permalink)  
Antiguo 15/09/2009, 04:14
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta Consulta...tengo un array($carro) y quiero hacerlo un insert

Buen día amigos,
Por favor si podrian ayudarme a la siguiente consulta:

1. Este codigo forma mi carrito de compras ($carro): id/precio/cantidad
agregacarrito.php
------------------------
Código php:
Ver original
  1. <?php
  2. $id=$_POST['id'];
  3. $cantidad=$_POST['cantidad'];
  4. include('../conec.php');
  5. conectarse();
  6. $qry=mysql_query("SELECT PRECPDTO FROM catalogo WHERE CODPDTO='".$id."'");
  7. $row=mysql_fetch_array($qry);
  8. $carro[$id]=array(
  9.         'id'=>$id,
  10.         'precio'=>$row['PRECPDTO'],
  11.         'cantidad'=>$cantidad
  12. );
  13. print_r($carro);
  14. //$_SESSION['carro']=$carro;
  15. //header("Location: menu.php?p=6".SID);
  16. ?>
2. Este es el print del $carro que se forma:
Código php:
Ver original
  1.  
  2.     [00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )
  3.  
  4.     [00002] => Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 )
  5.  
  6.       )

3. Ahora el problema que tengo, es como formar las variables ($codigo1,$cantidad1,$precio1,$codigo2,$cantidad2, $precio2) del array para hacerle un INSERT y grabarlo en la tabla, algo así:
Código php:
Ver original
  1. INSERT INTO detallefac(IDDETFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2)
  2. VALUES(' ',$codigo1,$cantidad1,$precio1,$codigo2,$cantidad2,$precio2)

Esperando haberle sido claro en mi consulta, y agradesco de antemnao sus colaboraciones.

Saludos cordiales,
Willy S.
  #2 (permalink)  
Antiguo 15/09/2009, 04:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Debes crear un foreach
Código PHP:
Ver original
  1. <?php
  2. foreach($carro as $v){
  3.   echo $v["id"] . " " . $v["precio"] . " " . $v["cantidad"] . "<br />";
  4. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 15/09/2009, 05:09
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Hola abimaelrc y muchas por tu ayuda que me brindas,

A lo sugerido, una vez creado el foreach:

<?php
foreach($carro as $v){
echo $v["id"] . " " . $v["precio"] . " " . $v["cantidad"] . "<br />";
}

como realizaria el INSERT para mi tabla detalle fac???

INSERT INTO detallefac(IDDETFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,C ODPDTO2,CANTPDTO2,PRECPDTO2)
VALUES(' ',$codigo1,$cantidad1,$precio1,$codigo2,$cantidad2 ,$precio2)

p.d. la estructura de mi tabla detallefac es la sgte:
IDDETFAC int(6) UNSIGNED ZEROFILL No auto_increment
IDFAC int(6) No
CODPDTO1 int(5) No
CANTPDTO1 char(3) latin1_swedish_ci No
PRECPDTO1 decimal(7,2) No
CODPDTO2 int(5) No
CANTPDTO2 char(3) latin1_swedish_ci No
PRECPDTO2 decimal(7,2) No


Saludos,
  #4 (permalink)  
Antiguo 15/09/2009, 05:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Dentro del foreach se hace el insert
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 15/09/2009, 05:56
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

buenas el insert seria substituyendo ( haciendo el echo seguro que lo has visto)

$codigo1 --> $v["id"]
$precio1 --> $v["precio"]

Aunque no veo muy bien esta tabla, que pasa si quiero comprar 3 productos o mas?
__________________
Francesc Jimenez
  #6 (permalink)  
Antiguo 15/09/2009, 06:42
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Agradesco tu ayuda desendoll, pero no entiendo como implementarla:

ejemplo1:

para la primera fila de id=00003
[00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2

INSERT INTO detallefac(IDDETFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,C ODPDTO2,CANTPDTO2,PRECPDTO2)
VALUES(' ',$v['id'],$v['cantidad'],$v['precio'],$codigo2,$cantidad2 ,$precio2)

y cuando inserte la segunda fila id=00002
[00002] => Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 )

INSERT INTO detallefac(IDDETFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,C ODPDTO2,CANTPDTO2,PRECPDTO2)
VALUES(' ',$v['id'],$v['cantidad'],$v['precio'],$v['id'],$v['cantidad'],$v['precio'])

Gracias otra vez,

p.d. lo de tu observacion de la cantidad de campos k tiene mi tabla, descuida solo es para el ejemplo...aunque trataria en otro tema porque mi dentro del analisis se requiere el documento hasta un max de 10 productos...

Buenas,

Si me podrian apoyar por favor, esto es lo que avanze:
1. Para un primer caso donde se registro un solo producto para grabar:
Código php:
Ver original
  1.     [00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )
  2.       )
para prueba hize esto:
Código php:
Ver original
  1. foreach ($carro as $k => $v){
  2. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','','".$v['id']."','".$v['cantidad']."','".$v['precio']."','','','')";
  3. }
  4. $qry=mysql_query($query2) or die("Error:".mysql_error());

y se graba en mi tabla esto:
iddetfac cod1 cant1 prec1 cod2 cant2 prec2
000015 3 2 15.00 0 0 0.00


2. Para un segundo caso, se registro dos productos:
Código php:
Ver original
  1.     [00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )
  2.  
  3.     [00002] => Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 )
  4.  
  5.       )
e hize esto:
Código php:
Ver original
  1. foreach ($carro as $k => $v){
  2. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','','".$v['id']."','".$v['cantidad']."','".$v['precio']."','".$v['id']."','".$v['cantidad']."','".$v['precio']."')";
  3. }
  4. $qry=mysql_query($query2) or die("Error:".mysql_error());

y se graba en mi tabla esto:
iddetfac cod1 cant1 prec1 cod2 cant2 prec2
000016 2 6 12.00 0 0 0.00

Aqui esta mi consulta que modificar mi codigo, para que grabe correctamente:
************************************************** **********
iddetfac cod1 cant1 prec1 cod2 cant2 prec2
000016 3 2 15.00 2 6 12.00

Agradesco sus colaboraciones de antemano,
Saludos,
Willy S.

Última edición por GatorV; 16/09/2009 a las 13:56
  #7 (permalink)  
Antiguo 16/09/2009, 04:42
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

¿Pero cual es el problema?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 16/09/2009, 04:55
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

El problema esta cuando tengo por ejemplo 2 productos en mi carro:
Código php:
Ver original
  1.     [00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )
  2.  
  3.     [00002] => Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 )
  4.  
  5.       )
y con este codigo realizo el insert:
Código php:
Ver original
  1. foreach ($carro as $k => $v){
  2. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','','".$v['id']."','".$v['cantidad']."','".$v['precio']."','".$v['id']."','".$v['cantidad']."','".$v['precio']."')";
  3. }
  4. $qry=mysql_query($query2) or die("Error:".mysql_error());
me graba erroneamente:
Código php:
Ver original
  1. iddetfac cod1 cant1 prec1 cod2 cant2 prec2
  2. -------------------------------------------------------
  3. 000016    2     6    12.00    2    6    12.00
Por favor si te fijas, en esta ultima parte esta guardando para los campos tanto del producto 1 como del 2 los datos del ULTIMO PRODUCTO(Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 ) ), y el Primero que paso???

Gracias,
  #9 (permalink)  
Antiguo 16/09/2009, 05:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Ahhh, ya entiendo lo que quieres hacer, el problema es que cada vez que se recorre el array con el foreach va a buscar una sola linea a la vez. Me refiero 00003 es una linea y 00002 es otra linea. Estas se estan trabajando individualmente. Por lo tanto cada vez que llamas $v["id"] va a buscar la linea que esta corriendo en el momento si es 00003 o si es 00002. Para poder llamarlo como tu quieres, ya no se puede usar el foreach, en tu caso se tiene que hacer de esta forma debes hacerlo algo asi
Código PHP:
Ver original
  1. <?php
  2. $a = array();
  3. foreach($carro as $v){
  4.     $a[] = $v["id"];
  5.     $a[] = $v["cantidad"];
  6.     $a[] = "'{$v["precio"]}'";
  7. }
  8. $i = implode(",",$a);
  9. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','',$i)";
  10. echo $query2;
Aunque sería mejor hacerlo ya directamente cuando lo creas, pero esto hace lo que estas pidiendo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 16/09/2009, 06:36
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Hola amigo abimaelrc,
segun lo sugerido esto es lo que se implemento en mi codigo:

Código php:
Ver original
  1. <?php $carro=$_SESSION['carro'];
  2. $a = array();
  3. foreach($carro as $v){
  4. &#160;   $a[] = $v['id'];
  5. &#160;   $a[] = $v['cantidad'];
  6. &#160;   $a[] = $v['precio'];              //se arreglo esta linea porque estaba errada
  7. }
  8. $i = implode(",",$a);
  9. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','',$i)"; ?>
y me sale el sgte error:

Parse error: syntax error, unexpected T_STRING in C:\wamp\www\paginafacturacion.php on line 04

Saludos,
  #11 (permalink)  
Antiguo 16/09/2009, 06:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Quitale los  & #160; y deja la linea precio como te la indique $a[] = "'{$v["precio"]}'";
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 16/09/2009, 06:41
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Posteo porque me parece que fue por estas   que salieron en mi msje anterior...xq elimine esos espacios y me funciona de maravillas ...

te agradesco inmensamente abimaelrc tu apoyo desinteresado, hasta pronto.

Willy S.
  #13 (permalink)  
Antiguo 18/09/2009, 06:07
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Hola abimaelrc,

Para indicarte que todo iba bien hasta que en las etapas de pruebas se ocasiono un problema:

1. Resulta que para el ejemplo el usuario selecciona dos productos y por tanto forma el siguietne carrito: ($carro)

Array (
    [00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )
 
    [00002] => Array ( [id] => 00002 [precio] => 12.00 [cantidad] => 6 )
 
      )

2. Mi tabla detallefac donde se inserta tiene 6 campos las cuales recepcionara estos productos:
CODPDTO1 , CANTPDTO1 , PRECPDTO1,
CODPDTO2 , CANTPDTO2 , PRECPDTO2,
CODPDTO3 , CANTPDTO3 , PRECPDTO3

Hasta alli oka

3. Pero si el usuario selecciona solo un producto:

Array (
[00003] => Array ( [id] => 00003 [precio] => 15.00 [cantidad] => 2 )

)

4. Me sale el sgte error:

Error:Column count doesn't match value count at row 1

Favor de apoyarme con este tema, gracias y saludos.
  #14 (permalink)  
Antiguo 18/09/2009, 06:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Puedes hacer esto.
Código PHP:
Ver original
  1. <?php
  2. $a = array();
  3. foreach($carro as $v){
  4.     $a[] = $v["id"];
  5.     $a[] = $v["cantidad"];
  6.     $a[] = "'{$v["precio"]}'";
  7. }
  8. if(count($a)==3){
  9.     $a[] = 0;
  10.     $a[] = 0;
  11.     $a[] = 0;
  12. }
  13. $i = implode(",",$a);
  14. $query2="INSERT INTO detallefac(IDDETFAC,IDFAC,CODPDTO1,CANTPDTO1,PRECPDTO1,CODPDTO2,CANTPDTO2,PRECPDTO2) VALUES ('','',$i)";
  15. echo $query2;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 18/09/2009, 06:37
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Gracias abimaelrc, realizare algunas pruebas y posteo los resultados.

Saludos,

p.d. el maximo de productos seleccionados son 8, con estos datos es donde trabajare adaptandolo a mis necesidades
  #16 (permalink)  
Antiguo 18/09/2009, 22:52
Avatar de hoberwilly  
Fecha de Ingreso: julio-2008
Ubicación: Lima - Perú
Mensajes: 769
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Hola amigos,
Mi consulta es la sgte. que hacer si mi tabla esta diseñada para alojar hasta seis productos:

IDDETFAC int(6) UNSIGNED ZEROFILL No auto_increment
IDFAC int(6) No
CODPDTO1 int(5) No
CANTPDTO1 char(3) latin1_swedish_ci No
PRECPDTO1 decimal(7,2) No
CODPDTO2 int(5) No
CANTPDTO2 char(3) latin1_swedish_ci No
PRECPDTO2 decimal(7,2) No
CODPDTO3 int(5) No
CANTPDTO3 char(3) latin1_swedish_ci No
PRECPDTO3 decimal(7,2) No
CODPDTO4 int(5) No
CANTPDTO4 char(3) latin1_swedish_ci No
PRECPDTO4 decimal(7,2) No
CODPDTO5 int(5) No
CANTPDTO5 char(3) latin1_swedish_ci No
PRECPDTO5 decimal(7,2) No
CODPDTO6 int(5) No
CANTPDTO6 char(3) latin1_swedish_ci No
PRECPDTO6 decimal(7,2) No

pero el usuario solo quiere seleccionar 2 productos , como se deberia implementar para que no me salga el sgte error:

Error:Column count doesn't match value count at row 1


Saludos,
  #17 (permalink)  
Antiguo 18/09/2009, 23:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Ok, tienes que observar que dice el error que los vales que estas colocando no machean las columnas. O sea posiblemente estes colocando 8 columnas con sus respectivos nombres, pero tal vez estes colocando 6 valores, te faltarian 2. Te sugiero que mires la variable que estamos colocando en los valores y le des un echo, antes de la consulta, para ver que te trae. Luego cuentas cuantos valores hay y miras si hay la misma cantidad de valores que columnas declaradas.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 18/09/2009, 23:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Comenzaste con campos para dos productos, subiste a 3, ahora vas en 6 y que pasa si alguien quiere 10 productos?

Tu tabla debe contener campos solamente para un producto y creas un registro por cada producto que el cliente compre.

Aparte, es mas facil leer varios registros y tratarlos uno a uno que recorrer producto1, precio1, cantidad1 hasta productoX, cantidadX, precioX.

Tabla:
IDDETFAC int(6) UNSIGNED ZEROFILL No auto_increment
IDFAC int(6) No
CODPDTO int(5) No
CANTPDTO char(3) latin1_swedish_ci No
PRECPDTO decimal(7,2) No

En el foreach($carro ...) haces insert de cada producto y listo.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 19/09/2009, 00:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Consulta...tengo un array($carro) y quiero hacerlo un insert

Sinceramente yo prefiero que lo hagas como te dice Triby. Todos esos datos que estamos añadiendo lo hagas individual. Porque como te dice Triby, no sabes si en un futuro quiera más productos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 12:50.