Foros del Web » Programando para Internet » PHP »

Guardar varios array de un form en mysql

Estas en el tema de Guardar varios array de un form en mysql en el foro de PHP en Foros del Web. Hola amigos: Tengo un formulario que paso por get y contiene varios array. Todo lo pasa muy bien y para guardarlo en mysql tengo dos ...

  #1 (permalink)  
Antiguo 20/01/2012, 08:59
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Pregunta Guardar varios array de un form en mysql

Hola amigos:

Tengo un formulario que paso por get y contiene varios array. Todo lo pasa muy bien y para guardarlo en mysql tengo dos tablas relacionadas. La tabla nomina que me crea el id_nomina y me guarda la la fecha de carga, fecha desde, fecha hasta y el total. La otra tabla es detalle_nomina que me guarda id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng.

Me imagino que debo usar un for para guardar los array pero no se como hacerlo cuando son varios array. Lei por alli que con el foreach pero no se como aplicarlo porque como vienen los array separados no tengo idea.

Este es mi código php:

Código PHP:
Ver original
  1. $ruta = '..';
  2. include ('../func/func.php');
  3. $conn = db_connect();
  4.   if (!$conn)
  5.    return 0;
  6.  
  7. $fecha_carga = date("Y-m-d:H:i:s");
  8.  
  9. $desde = $_REQUEST['desde'];
  10. $hasta = $_REQUEST['hasta'];
  11. $id_empleado = $_REQUEST['id_empleado'];
  12. $dias = $_REQUEST['dias'];
  13. $sueldo_quinc = $_REQUEST['sueldo_quinc'];
  14. $ivss = $_REQUEST['ivss'];
  15. $paro_for = $_REQUEST['paro_for'];
  16. $lph = $_REQUEST['lph'];
  17. $otros_desc = $_REQUEST['otros_desc'];
  18. $otros_ing = $_REQUEST['otros_ing'];
  19. $total_deducc = $_REQUEST['total_deducc'];
  20. $total_deveng = $_REQUEST['total_deveng'];
  21. $total = $_REQUEST['total'];
  22.  
  23. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
  24. while($result = mysql_fetch_array($rs)) {
  25.     $ci = $result['ci'];
  26.     $pnombre = $result['pnombre'];
  27.     $snombre = $result['snombre'];
  28.     $papellido = $result['papellido'];
  29.     $sapellido = $result['sapellido'];
  30. }
  31.  
  32. $sql_ins = "INSERT INTO nomina (fecha_carga, desde, hasta, total) " .
  33. "VALUES ('$fecha_carga','$desde', '$hasta', '$total')";
  34. $res = mysql_query($sql_ins) or die ( "Error MySQL dice: " . mysql_error() );
  35.  
  36. $rs2 = mysql_query("SELECT * FROM nomina WHERE fecha_carga='$fecha_carga'");
  37. while($result = mysql_fetch_array($rs2)) {
  38.     $id_nomina = $result['id_nomina'];
  39.  
  40. $sql_ins2 = "INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) " .
  41. "VALUES ('$id_nomina', '$id_empleado', '$dias', '$sueldo_quinc', '$ivss', '$paro_for', '$lph', '$otros_desc', '$otros_ing', '$total_deducc', '$total_deveng')";
  42. $res2 = mysql_query($sql_ins2) or die ( "Error MySQL dice: " . mysql_error() );
  43.  
  44. }

Les agradezco su ayuda.
__________________
Caminando con el corazón partío
  #2 (permalink)  
Antiguo 20/01/2012, 09:04
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 10 meses
Puntos: 394
Respuesta: Guardar varios array de un form en mysql

No veo arreglos por ningún lado...!
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 20/01/2012, 09:05
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Los arreglos vienen de aqui:

Código HTML:
Ver original
  1. <form action="nomina_reg.php" method="get" name="form1" onfocus="validar();" >
  2.       <table width="750" border="0" class="tabla2">
  3.         <tr>
  4.           <td colspan="5" class="td2" bgcolor="#95bce2">UNIDAD EDUCATIVA EL MILAGRO DE LA PERLA</td>
  5.           </tr>
  6.         <tr>
  7.           <td colspan="5">NOMINA PARA EL PAGO DE SUELDOS EMPLEADOS</td>
  8.           </tr>
  9.       <tr>
  10.       <td width="26%">
  11.       <div class="demo">
  12.       <p>Fecha Desde: <input type="text" id="datepicker_1" name="desde" class="fechador"></p>
  13.       </div>
  14.       </td>
  15.       <td width="26%">
  16.       <div class="demo">
  17.       <p>Fecha Hasta: <input type="text" id="datepicker_2" name="hasta" class="fechador"></p>
  18.       </div>
  19.       </td>
  20.       </tr>
  21.       </table>
  22.       <br />
  23.       <table width="750" border="1"  bordercolor="#95bce2"  class="tabla3">
  24.   <tr bgcolor="#95bce2 ">
  25.     <td width="3%" class="td3"></td>
  26.     <td width="3%" class="td3">CI</td>
  27.     <td width="10%" class="td3">APELLIDOS</td>
  28.     <td width="11%" class="td3">NOMBRES</td>
  29.     <td width="4%" class="td3">DIAS</td>
  30.     <td width="8%" class="td3">SUELDO BÁSICO</td>
  31.     <td width="8%" class="td3">SUELDO DIARIO</td>    
  32.     <td width="8%" class="td3">SUELDO B. QUINCENA</td>
  33.     <td width="8%" class="td3">IVSS</td>
  34.     <td width="8%" class="td3">PARO FORSOZO</td>
  35.     <td width="8%" class="td3">LPH</td>
  36.     <td width="8%" class="td3">OTROS DESCUENT</td>
  37.     <td width="8%" class="td3">OTROS INGRESOS</td>
  38.     <td width="8%" class="td3">TOTAL DEDUCCIONES</td>
  39.     <td width="8%" class="td3">TOTAL DEVENGADO</td>
  40.   </tr>
  41.  
  42.   <?php
  43. $indice = 1;
  44. $indice2 = 1;
  45. $indice3 = 1;
  46. //$indice4 = 1;
  47. $rs = mysql_query("SELECT * FROM empleados ORDER BY id_empleado ASC");
  48. while($result = mysql_fetch_array($rs)) {
  49.    // Realmente no necesitas hacer todas las asignaciones que tienes
  50.    // Sólo estás agregando más código, siempre puedes incluir...
  51.    // ... elementos de array en cadenas usando {$result['indice']}
  52.    $ivss = number_format(($result['sueldo_basico']*4/100),2,'.','');
  53.    $paro_for = number_format(($result['sueldo_basico']*0.5/100),2,'.','');
  54.    $lph = number_format(($result['sueldo_basico']*1/100),2,'.','');
  55.    $sueldo_diario = $result['sueldo_basico']/30;
  56.    // Para facilitar un poco las cosas, habrá que agregar un campo oculto...
  57.    // ...con la id de empleado
  58. ?>
  59.     <tr>
  60.         <td><?php echo $result['id_empleado']; ?><input type="hidden" name="id_empleado[]" value="<?php echo $result['id_empleado']; ?>" /></td>
  61.         <td><?php echo $result['ci']; ?></td>
  62.         <td><?php echo "{$result['papellido']} {$result['sapellido']}"; ?></td>
  63.         <td><?php echo "{$result['pnombre']} {$result['snombre']}"; ?></td>
  64.        
  65.         <td><input name="dias[]" type="text" id="dias<?php echo $indice; ?>" size="2" value="" onBlur="calcula(this.value, '<?php echo $sueldo_diario; ?>', <?php echo $indice; ?>);" /></td>
  66.         <td><label name="sueldo_basico" id="sueldo_basico" size="2" readonly="readonly" value="" ><?php echo $result['sueldo_basico']; ?></label></td>
  67.         <td><input type="text" name="sueldo_diario[]" id="sueldo_diario" size="5" readonly="readonly" value="<?php echo $sueldo_diario; ?>" ></td>
  68.         <td><input name="sueldo_quinc[]" type="text" id="sueldo_quinc<?php echo $indice; ?>" size="5" value="" readonly="readonly" /></td>
  69.  
  70.  
  71.  
  72.         <td><input type="text" name="ivss[]" id="ivss" size="3" readonly="readonly" value="<?php echo $ivss; ?>"  /></td>
  73.         <td><input type="text" name="paro_for[]" id="paro_for" size="3" readonly="readonly" value="<?php echo $paro_for; ?>" ></td>
  74.         <td><input type="text" name="lph[]" id="lph" size="3" readonly="readonly" value="<?php echo $lph; ?>" ></td>
  75.        
  76.        
  77.         <td><input name="otros_desc[]" type="text" id="otros_desc<?php echo $indice2; ?>" size="5" value="" onBlur="deducciones(this.value, '<?php echo $ivss; ?>', '<?php echo $paro_for; ?>', '<?php echo $lph; ?>', <?php echo $indice2; ?>);" /></td>
  78.         <td><input name="otros_ing[]" type="text" id="otros_ing<?php echo $indice3; ?>" size="5" value="" onChange="total_dev(this.value, sq, dd, <?php echo $indice3; ?>);" /></td>
  79.  
  80.         <td><input name="total_deducc[]" type="text" id="total_deducc<?php echo $indice2; ?>" size="5" value="" readonly="readonly" /></td>
  81.        <td><input name="total_deveng[]" type="text" id="total_deveng<?php echo $indice3; ?>" size="5" value="" readonly="readonly"  /></td>
  82.     </tr>
  83. <?php
  84.    $indice ++;
  85.     $indice2 ++;
  86.     $indice3 ++;
  87.     //$indice4 ++;
  88. } // fin de while
  89. ?>  <tr>
  90.       <td>&nbsp;</td>
  91.  
  92.     <td>&nbsp;</td>
  93.     <td>&nbsp;</td>
  94.     <td>&nbsp;</td>
  95.     <td>&nbsp;</td>
  96.     <td>&nbsp;</td>
  97.     <td>&nbsp;</td>
  98.     <td>&nbsp;</td>
  99.     <td>&nbsp;</td>
  100.     <td>&nbsp;</td>
  101.     <td>&nbsp;</td>
  102.     <td>&nbsp;</td>
  103.     <td>&nbsp;</td>
  104.     <td class="td3">TOTAL</td>
  105.     <td><input type="text" id="total" name="total"  size="5" value="" readonly="readonly" onMouseOver="javascript:totalizar();" /></td>
  106.   </tr>
  107.   <tr>
  108.  <!-- <A href="javascript:totalizar()">Ver valores</A>-->
  109.     <th colspan="2"><input type="submit" name="button" id="button" value="Guardar" />
  110.     </th>
  111.   </tr>
  112. </form>
