Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Envio de valores multiples por POST

Estas en el tema de Envio de valores multiples por POST en el foro de PHP en Foros del Web. Buenos días. Estoy trabajando en un formulario que trabaja con una base de datos de MySQL, en donde esta la tabla Alumnos que tiene un ...
  #1 (permalink)  
Antiguo 29/09/2011, 10:15
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Envio de valores multiples por POST

Buenos días.

Estoy trabajando en un formulario que trabaja con una base de datos de MySQL, en donde esta la tabla Alumnos que tiene un campo llamado Pago y que por defecto esta en NO y necesito que al realizar una consulta a esta tabla se pueda modificar el valor de NO a SI para algunos usuarios, el problema es que al enviar los valores sólo se guardará uno y no todos lo que se hayan cambiado.

Dejo el código para explicarme mejor.

El siguiente código se conecta a la base de datos y obtiene todos los registros de la tabla Alumnos.
Código PHP:
Ver original
  1. <?php require_once('Connections/Conectar.php');
  2.     mysql_select_db($database_PreRegistro, $PreRegistro);
  3.    
  4.     $query_ConsultaAlumnos = "SELECT * FROM alumnos ORDER BY matricula";
  5.     $ConsultaAlumnos = mysql_query($query_ConsultaAlumnos, $PreRegistro) or die(mysql_error());
  6.     $row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos);
  7.     $totalRows_ConsultaAlumnos = mysql_num_rows($ConsultaAlumnos);
  8. ?>


El siguiente código tiene una estructura Do-While que muestra cada uno de los registros.
Código HTML:
Ver original
  1. <form id="form1" name="form1" method="post" action="desbloquea.php">
  2.   <?php do { ?>
  3.            
  4.             <table>
  5.               <tr>
  6.                 <td width="100" align="center"> <div class="Estilo12"> Matricula </div> </td>
  7.                 <td width="100" align="center"> <div class="Estilo12"> Referencia </div> </td>
  8.                 <td width="400" align="center"> <div class="Estilo12"> Nombre </div> </td>
  9.                 <td width="150" align="center"> <div class="Estilo12"> Pago realizado </div> </td>
  10.                 <td width="150" align="center"> <div class="Estilo12"> Debloquear </div> </td>
  11.               </tr>
  12.              
  13.               <tr>
  14.                 <td width="100" align="center"> <input type="image" name="matricula" id="matricula" value="<?php echo $row_ConsultaAlumnos['matricula']; ?>" >  </td>
  15.                 <td width="100" align="center"> <input type="image" name="referencia" id="referencia" value="<?php echo $row_ConsultaAlumnos['referencia']; ?>" > </td>
  16.                 <td width="400" align="center"> <input type="image" name="nombre" id="nombre" value="<?php echo $row_ConsultaAlumnos['nombre']; ?>" > </td>
  17.                 <td width="150" align="center"> <input type="image" name="pago_val_actual" id="pago_val_actual" value="<?php echo $row_ConsultaAlumnos['pago']; ?>" > </td>
  18.                 <td width="150" align="center">
  19.                   <input type="Radio" name="pago_val_nuevo" value="NO"checked>NO
  20.                   <input type="Radio" name="pago_val_nuevo" value="SI">SI
  21.                 </td>
  22.               </tr>
  23.             </table>
  24.             <br />
  25.             <br />
  26.    
  27.     <?php } while ($row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos)); ?></form>

Noten que en el tipo del input he puesto imágen, esto para que los valores no aparezcan en cuadros de texto, ni en botones.

Estos datos se envian por método POST al archivo desbloquea.php y en este lo que hago es recuperar los valores así:
Código PHP:
Ver original
  1. <?php
  2.  $Matricula = $_POST["matricula"];
  3.  $Referencia = $_POST["referencia"];
  4.  $Nombre = $_POST["nombre"];
  5.  $Pago_act = $_POST["pago_val_actual"];
  6.  $Pago_nuev = $_POST["pago_val_nuevo"];
  7. ?>

Posteriormente actualizo la base de datos en los registros que tengan como valor en el campo $pago_nuev == "SI"

