Foros del Web » Programando para Internet » PHP »

almacenar array en base de datos (checkbox-text)

Estas en el tema de almacenar array en base de datos (checkbox-text) en el foro de PHP en Foros del Web. hola muy buenas! ando desarrollando un sistemita y debo registrar un array en la base de datos. Tengo un formulario (select) donde al seleccionar el ...
  #1 (permalink)  
Antiguo 10/02/2016, 17:32
Avatar de cassini  
Fecha de Ingreso: julio-2009
Mensajes: 98
Antigüedad: 14 años, 9 meses
Puntos: 0
almacenar array en base de datos (checkbox-text)

hola muy buenas!

ando desarrollando un sistemita y debo registrar un array en la base de datos. Tengo un formulario (select) donde al seleccionar el cliente me carga los pedidos que están relacionados a ese cliente

Código PHP:
Ver original
  1. while($resultados = mysqli_fetch_array($consulta)) {
  2. $idPedido = $resultados['idPedido'];
  3. $pedido = $resultados['descPedido'];
  4. $pedidos.="
  5. <input type="checkbox" name="idPedido[]" value="$idPedido">".$pedido."
  6. <input type="text" name="importePedido[]" placeholder="Importe">
  7. ";
  8. }
Ahora tengo la tabla donde pretendo almacenar el idPedido y el importePedido. Donde puede ser que se elija solo uno o todos los checkbox.

id - idPedido - numeroFactura - importePedido
1 - 1 - fac001 - 890
2 - 2 - fac001 - 1500
3 - 1 - fac002 - 5600
A lo mejor esta demás pero es así como pretendo almacenar mis datos en la BD

he tratado de hacerlo con un foreach de la siguiente forma
archivo-procesa.php

Código PHP:
Ver original
  1. $pediFact = "insert into pediFact (idPedido,numeroFactura,importePedido)";
  2.     $pediFact.= " values";
  3.     $pediFact.= " (";
  4.  
  5.     foreach ($_POST['idPedido'] as $datoId => $valorId) {
  6.  
  7.         $pediFact.= "".$valorId.",";
  8.     }
  9.  
  10.     $pediFact.= "'".$_POST['numeroFactura']."',";
  11.  
  12.     foreach ($_POST['importePedido'] as $datoImporte => $valorImporte) {
  13.  
  14.         $pediFact.= "".$valorImporte."";
  15.     }
  16.  
  17.     $pediFact.= ")";
  18.  
  19.     $ejecuta = mysqli_query($conexion,$pediFact);
  20.  
  21.     if($ejecuta){
  22.         echo "Exito!!! :)";
  23.     }else{
  24.         echo "Error :( !!!".mysqli_error($conexion);
  25.     }

pero al mandar el registro me sale el mensaje:
Error :( !!!Column count doesn't match value count at row 1

no se si lo que estoy haciendo es lo ideal pero es así como se me ocurrió.
Ojalá puedan orientarme un poco la verdad creo que ya estoy muy desorientado :(

GRACIAS!!!
__________________
Humildad, ante todo humildad
  #2 (permalink)  
Antiguo 10/02/2016, 20:41
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 7 meses
Puntos: 145
Respuesta: almacenar array en base de datos (checkbox-text)

Ese error significa que la cantidad de datos y columnas no coinciden.

Para empezar, haz un print del array:

Código PHP:
Ver original
  1. print("<pre>".print_r($_POST,true)."</pre>");

Y después un echo de la consulta:

Código PHP:
Ver original
  1. echo $pediFact;

Y por favor, muestra los resultados.
__________________
¿Te sirvió la respuesta? Deja un +1
  #3 (permalink)  
Antiguo 11/02/2016, 00:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: almacenar array en base de datos (checkbox-text)

Hola cassini,

Suponiendo que tu campo id es autoincrementable, creo que sería algo así:

Código PHP:
Ver original
  1. $pediFact = "insert into pediFact (id,idPedido,numeroFactura,importePedido)";
  2.     $pediFact.= " values";
  3.     $pediFact.= " (NULL, ";
  4. ...........

Espero que te sirva...
  #4 (permalink)  
Antiguo 11/02/2016, 09:42
Avatar de cassini  
Fecha de Ingreso: julio-2009
Mensajes: 98
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: almacenar array en base de datos (checkbox-text)

gracias a ambos por su ayuda
__________________
Humildad, ante todo humildad
  #5 (permalink)  
Antiguo 11/02/2016, 09:42
Avatar de cassini  
Fecha de Ingreso: julio-2009
Mensajes: 98
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: almacenar array en base de datos (checkbox-text)

Cita:
Iniciado por rbczgz Ver Mensaje
Hola cassini,

Suponiendo que tu campo id es autoincrementable, creo que sería algo así:

Código PHP:
Ver original
  1. $pediFact = "insert into pediFact (id,idPedido,numeroFactura,importePedido)";
  2.     $pediFact.= " values";
  3.     $pediFact.= " (NULL, ";
  4. ...........

Espero que te sirva...
ya lo intente pero me sigue mandando el mismo error :(
__________________
Humildad, ante todo humildad
  #6 (permalink)  
Antiguo 11/02/2016, 09:52
Avatar de cassini  
Fecha de Ingreso: julio-2009
Mensajes: 98
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: almacenar array en base de datos (checkbox-text)

Cita:
Iniciado por NueveReinas Ver Mensaje
Ese error significa que la cantidad de datos y columnas no coinciden.

Para empezar, haz un print del array:

Código PHP:
Ver original
  1. print("<pre>".print_r($_POST,true)."</pre>");

Y después un echo de la consulta:

Código PHP:
Ver original
  1. echo $pediFact;

Y por favor, muestra los resultados.
Hola al imprimir el array me sale:

Código HTML:
Ver original
  1. Array
  2. (
  3.     [numeroFactura] => fac005
  4.     [folioCliente] => 488bbc
  5.     [idPedido] => Array
  6.         (
  7.             [0] => 1
  8.             [1] => 3
  9.         )
  10.  
  11.     [importePedido] => Array
  12.         (
  13.             [0] => 1000
  14.             [1] => 800
  15.         )
  16.  
  17. )

y al imprimir la consulta sale así

Código SQL:
Ver original
  1. INSERT INTO pediFact (idPedido,numeroFactura,importePedido) VALUES (1,3,'fac005',1000800)


como veo me esta insertando todo en una sola consulta por eso el error ¿como puedo hacer para que me haga un insert por cada uno? podrá quedar con un for?
__________________
Humildad, ante todo humildad

Etiquetas: almacenar, formulario, mysql, registro, select, tabla
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 17:14.