__________________
Caminando con el corazón partío
  #4 (permalink)  
Antiguo 20/01/2012, 10:55
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Guardar varios array de un form en mysql

Hola Kimmy no veo donde recorres tus array para realizar el insert , te dejo algo que te deberia servir, se puede simplificar aun mas pero no conozco la estructura de tu bd lo que te puedo recomendar es tu insert en nomina y el posterior select que realizas , creo que no esta muy bien, ojala te sirva :

Código PHP:
Ver original
  1. <?php
  2. $ruta = '..';
  3. include ('../func/func.php');
  4. $conn = db_connect();
  5. if (!$conn)
  6. return 0;
  7. extract($_REQUEST);
  8. $fecha_carga = date("Y-m-d:H:i:s");
  9. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'") or die ("Error Select : ".mysql_error());
  10. while($result = mysql_fetch_array($rs))
  11. {
  12.     $ci = $result['ci'];
  13.     $pnombre = $result['pnombre'];
  14.     $snombre = $result['snombre'];
  15.     $papellido = $result['papellido'];
  16.     $sapellido = $result['sapellido'];
  17. }
  18. for ($i=0;$i<=count($desde);$i++)
  19. {
  20.     $sql_ins = mysql_query("INSERT INTO nomina (fecha_carga, desde, hasta, total) VALUES ('$fecha_carga','$desde[$i]', '$hasta[$i]', '$total[$i]')") or die ("Error en Insert : ".mysql_error());
  21.     $rs2 = mysql_query("SELECT id_nomina FROM nomina WHERE fecha_carga='$fecha_carga'");
  22.     //Esta parte no  la veo de una buena manera :-/
  23.     while($result = mysql_fetch_array($rs2))
  24.     {
  25.         $id_nomina = $result['id_nomina'];
  26.         $sql_ins2 = mysql_query("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('$id_nomina', '$id_empleado', '$dias[$i]', '$sueldo_quinc[$i]', '$ivss[$i]', '$paro_for[$i]', '$lph[$i]', '$otros_desc[$i]', '$otros_ing[$i]', '$total_deducc[$i]', '$total_deveng[$i]')") or die ( "Error MySQL dice: " . mysql_error() );
  27.     }
  28. }
  29. ?>

Saludos.
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #5 (permalink)  
Antiguo 20/01/2012, 11:22
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Gracias bUllan9ebrio. Cada array se guarda en las variables del Request y en esta parte:

Código PHP:
Ver original
  1. while($result = mysql_fetch_array($rs2))
  2.     {
  3.         $id_nomina = $result['id_nomina'];
  4.     }

Rescato el id_nomina para la otra tabla ya que el mismo se genera en autonumerico.

Según tus sugerencias lo hice asi:

Código PHP:
Ver original
  1. $ruta = '..';
  2. include ('../func/func.php');
  3. $conn = db_connect();
  4.   if (!$conn)
  5.    return 0;
  6.  
  7. $fecha_carga = date("Y-m-d:H:i:s");
  8.  
  9. extract($_REQUEST);
  10.  
  11. //var_dump($ci);
  12.  
  13. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
  14. while($result = mysql_fetch_array($rs)) {
  15.     $ci = $result['ci'];
  16.     $pnombre = $result['pnombre'];
  17.     $snombre = $result['snombre'];
  18.     $papellido = $result['papellido'];
  19.     $sapellido = $result['sapellido'];
  20. }
  21.  
  22. $sql_ins = mysql_query("INSERT INTO nomina (fecha_carga, desde, hasta, total) VALUES ('$fecha_carga','$desde', '$hasta', '$total')") or die ("Error en Insert : ".mysql_error());
  23.  
  24.     $rs2 = mysql_query("SELECT id_nomina FROM nomina WHERE fecha_carga='$fecha_carga'");
  25.     //Esta parte no  la veo de una buena manera :-/
  26.     while($result = mysql_fetch_array($rs2))
  27.     {
  28.         $id_nomina = $result['id_nomina'];
  29.     }
  30.  
  31. for ($i=0;$i<=3;$i++)
  32. {
  33.         $sql_ins2 = mysql_query("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('$id_nomina', '$id_empleado[$i]', '$dias[$i]', '$sueldo_quinc[$i]', '$ivss[$i]', '$paro_for[$i]', '$lph[$i]', '$otros_desc[$i]', '$otros_ing[$i]', '$total_deducc[$i]', '$total_deveng[$i]')") or die ( "Error MySQL dice: " . mysql_error() );
  34.     }
  35.  

