Foros del Web » Programando para Internet » PHP »

Guardar valores de array en mysql

Estas en el tema de Guardar valores de array en mysql en el foro de PHP en Foros del Web. Hola comunidad, estoy necesitando de su gran ayuda ya que estoy realizando una web con carro de compras y me quedé trabado acá, les paso ...

  #1 (permalink)  
Antiguo 11/06/2012, 18:38
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Guardar valores de array en mysql

Hola comunidad, estoy necesitando de su gran ayuda ya que estoy realizando una web con carro de compras y me quedé trabado acá, les paso a comentar.

Para el carro de compras utilizo la libreria simpleCart (JS), una vez que el comprador tiene todos sus productos y realiza el checkout el mismo envia por $_POST los articulos, cantidades y precio de lo que compro

recibo el $_POST['items']; en otra página ( PHP ) y acá viene el problema.

Al printear el $_POST['items'];, Sale así:

DEDI #1 1 500
DEDI #2 1 700
DEDI #3 1 900

nombre cant precio

Bueno, si no me equivoco es un array, ahora yo necesito guardar esos datos en una db mysql así:

id, producto, cantidad, precio
1 DEDI #1 1 500
2 DEDI #2 1 700
3 DEDI #3 1 900


traté de separar el array con foreach y no pude, puede darme algún ejemplo práctico o darme una mano sinceramente estoy ahí trabado, espero una pronta respuesta muchas gracias a todos de antemano.
  #2 (permalink)  
Antiguo 11/06/2012, 18:42
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Guardar valores de array en mysql

hace un var_dump y ponelo tal cual.

Podes usar explode, pero si son array ya vienen dividos por subindices

http://www.marcofbb.com.ar/vectores-...reglos-en-php/

Saludos
  #3 (permalink)  
Antiguo 11/06/2012, 18:45
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Marco, gracias por la pronta respuesta, ya que me estoy volviendo tarado..

te dejo el var_dump exactamente como sale..

Código PHP:
Ver original
  1. string(54) "ET DEDI #11500
  2. ET DEDI #21700
  3. ET DEDI #31900
  4. "
  #4 (permalink)  
Antiguo 11/06/2012, 18:58
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Guardar valores de array en mysql

Cita:
Iniciado por nettolz Ver Mensaje
Marco, gracias por la pronta respuesta, ya que me estoy volviendo tarado..

te dejo el var_dump exactamente como sale..

Código PHP:
Ver original
  1. string(54) "ET DEDI #11500
  2. ET DEDI #21700
  3. ET DEDI #31900
  4. "
Aclaro algunas dudas, eso no es un array es una variable. Lo que vas a tener que hacer es convertirlo en array para manipular los datos.

Para eso podes hacer un explode a los espacios en blancos " " que hay entre cada palabra.

http://php.net/manual/es/function.explode.php

Código PHP:
Ver original
  1. // Ejemplo 1
  2. $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
  3. $pieces = explode(" ", $pizza);
  4. echo $pieces[0]; // piece1
  5. echo $pieces[1]; // piece2
  #5 (permalink)  
Antiguo 11/06/2012, 20:43
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Bien marco, ahí me aclaraste un poco más el tema, pero te cuento que el $_POST['items']; lo mando desde JS ( SIMPLECART ) cómo puedo hacer para meter el string en un array y luego ir guardandoló en mysql como lo plantié en el primer thread?

muchas gracias por responder, se agradece.
  #6 (permalink)  
Antiguo 11/06/2012, 21:00
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Hola nettolz,
Cual de estos dos caso te devuelve _POST['items']

Caso 1

DEDI #1 1 500
DEDI #2 1 700
DEDI #3 1 900

Caso 2

ET DEDI #11500
ET DEDI #21700
ET DEDI #31900
  #7 (permalink)  
Antiguo 12/06/2012, 06:41
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: Guardar valores de array en mysql