Código PHP:
Ver original
  1. if ($Pago_nuev == "SI")
  2. {
  3.     require_once('Connections/Conectar.php');
  4.     mysql_select_db($database_PreRegistro, $PreRegistro);
  5.  
  6.     $query_ConsultaAlumnos = "SELECT * FROM alumnos WHERE matricula = '$Matricula' AND referencia = '$Referencia' ";
  7.    
  8.     $ConsultaAlumnos = mysql_query($query_ConsultaAlumnos, $PreRegistro2012) or die(mysql_error());
  9.  
  10.     $row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos);
  11.     $totalRows_ConsultaAlumnos = mysql_num_rows($ConsultaAlumnos);
  12.  
  13.     $strqry = 'UPDATE `alumnos` SET `pago` = \''.$Pago_nuev.'\'  WHERE matricula = \''.$Matricula.'\' AND referencia = \''.$Referencia.'\'  AND nombre = \''.$Nombre.'\' AND pago = \''.$Pago_act.'\';';
  14.  
  15.     $qry = mysql_query ($strqry);
  16. }

Lo que deseo es que todos los registros que se marquen con SI en la columna Desbloquear se envien y cambien el valor que esta en NO en la base de datos del campo pago a SI.

Si se cambia un solo registro si funciona, pero cuando son varios los valores, pues ya no lo hace porque el input type tiene el mismo nombre en todos los casos y pues al recuperarlo lo hará solo para uno.

Existe un método que me permita realizar el proceso que deseo?

Muchas gracias.
  #2 (permalink)  
Antiguo 29/09/2011, 10:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Envio de valores multiples por POST

Hola:

Para enviar arrays a php, los nombres de los campos del formulario tienen que terminar con un juego de corchetes "[]"... luego no olvides que hay que tratarlos como array (count())

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 30/09/2011, 07:09
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

Hola, gracias por responder caricatos

Siguiendo tu consejo he realizado lo siguiente:

Para ya no poner toda la tabla, dejare sólo uno de los campos, por ejemplo para el campo matricula:
Código HTML:
Ver original
  1. <input type="image" name="matriculaAlum[]" id="matriculaAlum" value="<?php echo $row_ConsultaAlumnos['matricula']; ?>" >

Este input esta en el form que envia los datos al archivo 2, en el cual realize lo siguiente:

Código PHP:
Ver original
  1. <?php
  2.  
  3.   // Se cuenta la cantidad de valores y se almacena en la variable Datos:
  4.   $Datos = COUNT($_POST['matriculaAlum']);
  5.  
  6.   // Mediante un for se imprimen los datos que estan en cada posición del arreglo
  7.   for($i=0; $i<$Datos; $i++)
  8.   {
  9.     // $i -> Es el indice del arreglo
  10.     $Mostrar = $_POST["matriculaAlum"][$i];
  11.     echo "$Mostrar<br>";
  12.   }
  13. ?>

Pero no se en que me estoy equivocando porque no se imprime nada.

Espero me puedan asesorar.
  #4 (permalink)  
Antiguo 30/09/2011, 12:44
Avatar de gustavopino  
Fecha de Ingreso: septiembre-2011
Ubicación: venezuela
Mensajes: 152
Antigüedad: 12 años, 7 meses
Puntos: 29
Respuesta: Envio de valores multiples por POST

Amigo prueba con esto:
Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST['matriculaAlum])) {
  3.      foreach($_POST['matriculaAlum'] as $val) {
  4.            echo $val."<br>";
  5.      }
  6. }
  7. ?>

A ver que resulta ya que foreach trabaja con array.
Espero que te sirva.
__________________
Visita a Publiventa donde compras y vendes de todo
  #5 (permalink)  
Antiguo 03/10/2011, 10:06
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

Buenos días,

Gracias por responder gustavopino, te comento que tu código si funciono péro fue despues de que en el nombre del formulario agregue tambien [] ya que anteriormente sólo agrege los corchetes a los campos del formulario pero no al formulario, entonces si funciona tambien el código que he puesto en el mensaje anterior, así que los dos métodos son efectivos.

Ahora tengo otro problema, el campo que almacena el valor SI o NO es un input type="Radio" y al mostrar todos los registros, solo puedo elegir un valor, es decir que por ejemplo si tengo 3 registros si me obtiene los 3 registros pero en la columna Desbloquar donde puedo elegir SI o NO unicamente me deja seleccionar uno de los 6 input y necesito que sea posible elegir uno de cada fila.