pero me guarda solo los datos de una sola fila y no de la segunda y tercera.

además me da este error:

Error MySQL dice: Duplicate entry '4' for key 1
__________________
Caminando con el corazón partío

Última edición por kimmy; 20/01/2012 a las 13:14
  #6 (permalink)  
Antiguo 20/01/2012, 13:15
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Ahora si guardó porque el problema era que la tabla detalle_nomina tenia clave primaria y no debe tenerla.

Ahora el problema que tengo es que no se como poner la condicion que evalua el final del array en el ciclo for. Yo le puse un 3 para probarlo, pero el punto es que no se cual es el numero.

Código PHP:
Ver original
  1. for ($i=0;$i<=(aqui no se como ponerlo);$i++)
  2. {
  3. $sql_ins2 = mysql_query("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('$id_nomina', '$id_empleado[$i]', '$dias[$i]', '$sueldo_quinc[$i]', '$ivss[$i]', '$paro_for[$i]', '$lph[$i]', '$otros_desc[$i]', '$otros_ing[$i]', '$total_deducc[$i]', '$total_deveng[$i]')") or die ( "Error MySQL dice: " . mysql_error() );
  4.     }
__________________
Caminando con el corazón partío
  #7 (permalink)  
Antiguo 20/01/2012, 13:38
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 6 meses
Puntos: 91
Respuesta: Guardar varios array de un form en mysql

Cita:
Iniciado por kimmy Ver Mensaje
Ahora si guardó porque el problema era que la tabla detalle_nomina tenia clave primaria y no debe tenerla.
Perdón que sea tan expresivo pero



Por otra parte, no se los demás pero yo desaconsejo el uso de $_REQUEST para procesar en PHP en cambio lo haría por el método que lo envié desde el formulario, usando $_GET o $_POST

Espero sea de tu agrado la información :)

saludos
  #8 (permalink)  
Antiguo 20/01/2012, 14:02
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Ribon muchas gracias por responder.

Respecto a lo de la clave primaria quizás no es la solución adecuada pero fue la que funcionó.

Segundo lo del REQUEST no importa porque es una aplicación de escritorio (nunca estará en internet)

Tercero "Esas no eran las respuestas porque la pregunta era otra". La pregunta es que pongo en la condicion del for.

No hay que burlarse de los que saben menos. Solo intento que me ayuden.
__________________
Caminando con el corazón partío
  #9 (permalink)  
Antiguo 20/01/2012, 17:20
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Logré que me agregue los datos en 2 filas de la tabla, pero no lo hace con los siguientes. Asi lo coloqué:

Código PHP:
Ver original
  1. $ruta = '..';
  2. include ('../func/func.php');
  3. $conn = db_connect();
  4.   if (!$conn)
  5.    return 0;
  6.  
  7. $fecha_carga = date("Y-m-d:H:i:s");
  8. $vector = extract($_POST);
  9. $tamano = count($vector);
  10.  
  11. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
  12. while($result = mysql_fetch_array($rs)) {
  13.     $ci = $result['ci'];
  14.     $pnombre = $result['pnombre'];
  15.     $snombre = $result['snombre'];
  16.     $papellido = $result['papellido'];
  17.     $sapellido = $result['sapellido'];
  18. }
  19.  
  20. $sql_ins = mysql_query("INSERT INTO nomina (fecha_carga, desde, hasta, total) VALUES ('$fecha_carga','$desde', '$hasta', '$total')") or die ("Error en Insert : ".mysql_error());
  21.  
  22.     $rs2 = mysql_query("SELECT id_nomina FROM nomina WHERE fecha_carga='$fecha_carga'");
  23.    
  24.     while($result = mysql_fetch_array($rs2))
  25.     {
  26.         $id_nomina = $result['id_nomina'];
  27.     }
  28.  
  29. for ($i=0;$i<= $tamano;$i++)
  30. {
  31.     $sql_ins2 = mysql_query("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('$id_nomina', '$id_empleado[$i]', '$dias[$i]', '$sueldo_quinc[$i]', '$ivss[$i]', '$paro_for[$i]', '$lph[$i]', '$otros_desc[$i]', '$otros_ing[$i]', '$total_deducc[$i]', '$total_deveng[$i]')") or die ( "Error MySQL dice: " . mysql_error() );
  32.     }
  33.  

