Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Actualizar registros varios

Estas en el tema de Actualizar registros varios en el foro de PHP en Foros del Web. Hola Gente! Saludos. Traigo en un formulario varias filas de una tabla, y desde otra tabla diferentes opciones que meto en un select. Lo que ...
  #1 (permalink)  
Antiguo 25/11/2016, 14:23
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Actualizar registros varios

Hola Gente! Saludos.

Traigo en un formulario varias filas de una tabla, y desde otra tabla diferentes opciones que meto en un select. Lo que intento realizar es que a la hora de seleccionar una de las opciones, se actualicen en la tabla. El tema es que como son varios registros a la vez no se como hacerlo. Utilizando un while supongo, pero como identifico a cada fila?. Igual lo que hice se que esta mal, pero quiero dejar lo que estuve intentando. Espero se entienda

Código PHP:
<?php
$estados 
mysqli_query($dblocal,"SELECT * FROM estados order by id");
$consulta mysqli_query($dblocal,"SELECT * FROM maquinas WHERE estado = 'Observacion' or estado = 'Micronauta'");

$select="<select><option value='' selected>Seleccione</option>";

do{
     
$select.="<option value='".@$arreglo['id']."'>".@$arreglo['estados']."</option>";
}while(
$arreglo mysqli_fetch_assoc($estados));

$select.="</select>";
 
while (
$resultado mysqli_fetch_assoc($consulta)){
    echo 
"
        <tr> 
            <td>"
.$resultado['maquina']."</td> 
            <td>"
.$resultado['sistema']."</td> 
            <td>"
.$resultado['firmware']."</td> 
            <td>"
.$resultado['estado']."</td> 
            <td>"
.$resultado['fecha']."</td> 
            <td>"
.$resultado['area']."</td> 
            <td>"
.$resultado['observacion']."</td> 
            <td>"
.$select."</td> 
        </tr> "
;
    }

?>

</table>
<input type="submit" name="grabar" value="Grabar" />


<?php

if(isset($_POST["grabar"])){
    
$btn=$_POST["grabar"];


    while(
$btn=="Grabar"){      

      
        
$consulta mysqli_query($dblocal,"UPDATE maquinas set estado='$select' where maquina='".$resultado['maquina']."'");
        
        
        echo 
"<script> alert('Se actualizo correctamente');</script>";
                                                    }else{
        echo 
"<script> alert('No hubo actualizacion');</script>";
            }
        }
<?
  #2 (permalink)  
Antiguo 25/11/2016, 16:55
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Actualizar registros varios

Arreglemos primero la tabla:

Quita ese dowhile de ahí no sirve, usa solo while

Código PHP:
Ver original
  1. <table>
  2. <?php
  3. $estados = mysqli_query($dblocal,"SELECT * FROM estados order by id");
  4. $consulta = mysqli_query($dblocal,"SELECT * FROM maquinas WHERE estado = 'Observacion' or estado = 'Micronauta'");
  5.  
  6. $select = "<option value='' selected>Seleccione</option>";
  7. while($arreglo = mysqli_fetch_assoc($estados)){
  8. $select.="<option value='".@$arreglo['id']."'>".@$arreglo['estados']."</option>";  
  9. }
  10. $select.="</select>";
  11.  
  12. while ($resultado = mysqli_fetch_assoc($consulta)){
  13. $select="<select>".$select;
  14.  
  15. echo "<tr>
  16.     <td>".$resultado['maquina']."</td>
  17.     <td>".$resultado['sistema']."</td>
  18.     <td>".$resultado['firmware']."</td>
  19.     <td>".$resultado['estado']."</td>
  20.     <td>".$resultado['fecha']."</td>
  21.     <td>".$resultado['area']."</td>
  22.     <td>".$resultado['observacion']."</td>
  23.     <td>".$select."</td>
  24. </tr>";
  25. }
  26. ?>
  27. </table>

Al los selects dale un nombre asociativo para trabajarlo más tarde:

Código PHP:
Ver original
  1. $select="<select name='estado[]'>".$select

Cambia el dato (<td>) maquina de la tabla por un "td/input" para poder manejarlo, dale readonly para que no se pueda cambiar y nuevamente nombre asociativo para manejarlo luego:

Es decir cambia

Código PHP:
Ver original
  1. <td>".$resultado['maquina']."</td>

Por

Código PHP:
Ver original
  1. <td><input name='maquina[]' type='text' readonly='readonly' value='".$resultado['maquina']."' /></td>

Te debería quedar así:
Código PHP:
Ver original
  1. <table>
  2. <?php
  3. $estados = mysqli_query($dblocal,"SELECT * FROM estados order by id");
  4. $consulta = mysqli_query($dblocal,"SELECT * FROM maquinas WHERE estado = 'Observacion' or estado = 'Micronauta'");
  5.  
  6. $select = "<option value='' selected>Seleccione</option>";
  7. while($arreglo = mysqli_fetch_assoc($estados)){
  8. $select.="<option value='".@$arreglo['id']."'>".@$arreglo['estados']."</option>";  
  9. }
  10. $select.="</select>";
  11.  
  12. while ($resultado = mysqli_fetch_assoc($consulta)){
  13. $select="<select name='estado[]'>".$select;
  14.  
  15. echo "<tr>
  16.     <td><input type='text' name='maquina[]' readonly='readonly' value='".$resultado['maquina']."' /></td>
  17.     <td>".$resultado['sistema']."</td>
  18.     <td>".$resultado['firmware']."</td>
  19.     <td>".$resultado['estado']."</td>
  20.     <td>".$resultado['fecha']."</td>
  21.     <td>".$resultado['area']."</td>
  22.     <td>".$resultado['observacion']."</td>
  23.     <td>".$select."</td>
  24. </tr>";
  25. }
  26. ?>
  27. </table>