Como es la estructura de tablas de base de datos donde queres guardar los items?
__________________
http://www.latinium.com.ar/
  #8 (permalink)  
Antiguo 12/06/2012, 07:50
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Chicos,

el
Código PHP:
Ver original
  1. $_POST['items'];
devuelve lo siguiente:

Código HTML:
Ver original
  1. ET DEDI #1 1 500
  2. ET DEDI #2 1 700
  3. ET DEDI #3 1 900

y la estructura de la DB es esta:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `test` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `producto` varchar(512) NOT NULL,
  4.   `cantidad` int(10) NOT NULL,
  5.   `precio` text NOT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

Espero pronta respuesta, muchas gracias.
  #9 (permalink)  
Antiguo 12/06/2012, 08:57
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Hola nettolz,

Código PHP:
Ver original
  1. $cadena =  "
  2. ET DEDI #1 1 500
  3. ET DEDI #2 1 700
  4. ET DEDI #3 1 900
  5. ";
  6. $resultado = array();
  7. $patron = '/([A-Z]+\s)(\#[0-9]+\s)([0-9]{1}+\s)([0-9]{1,6})/';
  8.  
  9. if (preg_match_all ($patron, $cadena, $resultado)) {
  10.  
  11. $producto    = $resultado[1];
  12. $codProducto = $resultado[2];
  13. $cantidad    = $resultado[3];
  14. $precio      = $resultado[4];
  15.  
  16. $sqlString = "INSERT INTO productos(`Producto`,`Cantidad`,`Precio`)VALUE";
  17.  
  18. for ($i = 0;$i < count($producto); $i++){
  19.        $sqlString .= "('".$producto[$i].$codProducto[$i]."',".$cantidad[$i].",".$precio[$i]."),";
  20. }
  21.  
  22. echo trim($sqlString, ',');
  23.  
  24. } else {
  25.     trigger_error("No resulto la cedena que se esperaba d:`-( ", E_USER_ERROR);
  26. }

Saludos.
  #10 (permalink)  
Antiguo 12/06/2012, 09:25
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

gjx2,

Acabo de probar lo que me dejas, apenas lo pongo me tira el siguiente error:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in D:\xampp\htdocs\FINAL\email.php on line 14 ( tenia un espacio de más, ya lo arreglé )

pero después me salta otro error que es este y no se que es:

Parse error: syntax error, unexpected T_IF in D:\xampp\htdocs\FINAL\email.php on line 18

el código está exactamente como me lo pusiste..

de paso aprovecho para aclarar que el $_POST['items']; no siempre viene con la misma cantidad de productos en él..

saludos
  #11 (permalink)  
Antiguo 12/06/2012, 09:40
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Este es el patron para el caso de que cantidad sea mayor y el item del producto

Código PHP:
Ver original
  1. $patron = '/([A-Z]+\s)(\#[0-9]{1,4}+\s)([0-9]{1,4}+\s)([0-9]{1,6})/';

Por otra parte, seria bueno que mostraras el codigo de la linea 18.

Saludos.
  #12 (permalink)  
Antiguo 12/06/2012, 09:44
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

gjx2,

acá te dejo la linea del error, la verdad que no veo nada raro, todas las comillas las veo bien y los ; en las instrucciones también ( o será el café que me está pegando mal.. ).