Cualquier aporte será bienvenido. Gracias.
  #6 (permalink)  
Antiguo 03/10/2011, 10:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Envio de valores multiples por POST

Eso es porque todos los radios se llaman igual, lo que debes de hacer es diferenciarlos con su número de indice:
Código HTML:
Ver original
  1. <input type="radio" name="condicion[0]" value="si">Si
  2. <input type="radio" name="condicion[0]" value="no">No
  3.  
  4.  
  5. <input type="radio" name="condicion[1]" value="si">Si
  6. <input type="radio" name="condicion[1]" value="no">No
  7.  
  8.  
  9. <input type="radio" name="condicion[2]" value="si">Si
  10. <input type="radio" name="condicion[2]" value="no">No
  11.  
  12.  
  13. <input type="radio" name="condicion[3]" value="si">Si
  14. <input type="radio" name="condicion[3]" value="no">No

Saludos.
  #7 (permalink)  
Antiguo 03/10/2011, 10:31
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

Gracias por tu pronta respuesta GatorV

He intentado lo siguiente:

Les recuerdo que para mostrar los registros de la base de datos utilizo un Do-While, pondre solo la columna de la tabla donde esta el Radio.

Código HTML:
Ver original
  1. <?php do { ?>
  2. <td width="200" align="center">
  3.   <?php $ind = "0"; ?>
  4.   <input type="Radio" name="pago_val_nuevo[<?php $ind?>]" id="pago_val_nuevo" value="NO"checked>NO
  5.   <input type="Radio" name="pago_val_nuevo[<?php $ind?>]" id="pago_val_nuevo" value="SI">SI
  6.   <?php $ind++;?>
  7. </td>
  8.  
  9. <?php } while ($row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos)); ?>

Pero algo esta saliendo mal porque si yo imprimo el valor del indice (despues del incremento), siempre me imprime 1 y no encuentro como corregirlo.
  #8 (permalink)  
Antiguo 03/10/2011, 10:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Envio de valores multiples por POST

Eso es porque creas el indice dentro del do/while, tienes que crear el indice fuera:
Código PHP:
Ver original
  1. // mal
  2. do {
  3.      $i = 0;
  4.      $i++;
  5. } while (cosas);
  6.  
  7. // bien
  8. $i = 0;
  9. do {
  10.      $i++;
  11. } while (cosas);

Saludos.
  #9 (permalink)  
Antiguo 03/10/2011, 10:37
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

Hola de nuevo, ya esta, tenias razón, sólo necesitaba inicializar el íncice antes del Do.

De la siguiente forma:

Código HTML:
Ver original
  1. <?php
  2.   $ind = "0"; #echo $ind;
  3.  
  4.  do {
  5. ?>
  6.  
  7.     <td width="200" align="center">  
  8.         <input type="Radio" name="pago_val_nuevo[<?php echo $ind?>]" id="pago_val_nuevo" value="NO"checked>NO
  9.         <input type="Radio" name="pago_val_nuevo[<?php echo $ind?>]" id="pago_val_nuevo" value="SI">SI
  10.  
  11.         <?php $ind++; #echo $ind;?>
  12.                  
  13.     </td>
  14.   </tr>
  15.  
  16. <?php } while ($row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos)); ?>

Muchas gracias por la ayuda.
  #10 (permalink)  
Antiguo 03/10/2011, 13:52
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

¿Y como puedo manipular estos datos para actualizar la base de datos?

