Foros del Web » Programando para Internet » PHP »

Corresponder select con checkbox

Estas en el tema de Corresponder select con checkbox en el foro de PHP en Foros del Web. Hola, veréis el siguiente código no trabaja del modo que yo espero. Quiero que, al marcar cada checkbox muestre el estado correspondiente a cada select. ...
  #1 (permalink)  
Antiguo 29/04/2005, 13:52
 
Fecha de Ingreso: diciembre-2004
Mensajes: 71
Antigüedad: 13 años
Puntos: 0
Corresponder select con checkbox

Hola, veréis el siguiente código no trabaja del modo que yo espero.

Quiero que, al marcar cada checkbox muestre el estado correspondiente
a cada select. El código PHP es uno de muchos intentos, os muestro
ese para que veais que pasa.

Los nombres de las variables no puedo cambiarlas, y no puedo convertir
arrays a variables ni viceversa, ya que afectaría a gran parte de
la aplicación, osea hay que jugar con las variables que están en el código.

Si marco los tres checkbox seguidos si funciona.

Saludos y gracias de antemano.

Código PHP:
 <html>
 <head><title>test.html</title>
 </head>
 <body>
 
 
 <form action="test.php" method="post">
 <table>
 <tr>

  <td class="admin">134
       <input type="hidden" name="id_estado[]" value="134" />
       <input type="checkbox" name="id_cambiar_estado[]" value="134" />
       Marque para cambiar.
      <select name="estado[]" style="font-size: 0.6em">
          <option>Entregado al cliente</option>
          <option value="Pago Confirmado">Pago confirmado</option>
          <option value="Sin Servir">Sin servir</option>
          <option value="Stock Insuficiente. Ver coment.">Stock Insuficiente. Ver coment.</option>
       </select><br />
<a href="historico.php?id=134" onClick="popup(this.href);return false">

Ver Hist&oacute;rico</a>
</td>
</tr>
<tr>
<td class="admin">133
       <input type="hidden" name="id_estado[]" value="133" />
       <input type="checkbox" name="id_cambiar_estado[]" value="133" />
       Marque para cambiar.
      <select name="estado[]" style="font-size: 0.6em">
          <option>Entregado al cliente</option>
          <option value="Pago Confirmado">Pago confirmado</option>
          <option value="Sin Servir">Sin servir</option>
          <option value="Stock Insuficiente. Ver coment.">Stock Insuficiente. Ver coment.</option>
       </select><br />
<a href="historico.php?id=134" onClick="popup(this.href);return false">

Ver Hist&oacute;rico</a>
</td>
</tr>  
<tr>
<td class="admin">132
       <input type="hidden" name="id_estado[]" value="132" />
       <input type="checkbox" name="id_cambiar_estado[]" value="132" />
       Marque para cambiar.
      <select name="estado[]" style="font-size: 0.6em">
          <option>Entregado al cliente</option>
          <option value="Pago Confirmado">Pago confirmado</option>
          <option value="Sin Servir">Sin servir</option>
          <option value="Stock Insuficiente. Ver coment.">Stock Insuficiente. Ver coment.</option>
       </select><br />
<a href="historico.php?id=134" onClick="popup(this.href);return false">

Ver Hist&oacute;rico</a>
</td>
</tr>  
  
</table>
<input type="submit" />
</form>    
<?    
       
//Cambiamos el estado del pedido individualmente.
        
$i=0;    
        
$checkbox_estado=$_POST['id_cambiar_estado'];
        foreach (
$_POST['estado'] as $estado){
              if (
$checkbox_estado[$i]!=''){
                    
                      echo 
$id_estado[$i];  echo $estado;
        }
                          
               
//$pedido_a_finalizar=new Pedido($idpedido);
               //$fecha_estado=$pedido_a_finalizar->cambiar_estado($estado);
             
$i++;
        }
?>        
        
        
        
</body>        
</html>
  #2 (permalink)  
Antiguo 30/04/2005, 05:31
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Deeberías de ser más amplio.. personalmente no entiendo muy bien lo que pretendes.. ¿no es tema de JavaScript???...

Respecto a lo que mencionas que si seleccionas los tres sí te funciona... quizá si le pones índices predefinidos ¿?. Repito que no entiendo bien.. pero si dices que marcando los tres funciona ha de ser porque no dejas "espacios" que te puedan dar un error.. entonces si haces un 'name="algo[1]"' le estás diciendo cuál será su indice y será el mismo al recojer tu arreglo.... entonces podrás establecer una correspondencia exacta...

no sé!. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 30/04/2005, 14:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 71
Antigüedad: 13 años
Puntos: 0
Hola Jam, gracias por el interés, ya está solucionado. El problema como tu dices era al dejar checbox sin marcar,
eso hacía que los indices no se correspondiesen con los select. No puedo/sé ponerle indices predefinidos porque
todos pertenecen a una tabla que se genera dinámicamente.

Lo que hice fue que a cada checkbox le puse en el value lo siguiente ej:

<input type="checkbox" name="id_cambiar_estado[] value="134_1">

ese _1 es la posición del checbox correspondiente al array de los select con el estado

Luego extraje la posición con explode.

No puedo poner el código porque lo hice con la aplicación en sí, y ahora en ese extracto
no me funciona, pero espero que captes la idea.

UN saludo
  #4 (permalink)  
Antiguo 01/05/2005, 02:04
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Ya!.. es justo lo que decía... solo que en ves de poner el "_1" podrías ponerlo dentro de tu name[1] ... así al recojerlo la asociación será siempre la del índice del arreglo con la del valor del checkbox... en un ejemplo concreto:
Código:
<input type="checkbox" name="id_cambiar_estado[1] value="134">
y al recojerlo:
Código PHP:
foreach($_POST['id_cambiar_estado'] as $indice => $valor)
echo 
$indice." -> ".$valor;
// eso debería imprimir "1 -> 134".. claro, sí está seleccionado tu checkbox, de lo contrario simplemente lo ignora
// igual valdría algo como:
echo $_POST['id_cambiar_estado'][1]; 
En ambos casos vé como existe relación con con el "1" del arreglo en PHP (el que recojes) y el arreglo HTML (los names en tu formulario).

Espero te sirva... definitivamente sería "una mejor forma" de hacer lo que haces ahora... Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 01/05/2005, 04:18
 
Fecha de Ingreso: diciembre-2004
Mensajes: 71
Antigüedad: 13 años
Puntos: 0
Cita:
Iniciado por jam1138
Ya!.. es justo lo que decía... solo que en ves de poner el "_1" podrías ponerlo dentro de tu name[1] ... así al recojerlo la asociación será siempre la del índice del arreglo con la del valor del checkbox... en un ejemplo concreto:
Código:
<input type="checkbox" name="id_cambiar_estado[1] value="134">
y al recojerlo:
Código PHP:
foreach($_POST['id_cambiar_estado'] as $indice => $valor)
echo 
$indice." -> ".$valor;
// eso debería imprimir "1 -> 134".. claro, sí está seleccionado tu checkbox, de lo contrario simplemente lo ignora
// igual valdría algo como:
echo $_POST['id_cambiar_estado'][1]; 
En ambos casos vé como existe relación con con el "1" del arreglo en PHP (el que recojes) y el arreglo HTML (los names en tu formulario).

Espero te sirva... definitivamente sería "una mejor forma" de hacer lo que haces ahora... Saludos!

¡Claro!, había pensado en un índice predefinido, pero no se me había ocurrido numérico.

Hay veces en que uno no ve las cosas con claridad.

Tu solución es la correcta, además de más elegante.

Otro saludo!!
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:53.