Código PHP:
Ver original
  1. if (preg_match_all ($patron, $cadena, $resultado)) {
  #13 (permalink)  
Antiguo 12/06/2012, 09:47
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Me parece que aquí esta la fuente del problema.
Código PHP:
Ver original
  1. $cadena = $_POST['items'];
  #14 (permalink)  
Antiguo 12/06/2012, 09:55
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Nop, sigue tirando el mismo error en la misma linea, te dejo el código completo ( desde ya gracias por la ayuda che ):

Código PHP:
Ver original
  1. <?php
  2.  
  3. include('includes/mysql.php');
  4.  
  5.  
  6. $cadena = $_POST['test'];
  7. $resultado = array();
  8. $patron = '/([A-Z]+\s)(\#[0-9]{1,4}+\s)([0-9]{1,4}+\s)([0-9]{1,6})/';
  9.  
  10. if (preg_match_all ($patron, $cadena, $resultado))
  11. {
  12.     $producto * *= $resultado[1];
  13.     $codProducto = $resultado[2];
  14.     $cantidad * *= $resultado[3];
  15.     $precio * * *= $resultado[4];
  16.  
  17.     $sqlString = "INSERT INTO test(`producto`,`cantidad`,`precio`)VALUE";
  18.     for ($i = 0;$i < count($producto); $i++)
  19.     {
  20.         $sqlString .= "('".$producto[$i].$codProducto[$i]."',".$cantidad[$i].",".$precio[$i]."),";
  21.     }
  22. }
  23.  
  24. ?>

Última edición por nettolz; 12/06/2012 a las 10:01
  #15 (permalink)  
Antiguo 12/06/2012, 10:01
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

No veo donde puede estar el problema si $_POST['test']; trae la cadena de texto que estamos tratando.
También tienes que tener cuidado con los caracteres ocultos que se agregan al código cuando copias utilizando el link de copiar.

En tu IDE selecciona la opción de mostrar códigos ocultos a ver si es eso.
  #16 (permalink)  
Antiguo 12/06/2012, 10:21
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Exactamente era un error de carácteres ocultos, te pido disculpas.. jaja
Bueno, así deje el código el $_POST['test']; viene perfecto asi que no es el problema, se supone que con el echo trim debería printear la consulta pero no printea nada, que puede estar pasando? te dejo el código completo.

Código PHP:
Ver original
  1. <?php
  2.  
  3. include('includes/mysql.php');
  4.  
  5. $cadena = $_POST['test'];
  6. $resultado = array();
  7. $patron = '/([A-Z]+\s)(\#[0-9]{1,4}+\s)([0-9]{1,4}+\s)([0-9]{1,6})/';
  8.  
  9. if (preg_match_all ($patron, $cadena, $resultado))
  10. {
  11.     $producto = $resultado[1];
  12.     $codProducto = $resultado[2];
  13.     $cantidad = $resultado[3];
  14.     $precio = $resultado[4];
  15.  
  16.     $sqlString = "INSERT INTO test(`producto`,`cantidad`,`precio`)VALUE";
  17.     for ($i = 0;$i < count($producto); $i++)
  18.     {
  19.         $sqlString .= "('".$producto[$i].$codProducto[$i]."',".$cantidad[$i].",".$precio[$i]."),";
  20.     }
  21.     echo trim($sqlString, ',');
  22. }
  23.  
  24. ?>

EDITO: por lo que estuve testeando ni siquiera entra al if del preg match.. que será?
  #17 (permalink)  
Antiguo 12/06/2012, 10:27
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Al if colocale un else para ver si el preg_match_all esta resolviendo.
y hazle un var_dump a la $cadena para comparar los formatos

Código PHP:
Ver original
  1. else {
  2.     trigger_error("No resulto la cedena que se esperaba d:`-( ", E_USER_ERROR);
  3. }
  #18 (permalink)  
Antiguo 12/06/2012, 10:28
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

gjx2,

No, cómo edite arriba no esta resolviendo el if..
  #19 (permalink)  
Antiguo 12/06/2012, 10:29
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Otra cosa es que yo supongo que entre DEDI <-> #1 existe un espacio.
dime si me equivoco.
  #20 (permalink)  
Antiguo 12/06/2012, 10:33
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Esta bien como dices, si hay un espacio..

lo que viene con el post es esto ( lo explico más detallado ).

nombreproducto cantidadproducto precioproducto

nombreproducto = ET DEDI #1
cantidadproducto = 1
precioproducto = 500

Saludos
  #21 (permalink)  
Antiguo 12/06/2012, 10:42
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Algo que se me ocurre como ultima instancia
es hacer un prueba simulando los datos de la cadena.

Código PHP:
Ver original
  1. include('includes/mysql.php');
  2.  
  3. $cadena =  "
  4. ET DEDI #1 1 500
  5. ET DEDI #2 1 700
  6. ET DEDI #3 1 900
  7. ";
  8. $resultado = array();
  9. $patron = '/([A-Z]+\s)(\#[0-9]{1,4}+\s)([0-9]{1,4}+\s)([0-9]{1,6})/';
  10.  
  11. if (preg_match_all ($patron, $cadena, $resultado))
  12. {
  13.     $producto = $resultado[1];
  14.     $codProducto = $resultado[2];
  15.     $cantidad = $resultado[3];
  16.     $precio = $resultado[4];
  17.  
  18.     $sqlString = "INSERT INTO test(`producto`,`cantidad`,`precio`)VALUE";
  19.     for ($i = 0;$i < count($producto); $i++)
  20.     {
  21.         $sqlString .= "('".$producto[$i].$codProducto[$i]."',".$cantidad[$i].",".$precio[$i]."),";
  22.     }
  23.     echo trim($sqlString, ',');
  24. }
  #22 (permalink)  
Antiguo 12/06/2012, 10:49
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

gjx2,

Hice la prueba cómo dijiste y me sale lo siguiente:

DEDI
1
DEDI
1
DEDI
1
  #23 (permalink)  
Antiguo 12/06/2012, 10:50
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Cual de todas las pruebas
  #24 (permalink)  
Antiguo 12/06/2012, 10:51
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Utilizé esta cadena y lo que se printeó fue lo que puse arriba

Código PHP:
Ver original
  1. $cadena =  "
  2. ET DEDI #1 1 500
  3. ET DEDI #2 1 700
  4. ET DEDI #3 1 900
  5. ";
  #25 (permalink)  
Antiguo 12/06/2012, 10:53
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Es extrano por que no esta sujeto a que te imprima eso.
Esta es la salida que te debe mostrar.

Código PHP:
Ver original
  1. /*
  2. INSERT INTO test(`producto`,`cantidad`,`precio`)VALUE('DEDI #1 ',1 ,500),('DEDI #2 ',1 ,700),('DEDI #3 ',1 ,900)
  3. */
  #26 (permalink)  
Antiguo 12/06/2012, 10:57
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

Ahí esta me mostro cómo decis arriba:

Código MySQL:
Ver original
  1. INSERT INTO test(`producto`,`cantidad`,`precio`)VALUE('DEDI #1 ',1 ,500),('DEDI #2 ',1 ,700),('DEDI #3 ',1 ,900)
  #27 (permalink)  
Antiguo 12/06/2012, 11:03
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Ok entonces resuelto ?
  #28 (permalink)  
Antiguo 12/06/2012, 12:06
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

No gjx2, no funciona, eso que te puse arriba es lo que sale con la cadena de prueba.

Pero cuando hago: $cadena = $_POST['test']; no entra al if.. ( el $_POST['test']; viene bien, lo ví con un echo.. ).

Saludos y gracias por esta ayuda que me estas dando!
  #29 (permalink)  
Antiguo 12/06/2012, 12:42
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Guardar valores de array en mysql

Pues entonces $_POST['test'] no te esta dando el formato.
  #30 (permalink)  
Antiguo 12/06/2012, 12:48
 
Fecha de Ingreso: junio-2010
Ubicación: Buenos Aires, Capital Federal
Mensajes: 29
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Guardar valores de array en mysql

gjx2,

EDITO: Por lo que estube probando funciona perfecto, ahora el tema está en que si cambia el nombre de producto o tiene espacios entre si o es más largo que "DEDI #1" no entra al if..

Cómo puedo solucionar esto :D?

Gracias desde ya, muy agradecido por tu ayuda!

Última edición por nettolz; 12/06/2012 a las 12:58

Etiquetas: mysql
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 20:03.