Yo actualmente tengo este código que funciona SIN ARREGLOS
Código PHP:
Ver original
  1. if ($Pago_val_nuev == "SI")
  2.     {
  3.         require_once('Connections/PreRegistro.php');
  4.         mysql_select_db($database_PreRegistro, $PreRegistro);
  5.      
  6.         $query_ConsultaAlumnos = "SELECT * FROM alumnos WHERE matricula = '$Matricula' AND referencia = '$Referencia' ";
  7.        
  8.         $ConsultaAlumnos = mysql_query($query_ConsultaAlumnos, $PreRegistro) or die(mysql_error());
  9.      
  10.         $row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos);
  11.         $totalRows_ConsultaAlumnos = mysql_num_rows($ConsultaAlumnos);
  12.      
  13.         $strqry = 'UPDATE `alumnos` SET `pago` = \''.$Pago_nuev.'\'  WHERE matricula = \''.$Matricula.'\' AND referencia = \''.$Referencia.'\'  AND pago = \''.$Pago_act.'\';';
  14.      
  15.         $qry = mysql_query ($strqry);
  16.        
  17.         if (!$qry || (mysql_affected_rows()==0))
  18.         {
  19.             print ('<font color="#ff0000" size="4" face="Verdana, Arial, Helvetica, sans-serif">
  20.                    <strong>Error: Actualización Fallida. No se ha realizado ningún cambio </strong></font>');
  21.         }
  22.        
  23.         else
  24.         {
  25.             print ('<font color="#999999" size="4" face="Verdana, Arial, Helvetica, sans-serif">
  26.                    <strong>Aviso : Registros actualizados exitosamente.</strong><img src="img/OK.png" width="48" height="48" /></font> ');
  27.         }
  28.     }

Que cambio deberé realizar para que funcione con arreglos?

En estas líneas es donde tengo la mayor dificultad:

$query_ConsultaAlumnos = "SELECT * FROM alumnos WHERE matricula = '$Matricula' AND referencia = '$Referencia' ";

$strqry = 'UPDATE `alumnos` SET `pago` = \''.$Pago_nuev.'\' WHERE matricula = \''.$Matricula.'\' AND referencia = \''.$Referencia.'\' AND pago = \''.$Pago_act.'\';';

Que estructura me recomiendan para que se vayan actualizando los registros? porque supongo que debo colocar estas instrucciones dentro de un For o Do/While para ir actualizando los registros de uno por uno.

Gracias.
  #11 (permalink)  
Antiguo 04/10/2011, 17:15
Avatar de javier0730  
Fecha de Ingreso: enero-2010
Ubicación: Jalisco
Mensajes: 82
Antigüedad: 14 años, 4 meses
Puntos: 8
Respuesta: Envio de valores multiples por POST

Hola, buenas tardes.

Ya lo he podido resolver, a continuación les dejo el código, quizas a alguien le sea de utilidad.

En el archivo que recibe los valores, los cambios que realize fueron estos:

Código PHP:
Ver original
  1. for($i=0; $i<$CantidadNPag; $i++)
  2. {
  3.     $Pago_nuevo = $_POST["pago_val_nuevo"][$i];
  4.     #echo "$Pago_nuevo<br>";
  5.  
  6.     if ($Pago_nuevo == "SI")
  7.     {
  8.         require_once('Connections/PreRegistro.php');
  9.         mysql_select_db($database_PreRegistro, $PreRegistro);
  10.  
  11.         $Matricula = $_POST["matriculaAlum"][$i];
  12.         $Referencia = $_POST["referenciaAlum"][$i];
  13.         $Pago_actual = $_POST["pago_val_actualAlum"][$i];
  14.         $query_ConsultaAlumnos = "SELECT * FROM alumnos WHERE matricula = '$Matricula' AND referencia = '$Referencia' ";
  15.  
  16.         $ConsultaAlumnos = mysql_query($query_ConsultaAlumnos, $PreRegistro) or die(mysql_error());
  17.  
  18.         $row_ConsultaAlumnos = mysql_fetch_assoc($ConsultaAlumnos);
  19.         $totalRows_ConsultaAlumnos = mysql_num_rows($ConsultaAlumnos);
  20.  
  21.         $Pago_NO = "NO";
  22.            
  23.         $strqry = 'UPDATE `alumnos` SET `pago` = \''.$Pago_nuevo.'\'  WHERE matricula = \''.$Matricula.'\' AND referencia = \''.$Referencia.'\' AND pago = \''.$Pago_NO.'\' ;';
  24.            
  25.         $qry = mysql_query ($strqry);
  26.     }
  27. }

Mencionando que el código que utilizo para la recuperación de valores es el mismo que ya he posteado anteriormente.

Saludos y muchas gracias por la ayuda brindada.

Etiquetas: multiples, mysql, post, registro, tabla, 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 14:35.