Por favor de verdad necesito ayuda porque no se que estoy haciendo mal

Gracias...
__________________
Caminando con el corazón partío
  #10 (permalink)  
Antiguo 20/01/2012, 18:23
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

No tengo suerte para que me ayuden un poco. Será que no se formular la pregunta. La pregunta es:

Cómo puedo conocer la longitud de los array que trajo la función extract para poder pasarselo al for??????

Gracias
__________________
Caminando con el corazón partío
  #11 (permalink)  
Antiguo 20/01/2012, 18:37
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 6 meses
Puntos: 31
Respuesta: Guardar varios array de un form en mysql

Hola, yo no soy muy bueno para revisar mucho código de otro me hago bola
pero al ver tu código html tengo una idea de lo que haces
pero aquí te dejo un pequeño ejemplo para hacerlo con foreach
y sprintf aqui : http://us.php.net/manual/en/function.sprintf.php puedes leer mas de sprintf

html:

Código HTML:
<form action="" method="post">
<input name="campo[1]" />
<input name="campo[2]" />
<input name="campo[3]" />
<input name="" type="submit" value="Submit">
</form> 

php:

Código PHP:

<?php
foreach($_REQUEST as $get){
$query  sprintf("INSERT INTO MyTabla (`campo1`,`campo2`,`campo3`) VALUES ('%s','%s', '%s')",$get[1], $get[2], $get[3]);
/*
 o usar: 
 mysql_real_escape_string($get[1]), etc,etc, y al final asi: mysql_real_escape_string($get[3]));

*/
echo $query//= a-->  INSERT INTO MyTabla (`campo1`,`campo2`,`campo3`) VALUES ('uno','dos', 'tres') 
}
$result mysql_query($query); 

?>
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #12 (permalink)  
Antiguo 20/01/2012, 18:43
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

thezzin, gracias por tu respuesta pero no entiendo muy bien como aplicarlo a mi caso porque mis array no tienen indices como en tu ejemplo.
__________________
Caminando con el corazón partío
  #13 (permalink)  
Antiguo 20/01/2012, 18:59
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 6 meses
Puntos: 31
Respuesta: Guardar varios array de un form en mysql

bien. voy a revisar tu código php mas detenido para ver como lo estas haciendo y a ver si te hecho una ayuda
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #14 (permalink)  
Antiguo 20/01/2012, 19:03
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Te lo agradezco muchisimo!!!
__________________
Caminando con el corazón partío
  #15 (permalink)  
Antiguo 20/01/2012, 19:48
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar varios array de un form en mysql

Cita:
Cómo puedo conocer la longitud de los array que trajo la función extract para poder pasarselo al for??????
Muy sencillo con "count"

