Foros del Web » Programando para Internet » PHP »

Insertar arreglo en mysql con PHP

Estas en el tema de Insertar arreglo en mysql con PHP en el foro de PHP en Foros del Web. Buenas amigos. Resulta tengo una base de datos relacional donde tengo una tabla basica que se compone de su codigo y su descripcion como esta: ...
  #1 (permalink)  
Antiguo 22/02/2014, 20:19
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Insertar arreglo en mysql con PHP

Buenas amigos. Resulta tengo una base de datos relacional donde tengo una tabla basica que se compone de su codigo y su descripcion como esta:

+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| cod_vict | int(11) | NO | PRI | NULL | auto_increment |
| dtalle_vict | char(45) | NO | | | |
+-------------+----------+------+-----+---------+----------------+
bueno ahi tengo una serie de registros como

1 Abandono o despojo forzado de tierras
2 Actos terroristas
3 Delitos contra la libertad
etc...

Y tengo una tabla llamada 'formulario' donde esta indexada el codigo de la tabla anterior 'cod_vict' como llave foranea.
Trato de insertar el campo como un arreglo para que me guarde en unsolo campo todos los check seleccionados que el usuario elija.
Dejo mi codigo para que vean lo que trato de hacer y si alguien me sugiere algo cualquier ayuda es valiosa para mi. Gracias


Traigo los datos de la tabla con el check:

Cita:
* Hecho victimizante
<?
$sql="Select * from victimizante";
$result=mysql_query($sql,$link);
echo "<table align='center'>";
while($row=mysql_fetch_object($result)){
echo "<tr><td bgcolor=#F2F5A9 align=left><input type='checkbox' name='cod_vict' value='$row->cod_vict'> $row->dtalle_vict</tr>";
}
echo "</table>";
?>

Insertando el arreglo:


Cita:
if ($_POST["enviar"]){
$cod_vict=array();
$cod_vict['cod_vict']=$_POST['cod_vict'];

$sql="insert into cabeza_fam (cod_vict) values ('".$_POST["cod_vict"]."')";
if ($result=mysql_query ($sql,$link)){echo '<script language= "Javascript"> alert("Registro guardado correctamente");</script>';}
NOTA: Si me inserta el dato pero solo uno mas no elgrupode datos que elija el usuario
  #2 (permalink)  
Antiguo 22/02/2014, 21:37
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Primeramente, para insertar varios registros a la vez, puedes hacerlo así:

Código MySQL:
Ver original
  1. INSERT INTO tabla (campo) VALUES ('ejemplo1'), ('ejemplo2'), ('ejemplo3')

Podrías hacerlo con ayuda de un bucle, pero no es muy eficiente que digamos. Dado a que lo que llega es un array, debes separar sus componentes (los datos). Sabiendo esto y lo anterior, solamente queda darle el formato necesario (paréntesis y comillas) para realizar la inserción.

Código PHP:
Ver original
  1. $insertar = "('" . implode("'), ('", $_POST['cod_vict']) . "')";
  2. $sql = "INSERT INTO cabeza_fam (cod_vict) VALUES $insertar";

La función implode, insertará las comillas y paréntesis necesarios entre cada dato que integre el array, uniéndolos y formando una cadena. Con esto, la sentencia SQL quedará como el ejemplo anterior.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 22/02/2014, 22:00
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Hola,gracias por tu aporte. Hice el ejercicio pero ahora me inserta un cero '0' en el campo :(
  #4 (permalink)  
Antiguo 23/02/2014, 00:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Imprime el contenido de $_POST['cod_vict'] para saber qué está llegando.

Código PHP:
Ver original
  1. echo "<pre>";
  2. var_dump($_POST['cod_vict']);
  3. echo "</pre>";

Copia y pega el resultado aquí para conocer el contenido de dicha variable. También imprime el valor de $sql para ver cómo se está formando la sentencia SQL. Si el tipo de valor a guardar en el campo cod_vict es numérico, entonces no es necesario colocar las comillas simples. Si ese fuera el caso, quítaselas.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 23/02/2014, 12:16
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Hola Alexis88 si, efectivamente el arreglo que estoy tratando de guardar en el campo es numerico, entonces si el usurio checkea varios item seria guardar los codigos de los registros ejemplo, 13 5 6 8...

Encuanto a la insersion la hice de la siguiente manera:

Código PHP:
Ver original
  1. <?php
  2. if ($_POST["enviar"]){
  3. $cod_vict=array();
  4.         $cod_vict['cod_vict']=$_POST['cod_vict'];
  5.         $insertar = "('" . implode("'), ('", $_POST['cod_vict']) . "')";
  6.   $sql="insert into cabeza_fam (cod_vict) values ('".$_POST[$insertar]."')";
  7.     if ($result=mysql_query ($sql,$link)){echo '<script language= "Javascript"> alert("Registro guardado correctamente");</script>';
  8. echo "<pre>";
  9. var_dump($_POST['cod_vict']);
  10. echo "</pre>";
  11. }

Me guarda un cero '0' en el campo y el resultado que me sale en pantalla es el siguiente:

Código HTML:
Ver original
  1. Warning: implode() [function.implode]: Bad arguments. in C:\AppServ\www\SICA_WEB_VIOTA\sistema\formularios\cab_hogar\cabeza_hogar.php on line 1938
  2. string(2) "13"
  #6 (permalink)  
Antiguo 23/02/2014, 13:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Ya veo, no estás recibiendo un array, por eso al inicio sólo guardaba un dato y ahora aparece ese error. Tu problema está en el checkbox, el nombre debe ser cod_vict[] para que puedas llevar todos los valores seleccionados, así llegaría un array y podrás aplicar el método que te sugerí.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 23/02/2014, 13:39
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Hola Alexis88 si era queme faltaba el cod_vict[] pero lo que pasa es que no me esta insertando nada. Coloque el campo como INT y me inserta un cero '0' despues lo cambie a un VARCHAR y no aparece nada en el campo. como hago para que al momento de insertar me inserte como un arreglo.?

El dump ahora me sale asi:

Código HTML:
Ver original
  1. array(3) {
  2.   [0]=>
  3.   string(2) "12"
  4.   [1]=>
  5.   string(2) "14"
  6.   [2]=>
  7.   string(2) "16"
  8. }

lo que indica que en el arreglo si se estan guardando el conjunto de datos en la variable pero no se estan insertando ¿alguien me puede ayudar por favor?
  #8 (permalink)  
Antiguo 23/02/2014, 14:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Imprime el valor de $sql para ver si se está formando bien o no la sentencia SQL.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 23/02/2014, 15:35
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Pues mira lo que me sale:

Código HTML:
Ver original
  1. array(3) {
  2.   [0]=>
  3.   string(2) "12"
  4.   [1]=>
  5.   string(2) "14"
  6.   [2]=>
  7.   string(2) "16"
  8. }
  9. insert into cabeza_fam (cod_admin,fecha_cab,hora_cab,nombres_cab,apellidos_cab,edad_cab,cod_doc,numdoc_cab,cod_dep,cod_muni,direccion,cod_zona_viv,cod_barrio_veredas_viv,sipod_cab,ruv_cab,cod_civil,cod_raza,fecha_nac_cab,dpto_nac_cab,muni_nac_cab,cod_vict,fecha_exp_cab,cod_factor_armado_exp,dep_expulsion,muni_expulsion,cod_tiempo_ant_exp,cod_tiempo_muni_recep,cod_zona_exp,cod_barrios_veredas_exp,dep_recep,muni_recep,cod_zona_recep,cod_barrios_veredas_recep,telefono_cab,cod_person_cargo,cod_factores_muni,cod_ing_mens,cod_otra_fuente_ing,cod_tipo_viv,acueducto,alcantarillado,gas_natural,parabolica,internet,cod_genero_cab,cod_prog_muj_cab,cod_grupo_poblacional,estudia_act_cab,cod_program_est,cod_ins,cod_anio_aprob,adulto_may_cab,cod_prog_adulto,capacitaciones_cab,cod_capacitacion,cod_ent_cap,cod_recibir_cap,trabaja_act_cab,cod_trabajo,cod_oficios,negocio,cod_tipo_negocio,exito_negocio,cod_duracion_neg,discapacidad_cab,cod_tip_disc,posee_seg_soc_cab,cod_seg_social,cod_eps,cod_calif_serv,viv_propia,parcela,lote,cod_seguridad_muni,subsidio_act_cab,cod_subsidio_act,subsidio_pas_cab,cod_subsidio_pas,cod_voc_prod,cod_comp_familiar,cod_tipo_fam,cod_suideales,observaciones,mujer_homb,embarazada_cab,prenatal_cab,lactando_cab,crec_desa_cab)values ('',NOW(),NOW(),'','','0','0','',' ','','',' ','',' ',' ','0','0','','Cundinamarca','La palma','','','0','Cundinamarca','La palma','0','0','0','','Cundinamarca','La palma',' ','','','0','0','0','0','0',' ',' ',' ',' ',' ',' ','','0','0','','','','0','','0','','','0','0','','0','0','','','','0','','0','','','0',' ',' ',' ','0','0','','0','','0','0','0','0','','0','','','','')
  #10 (permalink)  
Antiguo 23/02/2014, 16:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Una pregunta, ¿por qué hay tantos campos en esta última sentencia si en la primera solamente había uno?, ten en cuenta que si vas a insertar datos en más de un campo, la figura va a cambiar.

Por otro lado, revisando el código anterior que mostraste, estás cometiendo algunos errores. Para empezar, debiste dejar la sentencia como te la di, no es VALUES ('".$_POST[$insertar]."')", eso definitivamente va a fallar pues $insertar es la cadena que contiene los valores del array con el formato requerido para hacer la inserción múltiple, por eso obtienes ese error. Debes de dejarlo en VALUES $insertar, como te lo indiqué en mi primera respuesta. El segundo error, que más que error es código innecesario, está en las dos primeras líneas después del if, creas el array $cod_vict y le asignas el contenido de $_POST['cod_vict'], sin embargo, nunca usas dicha variable. Borra esas dos líneas, están de más.

Implementa estos cambios y nos cuentas cómo te fue, saludos.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 23/02/2014, 17:03
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Disculpa Alexis88 es que no queria mostrar todo el codigo por lo largo pero bueno lo voy hacer.
Hice lo que me sugeriste y bueno ya me muestra por lo menos que en la variable insertar se esta almacenando los codigos de los registros que bien, el problema es que ahora no me esta insertando registros en la base de datos. Voy a pegar entonces mi codigo real:

Creando el check dinamico:
Código PHP:
Ver original
  1. <?            
  2.         $sql="Select * from victimizante";
  3.         $result=mysql_query($sql,$link);
  4.         echo "<table align='center'>";
  5.         while($row=mysql_fetch_object($result)){
  6.         echo "<tr><td bgcolor=#F2F5A9 align=left><input type='checkbox' name='cod_vict[]' value='$row->cod_vict'>$row->dtalle_vict</tr>";
  7.         }
  8.         echo "</table>";  
  9.         ?>



Insertando datos en el formulario:

Código PHP:
Ver original
  1. <?php
  2.   include ('../../../sistema/conex.php');
  3.   if ($_POST["enviar"]){
  4.     $insertar = "('" . implode("'), ('", $_POST['cod_vict']) . "')";
  5.    $sql="insert into cabeza_fam (cod_admin,fecha_cab,hora_cab,nombres_cab,apellidos_cab,edad_cab,cod_doc,numdoc_cab,cod_dep,cod_muni,direccion,cod_zona_viv,cod_barrio_veredas_viv,sipod_cab,ruv_cab,cod_civil,cod_raza,fecha_nac_cab,dpto_nac_cab,muni_nac_cab,cod_vict,fecha_exp_cab,cod_factor_armado_exp,dep_expulsion,muni_expulsion,cod_tiempo_ant_exp,cod_tiempo_muni_recep,cod_zona_exp,cod_barrios_veredas_exp,dep_recep,muni_recep,cod_zona_recep,cod_barrios_veredas_recep,telefono_cab,cod_person_cargo,cod_factores_muni,cod_ing_mens,cod_otra_fuente_ing,cod_tipo_viv,acueducto,alcantarillado,gas_natural,parabolica,internet,cod_genero_cab,cod_prog_muj_cab,cod_grupo_poblacional,estudia_act_cab,cod_program_est,cod_ins,cod_anio_aprob,adulto_may_cab,cod_prog_adulto,capacitaciones_cab,cod_capacitacion,cod_ent_cap,cod_recibir_cap,trabaja_act_cab,cod_trabajo,cod_oficios,negocio,cod_tipo_negocio,exito_negocio,cod_duracion_neg,discapacidad_cab,cod_tip_disc,posee_seg_soc_cab,cod_seg_social,cod_eps,cod_calif_serv,viv_propia,parcela,lote,cod_seguridad_muni,subsidio_act_cab,cod_subsidio_act,subsidio_pas_cab,cod_subsidio_pas,cod_voc_prod,cod_comp_familiar,cod_tipo_fam,cod_suideales,observaciones,mujer_homb,embarazada_cab,prenatal_cab,lactando_cab,crec_desa_cab)values
  6.    ('".$_POST["cod_admin"]."',NOW(),NOW(),'".$_POST["nombres_cab"]."','".$_POST["apellidos_cab"]."','".$_POST["edad_cab"]."','".$_POST["cod_doc"]."','".$_POST["numdoc_cab"]."','".$_POST["cod_dep"]."','".$_POST["cod_muni"]."','".$_POST["direccion"]."','".$_POST["cod_zona_viv"]."','".$_POST["cod_barrio_veredas_viv"]."','".$_POST["sipod_cab"]."','".$_POST["ruv_cab"]."','".$_POST["cod_civil"]."','".$_POST["cod_raza"]."','".$_POST["fecha_nac_cab"]."','".$_POST["dpto_nac_cab"]."','".$_POST["muni_nac_cab"]."',$insertar,'".$_POST["fecha_exp_cab"]."','".$_POST["cod_factor_armado_exp"]."','".$_POST["dep_expulsion"]."','".$_POST["muni_expulsion"]."','".$_POST["cod_tiempo_ant_exp"]."','".$_POST["cod_tiempo_muni_recep"]."','".$_POST["cod_zona_exp"]."','".$_POST["cod_barrios_veredas_exp"]."','".$_POST["dep_recep"]."','".$_POST["muni_recep"]."','".$_POST["cod_zona_recep"]."','".$_POST["cod_barrios_veredas_recep"]."','".$_POST["telefono_cab"]."','".$_POST["cod_person_cargo"]."','".$_POST["cod_factores_muni"]."','".$_POST["cod_ing_mens"]."','".$_POST["cod_otra_fuente_ing"]."','".$_POST["cod_tipo_viv"]."','".$_POST["acueducto"]."','".$_POST["alcantarillado"]."','".$_POST["gas_natural"]."','".$_POST["parabolica"]."','".$_POST["internet"]."','".$_POST["cod_genero_cab"]."','".$_POST["cod_prog_muj_cab"]."','".$_POST["cod_grupo_poblacional"]."','".$_POST["estudia_act_cab"]."','".$_POST["cod_program_est"]."','".$_POST["cod_ins"]."','".$_POST["cod_anio_aprob"]."','".$_POST["adulto_may_cab"]."','".$_POST["cod_prog_adulto"]."','".$_POST["capacitaciones_cab"]."','".$_POST["cod_capacitacion"]."','".$_POST["cod_ent_cap"]."','".$_POST["cod_recibir_cap"]."','".$_POST["trabaja_act_cab"]."','".$_POST["cod_trabajo"]."','".$_POST["cod_oficios"]."','".$_POST["negocio"]."','".$_POST["cod_tipo_negocio"]."','".$_POST["exito_negocio"]."','".$_POST["cod_duracion_neg"]."','".$_POST["discapacidad_cab"]."','".$_POST["cod_tip_disc"]."','".$_POST["posee_seg_soc_cab"]."','".$_POST["cod_seg_social"]."','".$_POST["cod_eps"]."','".$_POST["cod_calif_serv"]."','".$_POST["viv_propia"]."','".$_POST["parcela"]."','".$_POST["lote"]."','".$_POST["cod_seguridad_muni"]."','".$_POST["subsidio_act_cab"]."','".$_POST["cod_subsidio_act"]."','".$_POST["subsidio_pas_cab"]."','".$_POST["cod_subsidio_pas"]."','".$_POST["cod_voc_prod"]."','".$_POST["cod_comp_familiar"]."','".$_POST["cod_tipo_fam"]."','".$_POST["cod_suideales"]."','".$_POST["observaciones"]."','".$_POST["mujer_homb"]."','".$_POST["embarazada_cab"]."','".$_POST["prenatal_cab"]."','".$_POST["lactando_cab"]."','".$_POST["crec_desa_cab"]."')";    
  7.     if ($result=mysql_query ($sql,$link)){echo '<script language= "Javascript"> alert("Registro guardado correctamente");</script>';}
  8.     else{echo 'error:'.mysql_error($link);}
  9.     }
  10.   //}
  11. echo "<pre>";
  12. var_dump($_POST['cod_vict']);
  13. echo "</pre>";  
  14.   echo "$insertar";
  15. ?>

Imprimo las variables que me pediste y mira lo que sale:

Código HTML:
Ver original
  1. error:Column count doesn't match value count at row 1
  2. array(4) {
  3.   [0]=>
  4.   string(2) "10"
  5.   [1]=>
  6.   string(2) "11"
  7.   [2]=>
  8.   string(2) "12"
  9.   [3]=>
  10.   string(2) "13"
  11. }
  12. ('10'), ('11'), ('12'), ('13')
  #12 (permalink)  
Antiguo 23/02/2014, 17:04
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Imagen del check dinamico

http://www.subirimagenes.net/i/14022412083347925.png
  #13 (permalink)  
Antiguo 23/02/2014, 18:35
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

¿Deseas ingresar los valores de los checkbox seleccionados en el mismo registro que todos esos datos?, es decir, ¿algo como esto? (ejemplo):

Código MySQL:
Ver original
  1. INSERT INTO tabla
  2.     (campo1, campo2, campo3, campo4, campo5)
  3.     (dato1, dato2, dato3, dato4, valoresCheckbox)

De ser así, lo que te propuse cambiaría un poco. Como ya tienes fijos los otros datos a insertar, solamente te quedaría convertir los datos del array de checkboxes en una cadena con comas entre cada dato.

Código PHP:
Ver original
  1. $checkboxes = "'" . implode("','", $_POST['cod_vict']) . "'";

Y al final, añades los valores:

Código PHP:
Ver original
  1. $sql = "INSERT INTO cabeza_fam
  2.          (cod_admin, fecha_cab, hora_cab, nombres_cab, apellidos_cab,
  3.           edad_cab, cod_doc, numdoc_cab, cod_dep, cod_muni,
  4.           direccion, cod_zona_viv, cod_barrio_veredas_viv, sipod_cab, ruv_cab,
  5.           cod_civil, cod_raza, fecha_nac_cab, dpto_nac_cab, muni_nac_cab,        
  6.           cod_vict, fecha_exp_cab, cod_factor_armado_exp, dep_expulsion, muni_expulsion,
  7.           cod_tiempo_ant_exp, cod_tiempo_muni_recep, cod_zona_exp, cod_barrios_veredas_exp, dep_recep,
  8.           muni_recep, cod_zona_recep, cod_barrios_veredas_recep, telefono_cab, cod_person_cargo,
  9.           cod_factores_muni, cod_ing_mens, cod_otra_fuente_ing, cod_tipo_viv, acueducto,
  10.           alcantarillado, gas_natural, parabolica, internet, cod_genero_cab,
  11.           cod_prog_muj_cab, cod_grupo_poblacional, estudia_act_cab, cod_program_est, cod_ins,
  12.           cod_anio_aprob, adulto_may_cab, cod_prog_adulto, capacitaciones_cab, cod_capacitacion,
  13.           cod_ent_cap, cod_recibir_cap, trabaja_act_cab, cod_trabajo, cod_oficios,
  14.           negocio, cod_tipo_negocio, exito_negocio, cod_duracion_neg, discapacidad_cab,
  15.           cod_tip_disc, posee_seg_soc_cab, cod_seg_social, cod_eps, cod_calif_serv,
  16.           viv_propia, parcela, lote, cod_seguridad_muni, subsidio_act_cab,
  17.           cod_subsidio_act, subsidio_pas_cab, cod_subsidio_pas, cod_voc_prod, cod_comp_familiar,
  18.           cod_tipo_fam, cod_suideales, observaciones, mujer_homb, embarazada_cab,
  19.           prenatal_cab, lactando_cab, crec_desa_cab)
  20.        VALUES
  21.          ($_POST['cod_admin'], NOW(), NOW(), $_POST['nombres_cab'], $_POST['apellidos_cab'],
  22.           $_POST['edad_cab'], $_POST['cod_doc'], $_POST['numdoc_cab'], $_POST['cod_dep'], $_POST['cod_muni'],
  23.           $_POST['direccion'], $_POST['cod_zona_viv'], $_POST['cod_barrio_veredas_viv'], $_POST['sipod_cab'], $_POST['ruv_cab'],
  24.           $_POST['cod_civil'], $_POST['cod_raza'], $_POST['fecha_nac_cab'], $_POST['dpto_nac_cab'], $_POST['muni_nac_cab'],
  25.           $checkboxes, $_POST['fecha_exp_cab'], $_POST['cod_factor_armado_exp'], $_POST['dep_expulsion'], $_POST['muni_expulsion'],
  26.           $_POST['cod_tiempo_ant_exp'], $_POST['cod_tiempo_muni_recep'], $_POST['cod_zona_exp'], $_POST['cod_barrios_veredas_exp'], $_POST['dep_recep'],
  27.           $_POST['muni_recep'], $_POST['cod_zona_recep'], $_POST['cod_barrios_veredas_recep'], $_POST['telefono_cab'], $_POST['cod_person_cargo'],
  28.           $_POST['cod_factores_muni'], $_POST['cod_ing_mens'], $_POST['cod_otra_fuente_ing'], $_POST['cod_tipo_viv'], $_POST['acueducto'],
  29.           $_POST['alcantarillado'], $_POST['gas_natural'], $_POST['parabolica'], $_POST['internet'], $_POST['cod_genero_cab'],
  30.           $_POST['cod_prog_muj_cab'], $_POST['cod_grupo_poblacional'], $_POST['estudia_act_cab'], $_POST['cod_program_est'], $_POST['cod_ins'],
  31.           $_POST['cod_anio_aprob'], $_POST['adulto_may_cab'], $_POST['cod_prog_adulto'], $_POST['capacitaciones_cab'], $_POST['cod_capacitacion'],
  32.           $_POST['cod_ent_cap'], $_POST['cod_recibir_cap'], $_POST['trabaja_act_cab'], $_POST['cod_trabajo'], $_POST['cod_oficios'],
  33.           $_POST['negocio'], $_POST['cod_tipo_negocio'], $_POST['exito_negocio'], $_POST['cod_duracion_neg'], $_POST['discapacidad_cab'],
  34.           $_POST['cod_tip_disc'], $_POST['posee_seg_soc_cab'], $_POST['cod_seg_social'], $_POST['cod_eps'], $_POST['cod_calif_serv'],
  35.           $_POST['viv_propia'], $_POST['parcela'], $_POST['lote'], $_POST['cod_seguridad_muni'], $_POST['subsidio_act_cab'],
  36.           $_POST['cod_subsidio_act'], $_POST['subsidio_pas_cab'], $_POST['cod_subsidio_pas'], $_POST['cod_voc_prod'], $_POST['cod_comp_familiar'],
  37.           $_POST['cod_tipo_fam'], $_POST['cod_suideales'], $_POST['observaciones'], $_POST['mujer_homb'], $_POST['embarazada_cab'],
  38.           $_POST['prenatal_cab'], $_POST['lactando_cab'], $_POST['crec_desa_cab'])";

Dado a que ingresarás todos los valores de los checkbox seleccionados en un mismo registro, sería conveniente que el tipo del campo cod_vict sea VARCHAR ya que será necesario ingresar el dato como cadena.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #14 (permalink)  
Antiguo 23/02/2014, 20:01
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Hola Alexis88, si tienes razon pero a lo que me refiero es que el registro ya no quiere insertar debido a que el nombre y la forma del campo de los checkbox no coincide con el nombre ni la forma al momento de enviar los datos.

Por ejemplo:
En el formulario los checkbox estan declarados como variable de arreglo

Código PHP:
Ver original
  1. name='cod_vict[]'
pero cuando voy a enviar el dato se esta enviando como cualquier variable osea $checkboxes

Yo he insertado arreglos en varios registros a la vez donde se recorre el arreglo con un ciclo y se inserta la variable como array. Por ejemplo:

Código PHP:
Ver original
  1. <?
  2.   include ("conex.php");
  3.     if($_POST["enviar"])
  4.     {
  5.        
  6.         $mvalor=array();
  7.         $mvalor['cod_licencia']=$_POST['cod_licencia'];
  8.         $mvalor['fecha_conci']=$_POST['fecha_conci'];
  9.         $mvalor['anio']=$_POST['anio'];
  10.         $mvalor['mes']=$_POST['mes'];
  11.         $mvalor['dia']=$_POST['dia'];
  12.         $mvalor['numero_consignacion']=$_POST['numero_consignacion'];
  13.         $mvalor['valor']=$_POST['valor'];
  14.        
  15.    for($i=0; $i<count($mvalor); $i++){     
  16.    $sql="insert into conciliacion(cod_licencia,fecha_conci,anio,mes,dia,numero_consignacion,valor)values
  17.   ('".$_POST["cod_licencia"][$i]."',NOW(),'".$_POST["anio"][$i]."','".$_POST["mes"][$i]."','".$_POST["dia"][$i]."','".$_POST["numero_consignacion"][$i]."','".$_POST["valor"][$i]."')";    
  18.     if ($result=mysql_query ($sql,$link)){
  19.           echo '<script language= "Javascript">
  20.          alert("Registro Insertado");
  21.          </script>';
  22.        }
  23.     }
  24. }
  25. ?>

Pero ahi es por que se puede insertar varios registros a la vez en todos los campos.
Pero en este caso solo debo insertar un registro de ese usuario pero que tenga la opcion de elejir varios items en dicho campo.

Pienso que faltaria recorrer el arreglo para poder insertarlo asi:

Código PHP:
Ver original
  1. $checkboxes[¿?]

Los signos de pregunta es por que no sabria que colocar alli.
  #15 (permalink)  
Antiguo 23/02/2014, 20:56
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

No es necesario, de la forma en que te expliqué tiene que funcionar. Anteriormente me dijiste que el array que llega contiene estos datos:

Código HTML:
Ver original
  1. array(4) {
  2.   [0]=>
  3.   string(2) "10"
  4.   [1]=>
  5.   string(2) "11"
  6.   [2]=>
  7.   string(2) "12"
  8.   [3]=>
  9.   string(2) "13"
  10. }

Ahora bien, haciendo un pequeño ajuste a lo que te indiqué en mi última respuesta:

Código PHP:
Ver original
  1. $checkboxes = "'" . implode(',', $_POST['cod_vict']) . "'";

Deberías obtener lo siguiente:

Código HTML:
Ver original
  1. '10,11,12,13'

Ahora sí podrás guardar los datos seleccionados en el mismo campo de la tabla. Ojo, el que el nombre de los checkbox sea cod_vict[], no quiere decir que no puedas recibirlo como $_POST['cod_vict'].

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #16 (permalink)  
Antiguo 23/02/2014, 21:38
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Si tienes razon el nombre no es reelevante aqui lo comprobe pero mira esto:

Cuando slecciona un solo check de la lista si me guarda el registro y oviamente el codigo del check seleccionado por el usuario.

Pero cuando selecciono dos o mas checks de la lista no me inserta el registro y me sale el siguiente error.

Código HTML:
Ver original
  1. error:Column count doesn't match value count at row 1

Segun entiendo quiere decir que el número de columnas no corresponde al número en la fila osea, sospecho que debo insertar la variable $checkboxes en forma de arreglo pero no se como ¿? por que si seleccionando un solo elemento del check funciona perfectamente y seleccionando dos o mas me sale este error. es lo que me pone a pensar.
  #17 (permalink)  
Antiguo 23/02/2014, 22:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

No, eso quiere decir que la cantidad de valores que deseas insertar, no corresponde con la cantidad de campos que indicas. Quizá como son tantos, se te debe haber pasado eso.

Revisa con calma el código y verifica que la cantidad de datos a insertar sea la misma que la de los campos. Ojo, si vas a insertar datos en todos los campos de la tabla, no es necesario que los especifiques.

Código MySQL:
Ver original
  1. INSERT INTO tabla VALUES (valor1, valor2, ...)

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #18 (permalink)  
Antiguo 24/02/2014, 09:50
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

HOla alexis ya revise el codigo y todo esta bien con respecto a la cantidad de campos.
El problema es que cuando selecciono mas de un check en el arreglo de la imagen que esta arriba no me inserta y me sale este error
Código HTML:
Ver original
  1. error:Column count doesn't match value count at row 1
pero cuando selecciono un solo check me inserta correctamente, hasta me inserta el valor de larreglo pero solo un codigo pues oviamente por que solo seleccioné uno.

Mi pregunta es, cuando guardo $checkboxes el cual contiene el arreglo convertido a string por que no me deja guardar cuando selecciono mas de un valor en el campo
Código HTML:
Ver original
  1. <input type='checkbox' name='cod_vict' value='$row->cod_vict'> $row->dtalle_vict

?
  #19 (permalink)  
Antiguo 24/02/2014, 11:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

¿Implementaste el último cambio que te sugerí?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #20 (permalink)  
Antiguo 24/02/2014, 12:10
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Insertar arreglo en mysql con PHP

Si gracias ya me funciona gracias muchas gracias, Disculpa por tanta molestia solo queria pedirte un ultimo favor, como ya tengo en el campo por ejemplo 16,17,18,20 necesito imprimirlo o sacarlo dela base de datos para que el usuario lea el codigo con su respectiva descripción, ahora como hago para extraerlo de la base de datos de modo que quede separado mas o menos asi:

Código HTML:
Ver original
  1. 16 Actos terroristas
  2. 17 Delitos contra la libertad
  3. 18 Minas antipersonales
  4. 20 Violencia de genero
Me dicen que es con unserialize pero mas o menos me podrías guiar. Gracias
  #21 (permalink)  
Antiguo 24/02/2014, 13:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Insertar arreglo en mysql con PHP

Si lo primero que harás será extraer los datos de la BD y luego mostrarlos, no será necesario deserializarlos pues no se trata de un array sino de una cadena. No sé de dónde vendrán los datos de la columna de la derecha, pero los números los puedes listar así:

Código PHP:
Ver original
  1. //Asumiendo que $checkboxes contiene a los valores '16,17,18,20'
  2.  
  3. echo str_replace(',', '<br />', $checkboxes);

Eso imprimirá lo siguiente:

Código HTML:
Ver original
  1. 16
  2. 17
  3. 18
  4. 20

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 24/02/2014 a las 18:59

Etiquetas: arreglo, formulario, mysql, registro, select, sql, 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 06:38.