Hasta ahí la tabla, ahora la actualización

tienes como base esto:

Código PHP:
Ver original
  1. $btn=$_POST["grabar"];
  2. while($btn=="Grabar"){      
  3.  
  4. }
Ese while es un bucle infinito $btn siempre será "Grabar"

Para arreglar esto usaremos un foreach para recorrer las maquinas que habíamos asociado y por dentro trabajaremos los estados de la misma manera y actualizamos:


Código PHP:
Ver original
  1. $start_estado = -1;
  2. foreach($_POST["maquina"] as $maquina){
  3. $estado = $_POST["estado"][$start_estado++];
  4.  
  5. $consulta = mysqli_query($dblocal,"UPDATE maquinas SET estado='$estado' WHERE maquina='$maquina'");
  6.     if($consulta){
  7.     echo "Estado de la maquina: <b>$maquina</b> cambiado";
  8.     }
  9.     else{
  10.     echo "Error al cambiar estado de la maquina: <b>$maquina</b>";
  11.     }
  12. echo "<br/>";
  13. }

Recordatorio: dale form a toda la tabla para enviar el http post y usa el isset() para controlar:

Código PHP:
Ver original
  1. <form method="post">
  2. <la tabla></la tabla><br/>
  3. <input type="submit" name="grabar" value="Enviar" />
  4. </form>
  5. <?php
  6. if(isset($_POST["grabar"]))
  7. //actualizar...
  8. }
  9. ?>
No se si es lo que quieres, eso es lo que haría yo, hice todo mi esfuerzo jajaja.


Última edición por alvaro_trewhela; 25/11/2016 a las 17:36
  #3 (permalink)  
Antiguo 25/11/2016, 18:22
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Actualizar registros varios

Hola alvaro_trewhela! Muchas gracias por tu ayuda.

He logrado actualizar los registros, pero estos se actualizan con el id de la fila de las opciones del select, no con el nombre. O también quedan vacíos.

Modifique solo unas lineas en la tabla, ya que así tal cual lo escribiste solo visualizo las opciones del select en la primera fila, en las demás no. (Sera cosa del do while?)

Estas dos lineas modifique:

Código PHP:
$select="<select name='estado[]'><option value='' selected>Seleccione</option>";

<
td><input name='maquina[]' type='text' readonly='readonly' value='".$resultado['maquina']."' /></td
Y escribí tal cual la actualización como me la enviaste. Gracias por eso!

Estoy mirando porque puede ser que se actualicen los registros asi, y no con el nombre de las opciones.

Muchas gracias nuevamente.

Saludos!!

Última edición por agustinpak; 25/11/2016 a las 18:27
  #4 (permalink)  
Antiguo 25/11/2016, 19:49
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Actualizar registros varios

Cita:
Pero estos se actualizan con el id de la fila de las opciones del select, no con el nombre
Para ello deberías entonces revertir:

Código PHP:
Ver original
  1. $select.="<option value='".@$arreglo['estados']."'>".@$arreglo['id']."</option>";

¿O me equivoco?

En cuanto al dowhile en este caso no sirve, ya que el dowhile primero realiza el do luego verifica:
Código PHP:
Ver original
  1. do{
  2. echo "hola";
  3. }while(false);

eso te entrega hola

En cuanto a los vacíos no será que no cambiaste de opción en los selects

Vamos viendo...

Última edición por alvaro_trewhela; 25/11/2016 a las 20:12
  #5 (permalink)  
Antiguo 27/11/2016, 13:40
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Actualizar registros varios

Hola alvaro_trewhela! Sos un maestro! Ya quedo funcionando perfecto!!

Lo que si, en esta linea:

Código PHP:
$select.="<option value='".@$arreglo['estados']."'>".@$arreglo['id']."</option>"
Entendi que el valor son los estados y el id es lo que visualizo en las opciones del select, por lo cual lo deje así:

Código PHP:
$select.="<option value='".@$arreglo['estados']."'>".@$arreglo['estados']."</option>"
Y ahora veo los estados y se graban en la tabla.

Con respecto a que se grababan en blanco, vamos a decirlo así, era por esto:

Código PHP:
$start_estado = -1
Esto hacia que no grabara el primero y comenzaba a grabar desde el segundo. Por lo que me dejaba uno en blanco, me di cuenta cuando empece a grabar mas filas.

En fin, lo cambie a 0 y funciona perfecto!

Te agradezco muchísimo la ayuda. Gracias a vos pude terminar este script, ahora me queda continuar y seguramente tendré mas dudas adelante.

Gracias de nuevo!

Saludos!!

Etiquetas: formulario, mysql, registro, registros, 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 12:16.