Ir al contenido


Foto

Duda sobre fetch_assoc

fetch_assoc php mysql

  • Por favor identifícate para responder
7 respuestas en este tema

#1 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 24 octubre 2016 - 05:09

Buenas. Estoy desarrollando una web en donde debo hacer algunos calculos, la información se carga a la bd por medio de un excel pero deja algunos campos vacios, esto porque desde el php se deben hacer algunas formulas para completar esos espacios. Yo hago un select de todo lo que ocupo y lo muestro sobre unos inputs en un form que envía por post. Todo va bien, ocupo hacer un insert de varios registros con el fetch_assoc me debería servir ya que debería tirar todos los arreglos, el detalle es que cuando hago print_r de post solo me muestra el ultimo registro.

 

Acá mi codigo, a ver si me pueden explicar y ayudar. Muchisimas gracias y saludos


php
  1. <?php
  2. require_once("class.php");
  3. $tra=new Trabajo();
  4. $obj=new Trabajo();
  5.  
  6. if (isset($_POST["grabar"]) && $_POST["grabar"]=="si")
  7. {
  8. //$obj=new Trabajo();
  9. //$obj->insertar_datos();
  10. print_r($_POST);
  11.  
  12. }
  13.  
  14.  
  15.  
  16. ?>
  17.  
  18. <form role="form" class="form-inline" action="" method="POST">
  19. <?php
  20.  
  21. $query2 = "select * from indicadores
  22. INNER JOIN datos ON indicadores.idIndicador=datos.idIndicador
  23. inner join vendedores on datos.idVendedor=vendedores.idVendedor";
  24. $resultado = $conexion-> query($query2);
  25.  
  26. while($reg = $resultado-> fetch_assoc()){
  27.  
  28. $cmvep=$reg['cmve']*10;
  29. $cmcop=$reg['cmco']*10;
  30. $total=$cmvep+$cmcop;
  31.  
  32. ?>
  33.  
  34.  
  35.  
  36. <input type="text" name="idVendedor" value="<?php echo $reg['idVendedor'];?>">
  37. <input type="text" name="nombre" value="<?php echo $reg['nombre'];?>">
  38. <input type="text" name="cmve" value="<?php echo $reg['cmve'];?>">
  39. <input type="text" name="cmvep" value="<?php echo $cmvep;?>">
  40. <input type="text" name="total" value="<?php echo $total;?>">
  41. <input type="text" name="fecha" value="<?php echo $reg['fecha'];?>">
  42. <input type="text" name="idIndicador" value=1>
  43.  
  44. <br><br>
  45.  
  46.  
  47.  
  48. <?php
  49. }
  50.  
  51. ?> <input type="hidden" name="grabar" value="si">
  52. <input type="submit" name="subir" value="Guardar"/>
  53. </form>


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 24 octubre 2016 - 05:25

A ver si entiendo, ¿quieres insertar datos con un select de una tabla a otra?, porque fetch_assoc es para obtener datos no para insertar.


  • 0

#3 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 25 octubre 2016 - 07:31

A ver si entiendo, ¿quieres insertar datos con un select de una tabla a otra?, porque fetch_assoc es para obtener datos no para insertar.

 

No, mira, EJEMPLO: tengo en la tabla personas los campos idnombre,nombre,edad,proximocumpleaños. Yo cargo datos a la bd pero no cargo el ultimo (proximocumple) ese calculo lo hago desde el php. Entonces hago el select para traerme todo lo de la tabla personas y asi hacer el calculo de proximocumpleaños. Una vez hecho esto quiero insertar todos los campos calculados porque puede que tengamos 3 registros, entonces al presionar el boton guardar debería de insertar los 3 registros.  Esa es mi duda. Al inicio pensaba hacer un update de todos y luego insertar pero me parece mejor hacer el insert de los datos solo que actualmente solo me envía el ultimo registro no me envía los 3 para hacer el insert.


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 25 octubre 2016 - 08:37

A ver, de todos modos debes hacer un update, ¿es necesario listar todos los datos?, debes recorrer los datos cada x registros y hacer el calculo y actualizar los datos, digo cada x datos porque siendo un update si son muchos registros puedes obtener un TimeOut, sería algo como:


php
  1. $minId = '<Aqui obtiene el mas bajo>';
  2. $maxID = '<Aqui obtiene el mas alto>';
  3.  
  4. for (i = $minId; i < $maxId; i = i + 200) {
  5. x = i;
  6. y = i + 200;
  7. UPDATE MITABLA SET proximocumple = CONCAT(EXTRACT(YEAR,DATE_ADD(CURDATE(), INTERVAL 1 YEAR )),"-",EXTRACT(MONTH,FechaNac),"-",EXTRACT(DAY,FechaNac) WHERE ID >= x AND ID <= y
  8. }

Ese es un ejemplo, ojo, lo hice al vuelo puede tener errores, pero ya tienes una pista por donde empezar.

 

Saludos.


  • 0

#5 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 25 octubre 2016 - 09:03

A ver, de todos modos debes hacer un update, ¿es necesario listar todos los datos?, debes recorrer los datos cada x registros y hacer el calculo y actualizar los datos, digo cada x datos porque siendo un update si son muchos registros puedes obtener un TimeOut, sería algo como:


php
  1. $minId = '<Aqui obtiene el mas bajo>';
  2. $maxID = '<Aqui obtiene el mas alto>';
  3.  
  4. for (i = $minId; i < $maxId; i = i + 200) {
  5. x = i;
  6. y = i + 200;
  7. UPDATE MITABLA SET proximocumple = CONCAT(EXTRACT(YEAR,DATE_ADD(CURDATE(), INTERVAL 1 YEAR )),"-",EXTRACT(MONTH,FechaNac),"-",EXTRACT(DAY,FechaNac) WHERE ID >= x AND ID <= y
  8. }

Ese es un ejemplo, ojo, lo hice al vuelo puede tener errores, pero ya tienes una pista por donde empezar.

 

Saludos.

 

 

Claro, buenisimo. Es que por ejemplo son maximo 9 registros entonces pensaba hacer un update de los registros y un insert para los nuevos datos. Quiza estoy ahi equivocado y tengas razon, sean solo updates ya que es por fecha diario. Yo muestro los datos que van a estar hidden y esos datos los tomo para hacer el update. El detalle es que cuando le doy guardar solo me guarda el ultimo post, a pesar de tener 9 registros ejemplo: cesar, edad 24, proximocumple 10 (calculado desde php) luego otro registro andres, edad 19, proximo cumple 34. le doy guardar y reviso el pront_r(post) y solo envia el ultimo el de andres. Voy a darle cabeza a esa pista. Gracias


  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 25 octubre 2016 - 09:15

Pues si ese es el caso, deberás crear una matriz en el formulario colocando los nombres de los inputs igual algo como:


html5
  1. <input type="text" name="cumple[]" value="2016-10-25" />

De ese modo tienes un arreglo y lo recoges vía $_POST.

 

Cuando tenga tiempo te hago un ejemplo.

 

Saludos.


  • 0

#7 algunmae

algunmae

    Member

  • Miembros
  • PipPip
  • 31 mensajes

Escrito 25 octubre 2016 - 09:29

Pues si ese es el caso, deberás crear una matriz en el formulario colocando los nombres de los inputs igual algo como:


html5
  1. <input type="text" name="cumple[]" value="2016-10-25" />

De ese modo tienes un arreglo y lo recoges vía $_POST.

 

Cuando tenga tiempo te hago un ejemplo.

 

Saludos.

Muchisimas gracias.  A ese arreglo le paso un for entonces. Voy a ver esa forma que me parece es mas cercana a lo que estoy haciendo. Voy a estar atento


  • 0

#8 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 26 octubre 2016 - 02:52

Si como dice enecumene, pon nombre[] y haces un for tipo 

php
  1. $contador = count($_POST["id"]);
  2.         for($i=0; $i<$contador; $i++) {

cuando hagas el update solo tiene que poner nombre='" . $_POST["nombre"][$i] . "'
  • 0





Etiquetado también con una o más de estas palabras: fetch_assoc, php, mysql