Foros del Web » Programando para Internet » PHP »

Enviar por POST TABLE HTML

Estas en el tema de Enviar por POST TABLE HTML en el foro de PHP en Foros del Web. Hola, Este código es una porción de mi fichero usuarios.php. Consiste en la generación de una tabla HTML a partir de los datos leídos de ...
  #1 (permalink)  
Antiguo 10/04/2012, 04:04
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Enviar por POST TABLE HTML

Hola,

Este código es una porción de mi fichero usuarios.php. Consiste en la generación de una tabla HTML a partir de los datos leídos de una BD; además, al final de cada fila se añade un checkbox. La idea de este checkbox es que en cuanto el usuario pulse el botón borrar, se borren esos usuario de la BD, el problema es que no sé como enviar la tabla o los checkboxes por POST, al menos para saber qué filas están marcadas o no.

Código PHP:
<?php
$users 
listarUsuarios(); //Devuelve el contenido de una tabla de una BD
            
?>
            <form action="usuarios.php" method="POST">
                <TABLE BORDER="1" name="tabla">
                    <TR>
                        <TH> Usuario </TH>
                        <TH> Nombre </TH>
                        <TH> Apellidos </TH>
                        <TH> Password </TH>
                        <TH> Administrador </TH>
                    </TR>
                
                    <?php                                
                        
for($i=0$i<count($users); $i++){
                            echo 
                                
'<TR>' .
                                    
'<TD>' $users[$i][0] . '</TD>' .
                                    
'<TD>' $users[$i][1] . '</TD>' .
                                    
'<TD>' $users[$i][2] . '</TD>' .
                                    
'<TD>' $users[$i][3] . '</TD>' .
                                    
'<TD>' $users[$i][4] . '</TD>';
                                    
?>                            
                                    <TD> <button type="button">Editar</button> </TD>
                                    <TD> <input type="checkbox" name="cb[]" id="cb[]"/> </TD>            
                                <TR><?php
                        
}
                    
?>
                </TABLE>
                <input type="submit" name="anyadir" value ="Añadir"/>
                <input type="submit" name="borrar" value ="Borrar"/>
                <input type="submit" name="atras" value ="Atrás"/>
            </form>
Depués de esto ya invocaría una función borrar filas. Por ahora el problema es que no sé como enviar las filas marcadas, la columna de checkboxes o la tabla entera.

Tampoco quiero hacer uso de ninguna tecnología más (DOM, AJAX, ...).

Muchas gracias.
  #2 (permalink)  
Antiguo 10/04/2012, 04:59
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Enviar por POST TABLE HTML

Bueno, para eso están los campos ocultos, haz algo así:
Código PHP:
.
.
.
'<TD>' . $users[$i][4] . '</TD>'; 
?>                             
<TD> <button type="button">Editar</button> </TD> 
<TD> <input type="hidden" name="id[]" value="<?php echo $users['id']; ?>" />
<input type="checkbox" name="cb[]" id="cb[]"/> </TD>
Cuando envíes el form recoge los id[] de los campos marcados, yo le he puesto el valor: $users['id'], pero no sé que variable tendrás que poner tú, es para que te hagas una idea.
  #3 (permalink)  
Antiguo 10/04/2012, 07:31
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Respuesta: Enviar por POST TABLE HTML

Hola zalito12,

No sabía lo de los hidden.

He hecho lo que me has dicho y me ha funcionado en parte. Te lo comento con imágenes que será más claro.

Tengo la siguiente tabla, y marco las filas que puedes ver:


En el código tengo lo que me has dicho:
Código PHP:
Ver original
  1. <form action="usuarios.php" method="POST">
  2. ...
  3. <?php                              
  4.     for($i=0; $i<count($users); $i++){
  5.         ...
  6.         <TD> <input type="submit" id="editar[]" name="editar[]" value="Editar"/> </TD>
  7.         <TD> <input type="hidden" name="idUser[]" value=<?php echo $users[$i][$id]; ?> />
  8.               <input type="checkbox" name="cb[]" id="cb[]" /> </TD>
  9.         <TR><?php
  10.     }?>
  11.         </TABLE>
  12.                 <input type="submit" name="anyadir" value ="Añadir"/>
  13.                 <input type="submit" name="borrar" value ="Borrar"/>
  14.                 <input type="submit" name="atras" value ="Atrás"/>
  15. </form>
  16. if(isset($_POST["borrar"])){
  17.     echo "Array POST: ";
  18.     print_r($_POST);
  19.     if(isset($_POST["idUser"])){
  20.         echo "<br>Array idUser: ";
  21.         print_r($_POST["idUser"]);
  22.     }
  23.     echo '<br>>>Borrar<<<br>';
  24. }

Y me sale:


Es decir, en la parte que pone:
Array(cb[] Array([0] => on, [1] => [on]) no se me guardan las filas marcadas, simplemente se van encolando tantos ON como checkboxes marque, y en el array IdUser puede verse como ha pasado por POST todos los ID (germarna, dalo2, ...), no solo los que tenían los checkbox marcados.

¿Cómo puedo hacer que se pase el estado del checkbox (tanto ON como OFF)? o ¿Que se pasen sólo los checkbox a ON pero con la fila que les corresponde? o más concretamente, ¿que sólo se pasen los id cuyo checkbox está a ON?

No sé si me he explicado bien del todo.

Muchas gracias.

Última edición por Lord_Herman; 10/04/2012 a las 08:12
  #4 (permalink)  
Antiguo 10/04/2012, 08:16
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Respuesta: Enviar por POST TABLE HTML

Vale, ya lo he resuelto,

Al componente checbox le he añadido un valor:
Código PHP:
Ver original
  1. <TD> <input type="hidden" name="idUser[]" value=<?php echo $users[$i][0]; ?> />
  2.      <input type="checkbox" name="cb[]" id="cb[]" [U]value=<?php echo $users[$i][$id]; ?>[/U] /> </TD>

Muchas gracias por todo.

Última edición por Lord_Herman; 10/04/2012 a las 08:33
  #5 (permalink)  
Antiguo 10/04/2012, 08:34
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Respuesta: Enviar por POST TABLE HTML

Sigo probando, y de hecho no necesito el hidden:
Código PHP:
Ver original
  1. <TD> <input type="checkbox" name="cb[]" id="cb[]" value=<?php echo $users[$i][0]; ?> /</TD>

Cuando lo paso por POST tengo los id en $_POST["cb"];
  #6 (permalink)  
Antiguo 10/04/2012, 14:17
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Enviar por POST TABLE HTML

Pues si, no había tenido en cuenta que un check desmarcado no define la variable para ese POST, como dices si ya tenias los id en el formulario y en otro array no necesitarás ese hidden, yo me imaginaba que el id era un identificador y eso sería el nombre.
La verdad q perfecto si te funciona con ese truquillo del value en los checkbox, no sé si a mí se me habría ocurrido hacerlo así :)
  #7 (permalink)  
Antiguo 10/04/2012, 20:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Respuesta: Enviar por POST TABLE HTML

Hola!

Siguiendo con el mismo tema, ahora lo que quiero es saber qué botón de "Editar" he pulsado:


Ahora no puedo utilizar el truco de value=<lo_que_yo_quiera>, ya que en un type=submit el value es la etiqueta de dentro del botón.

Para recoger los eventos de botón pulsado lo hago empleando el vector POST y la función unset, es decir, por ejemplo, para el botón ir Atrás tengo algo como:
Código PHP:
if(isset($_POST["atras"])){
                        echo 
"<SCRIPT>window.location='menu.php';</SCRIPT>";
                    } 
Muchas gracias.
  #8 (permalink)  
Antiguo 11/04/2012, 01:19
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Enviar por POST TABLE HTML

Vale, una solución que se me ocurre a bote pronto, sin modificar tu formulario es esta:
Código PHP:
<?php  
if(isset($_POST['editar'])){
  foreach(
$_POST['editar'] as $pos => $a){
      echo
'<meta http-equiv="REFRESH" content="0;url=editar.php?id='.$pos.'">';
  }
}                              
    for(
$i=0$i<count($users); $i++){
        ...
        <
TD> <input type="submit" id="editar[]" name="editar[<?php echo $i; ?>]" value="Editar"/> </TD>
        <
TD> <input type="hidden" name="idUser[]" value=<?php echo $users[$i][$id]; ?> /> 
              <input type="checkbox" name="cb[]" id="cb[]" /> </TD> 
        <TR><?php
    
}?>
Te voy a explicar un poco lo que hice, el array de los botones de editar se generará tomando la vaibale $i como valor para la clave en cada caso. Además he pensado que lo que tu querías era redirigir a otra página (editar.php) a la que le pasas por GET la referencia del usuario.

Obviamente a ti no te sirve de nada el valor que toma $i así que tú ahí tendrás que poner el valor de id de cada usuario, que en tú caso creo que usas el nombre como tal.
Si no querías redirigir puedes poner dentro del foreahc, $user_edit = $pos; y al salir del bucle haces lo que quieras con él valor.

Atento, si lo que querías era redirigir a otra página para editar a la que le pasas el valor por GET habría soluciones más sencillas, como sería cambiar tu botón Editar por esto:
Código PHP:
<TD> <a href="editar.php?id='.$i.'"><button  value="Editar"/>Editar</button></a> </TD
Como ya dije la varibale $i la debes sustituir por el identificador de tus usuarios.

Espero que te sirva.
  #9 (permalink)  
Antiguo 11/04/2012, 02:22
 
Fecha de Ingreso: marzo-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 0
Respuesta: Enviar por POST TABLE HTML

Muchas gracias zalito12,

Nuevamente tu solución me ha resuelto el problema.

En el formulario lo doy nombre a cada botón "Editar" como "editar+número de línea":
Código PHP:
for(){
...
<TD> <input type="submit" id="editar[]" name="editar[<?php echo $i?>]" value="Editar" /> 
}
Más adelante comprobando si el vector "editar" ha sido pasado por POST hago el tratamiento adecuado:
Código PHP:
if(isset($_POST["editar"])){
   $user = $_POST["editar"];                        
   foreach($user as $key => $value){
      $i = $key; 
   }
   ?>
   ...
   <TD> <input type="text" name="nombre" maxlength="25" value="<?php echo $users[$i][1]; ?>" /><br /> </TD>
   ...
}
Muchas gracias de nuevo ;)

Etiquetas: html, post, tabla, table, usuarios
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 00:03.