Código PHP:
Ver original
  1. $array = array(1,2,3,4,5,6,7,8,9,0);
  2. echo 'el array contiene '.count($array);
  3. echo 'contenido';
  4. foreach($array as $item) {
  5. echo $item;
  6. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #16 (permalink)  
Antiguo 20/01/2012, 19:54
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Gracias Nemutagk, pero ya use el count aqui:

Código PHP:
Ver original
  1. $vector = extract($_POST);
  2. $tamano = count($vector);

y lo uso en el for asi:

Código PHP:
Ver original
  1. for ($i=0;$i<= $tamano;$i++)
  2. {
  3.     $sql_ins2 = mysql_query("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('$id_nomina', '$id_empleado[$i]', '$dias[$i]', '$sueldo_quinc[$i]', '$ivss[$i]', '$paro_for[$i]', '$lph[$i]', '$otros_desc[$i]', '$otros_ing[$i]', '$total_deducc[$i]', '$total_deveng[$i]')") or die ( "Error MySQL dice: " . mysql_error() );
  4.     }

pero solo me inserta dos filas.

Será que no se puede aplicar con la función extract???
__________________
Caminando con el corazón partío
  #17 (permalink)  
Antiguo 20/01/2012, 20:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 6 meses
Puntos: 31
Respuesta: Guardar varios array de un form en mysql

andaba por ahí y casi se me olvida

inténtalo con es ejemplo
html;
Código HTML:
<form action="" method="post">
<input name="ivss[]" />
<input name="paro_for[]" />
<input name="lph[]" />
<input name="" type="submit" value="Submit">
</form> 
php:

Código PHP:

<?php
$vector 
extract($_POST);
for(
$i=0;$i<count($vector);$i++){
echo 
$ivss[$i],'  ',$paro_for[$i],'  ',$lph[$i];
}
?>
tu lo adaptas a tu code-php
me imagino que ahí es donde tienes el problea

-
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #18 (permalink)  
Antiguo 20/01/2012, 20:37
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

thezzin, muchas gracias. Aunque ya habia probado de la manera como me indicas, volvi a probar pero solo me guarda una fila y deberia guardar 3.

probé con un echo count($vector) para saber la longitud del vector y me dice que 1 y deberia ser 3 pues tiene que pasar 4 veces (del 0 al 3).

Pienso que todo el problema está en que no está contando bien el tamaño del array pero no se porque????
__________________
Caminando con el corazón partío
  #19 (permalink)  
Antiguo 20/01/2012, 21:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 6 meses
Puntos: 31
Respuesta: Guardar varios array de un form en mysql

me imagino que este es el código que estas usando
si ese es ejecútalo así y verifica si aparecen el contenido de los tres campos que quieres insertar
Código PHP:
ssession_start();
$ruta '..'
include (
'../func/func.php'); 
$conn db_connect();
  if (!
$conn)
   return 
0;
 
$fecha_carga date("Y-m-d:H:i:s");
$vector extract($_POST);
 
$rs mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
while(
$result mysql_fetch_array($rs)) {
    
$ci $result['ci'];
    
$pnombre $result['pnombre'];
    
$snombre $result['snombre'];
    
$papellido $result['papellido'];
    
$sapellido $result['sapellido'];
}
 
$sql_ins mysql_query("INSERT INTO nomina (fecha_carga, desde, hasta, total) VALUES ('$fecha_carga','$desde', '$hasta', '$total')") or die ("Error en Insert : ".mysql_error());
 
    
$rs2 mysql_query("SELECT id_nomina FROM nomina WHERE fecha_carga='$fecha_carga'");
    
    while(
$result mysql_fetch_array($rs2))
    {
        
$id_nomina $result['id_nomina'];
    }
 
for(
$i=0;$i<count($vector);$i++){
$sql_ins2 sprintf("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",$id_nomina$id_empleado[$i], $dias[$i], $sueldo_quinc[$i], $ivss[$i], $paro_for[$i], $lph[$i], $otros_desc[$i], $otros_ing[$i], $total_deducc[$i], $total_deveng[$i]);
echo 
$sql_ins2;
}
//mysql_query($sql_ins2); 
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #20 (permalink)  
Antiguo 20/01/2012, 21:48
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Colocandolo asi me imprime 1 y me guarda 1 fila en la BD. Si le agrego <= en el for, igual me imprime 1 pero me guarda 2 filas en la BD.
__________________
Caminando con el corazón partío
  #21 (permalink)  
Antiguo 20/01/2012, 21:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 6 meses
Puntos: 31
Respuesta: Guardar varios array de un form en mysql

tengo saturado my cerebro y no veo el porque.
ami con el html que puse arriba me da este resultado:

Código HTML:
Ver original
  1. INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('','','','','Valor_1','Valor_2','Valor_3','','','','')

y esto

Código PHP:
$vector extract($_POST);
for(
$i=0;$i<count($vector);$i++){
$sql_ins2 sprintf("INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",$id_nomina$id_empleado[$i], $dias[$i], $sueldo_quinc[$i], $ivss[$i], $paro_for[$i], $lph[$i], $otros_desc[$i], $otros_ing[$i], $total_deducc[$i], $total_deveng[$i]);
echo 
$sql_ins2;

y si hago un: mysql_query($sql_ins2); seguro que lo guarda
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #22 (permalink)  
Antiguo 20/01/2012, 22:07
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Mil Gracias por tu ayuda.

Si logro insertar pero el problema está en el count porque solo me trae dos filas y no las 4 que debo guardar. No se porque no esta tomando las demás porque si las trae pero no las evalua en el count.
__________________
Caminando con el corazón partío
  #23 (permalink)  
Antiguo 20/01/2012, 23:14
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar varios array de un form en mysql

A ver, no tienes ni idea de que hace extract, esa función divide los items dentro de un array y los coloca en variables por separado, por ultimo, extract devuelve EL NUMERO de variables importadas, por lo cual, no tiene nada que hacer esa función hay....

Ya te dijeron que debes de colocar SI o SI los nombres de los campos diferentes, o si vas a usar el mismo tienes que AGREGAR los corchetes "nombre_input[]", si lo haces de la ultima forma solo tienes que hacer un count a la variable

Código PHP:
Ver original
  1. <form id="miform" action="" method="post">
  2. <input type="text" name="texto[]" />
  3. <input type="text" name="texto[]" />
  4. <input type="text" name="texto[]" />
  5. <input type="text" name="texto[]" />
  6. <input type="text" name="texto[]" />
  7. <input type="submit" value="Enviar" />
  8. </form>
  9.  
  10. <?php
  11. if (isset($_POST['texto'])) {
  12. $numText = count($_POST['texto']);
  13. for($i=0; $i<$numText; $i++) {
  14. echo $_POST['texto'][$i];
  15. }
  16. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #24 (permalink)  
Antiguo 20/01/2012, 23:20
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

Nemutagk muchas gracias. Use la funcion extract por sugerencia de bUllan9ebrio pero realmente no la conozco. al principio pasé todo en variables asi:

Código PHP:
Ver original
  1. $desde = $_POST['desde'];
  2. $hasta = $_POST['hasta'];
  3. $id_empleado = $_POST['id_empleado'];
  4. $dias = $_POST['dias'];
  5. $sueldo_quinc = $_POST['sueldo_quinc'];
  6. $ivss = $_POST['ivss'];
  7. $paro_for = $_POST['paro_for'];
  8. $lph = $_POST['lph'];
  9. $otros_desc = $_POST['otros_desc'];
  10. $otros_ing = $_POST['otros_ing'];
  11. $total_deducc = $_POST['total_deducc'];
  12. $total_deveng = $_POST['total_deveng'];
  13. $total = $_POST['total'];

Como puedes notar todas tienen nombres diferentes porque en el formulario realizo varios calculos. Por ello no se como llamarlas en el for para que me haga el Insert en la BD.

Me vuelve loca esto, no se como hacerlo
__________________
Caminando con el corazón partío
  #25 (permalink)  
Antiguo 20/01/2012, 23:25
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar varios array de un form en mysql

Cita:
Como puedes notar todas tienen nombres diferentes porque en el formulario realizo varios calculos. Por ello no se como llamarlas en el for para que me haga el Insert en la BD.
a pues muy sencillo, si tienes todas los campos por separado no tienes que hacer ningún loop (for, foreach, etc)

Código PHP:
Ver original
  1. $sql = 'insert into mitabla (desde,hasta,id_empleado,etc) values ("'.$desde.'","'.$hasta.'","'.$id_empleado.'","'.$etc.'")';
  2. $query = mysql_query($sql,$conexion) or die(mysql_error());

ACTUALIZACION:

A ver, lei desde el comienzo y en tu primer post, no indicas realmente cual es el problema, hablas de array, pero en ningún momento estas enviando un array desde el formulario, seria mejor que explicara detalladamente CUAL ES EL PROBLEMA con tu código original
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 20/01/2012 a las 23:36
  #26 (permalink)  
Antiguo 20/01/2012, 23:36
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

No guardo los valores de los array (tales como $sueldo_quinc, $ivss, $paro_for, $lph, $otros_desc, $otros_ing, $total_deducc, $total_deveng), solo guardo los que son valores unicos que son $desde, $hasta, $id_empleado, y $total.

Por eso si creo que debe usarse el for porque asi si me los guardaba pero no todos.

en mysql debe quedar asi:

id_nomina id_empleado dias sueldo_quinc ivss paro_for lph otros_desc otros_ing total_deducc total_deveng

7 1 10 516.07 61.93 7.74 15.48 100 100 185.15 430.92
7 2 12 619.28 61.93 7.74 15.48 120 80 205.15 494.13
7 3 15 925.65 74.05 9.26 18.51 150 200 251.82 873.83
__________________
Caminando con el corazón partío
  #27 (permalink)  
Antiguo 20/01/2012, 23:54
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar varios array de un form en mysql

checa los comentarios que te dejo en tu código original y publica las respuestas, por ultimo, prueba lo que comento al final de tu código y publicalo aquí

Código PHP:
Ver original
  1. <?php
  2. $ruta = '..'; //Esa variable nunca la usas....
  3. include ('../func/func.php');
  4. $conn = db_connect(); //mandas a llamar una conexión pero no la indicas a mysql_query, lo que hace que se alente el script al buscar una conexion abierta
  5.   if (!$conn)
  6.    return 0;
  7.  
  8. $fecha_carga = date("Y-m-d:H:i:s");
  9.  
  10. $desde = $_POST['desde'];
  11. $hasta = $_POST['hasta'];
  12. $id_empleado = $_POST['id_empleado'];
  13. $dias = $_POST['dias'];
  14. $sueldo_quinc = $_POST['sueldo_quinc'];
  15. $ivss = $_POST['ivss'];
  16. $paro_for = $_POST['paro_for'];
  17. $lph = $_POST['lph'];
  18. $otros_desc = $_POST['otros_desc'];
  19. $otros_ing = $_POST['otros_ing'];
  20. $total_deducc = $_POST['total_deducc'];
  21. $total_deveng = $_POST['total_deveng'];
  22. $total = $_POST['total'];
  23.  
  24. /*
  25.  * Este pedaso de código que es lo que hace, para que mandas a llamar esos datos,
  26.  * en el resto de código no los usas en absoluto...
  27.  */
  28.  
  29. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
  30. while($result = mysql_fetch_array($rs)) {
  31.     $ci = $result['ci'];
  32.     $pnombre = $result['pnombre'];
  33.     $snombre = $result['snombre'];
  34.     $papellido = $result['papellido'];
  35.     $sapellido = $result['sapellido'];
  36. }
  37.  
  38. /*
  39.  * fin de código sin usar
  40.  */
  41.  
  42. $sql_ins = "INSERT INTO nomina (fecha_carga, desde, hasta, total) " .
  43. "VALUES ('$fecha_carga','$desde', '$hasta', '$total')";
  44. $res = mysql_query($sql_ins) or die ( "Error MySQL dice: " . mysql_error() );
  45.  
  46.  
  47. /*
  48.  * el siguiente código en realidad no se ve nada mal,
  49.  * deberias hacer un echo a $sql_inst2 para saber que
  50.  * es lo que se esta intentando insertar en la DB
  51.  */
  52.  
  53. $rs2 = mysql_query("SELECT * FROM nomina WHERE fecha_carga='$fecha_carga'");
  54. while($result = mysql_fetch_array($rs2)) {
  55.     $id_nomina = $result['id_nomina'];
  56.  
  57.     $sql_ins2 = "INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) ";
  58.     $sql_ins2 .= "VALUES ('".$id_nomina."', '".$id_empleado."', '".$dias."', '".$sueldo_quinc."', '".$ivss."', '".$paro_for."', '".$lph."', '".$otros_desc."', '".$otros_ing."', '".$total_deducc."'";
  59.     $sql_ins2 .=  ",'".$total_deveng."')";
  60.  
  61.     //por debuggin has un echo
  62.     echo $sql_ins2;
  63.  
  64.     $res2 = mysql_query($sql_ins2) or die ( "Error MySQL dice: " . mysql_error() );
  65.  }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #28 (permalink)  
Antiguo 21/01/2012, 00:06
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

ok, la parte de:

Código PHP:
Ver original
  1. * Este pedaso de código que es lo que hace, para que mandas a llamar esos datos,
  2.  * en el resto de código no los usas en absoluto...
  3.  */
  4.  
  5. $rs = mysql_query("SELECT * FROM empleados WHERE id_empleado='$id_empleado'");
  6. while($result = mysql_fetch_array($rs)) {
  7.     $ci = $result['ci'];
  8.     $pnombre = $result['pnombre'];
  9.     $snombre = $result['snombre'];
  10.     $papellido = $result['papellido'];
  11.     $sapellido = $result['sapellido'];
  12. }

la voy a usar para generar un pdf con los otros datos.

Coloque lo que me indicaste y me muestra esto:

INSERT INTO detalle_nomina (id_nomina, id_empleado, dias, sueldo_quinc, ivss, paro_for, lph, otros_desc, otros_ing, total_deducc, total_deveng) VALUES ('50', 'Array', 'Array', 'Array', 'Array', 'Array', 'Array', 'Array', 'Array', 'Array','Array')
__________________
Caminando con el corazón partío
  #29 (permalink)  
Antiguo 21/01/2012, 00:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Guardar varios array de un form en mysql

Ok, ya avanzamos, el array se muestra porque estas agregando los corchetes "[]" al nombre del input, ESTO UNICAMENTE se hace cuando por ejemplo vas a ingresar varios dias y quieres que todos los campos tengan el mismo nombre, pero cada campo tendrá un valor diferente

Código HTML:
Ver original
  1. <form id="miform" action="" method="post">
  2. <p>indica todas las fechas de una semana</p>
  3. <input type="text" name="fechas[]" />
  4. <input type="text" name="fechas[]" />
  5. <input type="text" name="fechas[]" />
  6. <input type="text" name="fechas[]" />
  7. <input type="text" name="fechas[]" />
  8. <input type="text" name="fechas[]" />
  9. <input type="text" name="fechas[]" />
  10. <p>Indica que dia te gusta mas<p>
  11. <input type="text" name="fecha_favorita" />
  12.  
  13. <input type="submit" value="enviar" />
  14. </form>

cuando va a ser un solo campo con el mismo nombre no es necesario, checa el ejemplo anterior que agregue y quita los corchetes de los nombres de los campos inputs y vuelve a probar
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #30 (permalink)  
Antiguo 21/01/2012, 00:27
Avatar de kimmy  
Fecha de Ingreso: julio-2008
Mensajes: 841
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Guardar varios array de un form en mysql

No creo que esa sea la solución pues en mi código del formulario necesito decirle que sea un array asi:

Código HTML:
Ver original
  1. <td><input name="dias[]" type="text" id="dias<?php echo $indice; ?>" size="2" value="" onBlur="calcula(this.value, '<?php echo $sueldo_diario; ?>', <?php echo $indice; ?>);" /></td>

porque se hacen calculos para cada fila debido a que tengo una tabla que se llena con una consulta de la base de datos y también el usuario introduce datos que permitirán los cálculos.

Esta es una imagen de ejemplo:

__________________
Caminando con el corazón partío

Etiquetas: formulario, mysql, 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 13:43.