Foros del Web » Programando para Internet » PHP »

Problema con for each

Estas en el tema de Problema con for each en el foro de PHP en Foros del Web. Estimados tengo un problema que debe ser simple, pero no logro resolverlo: Tengo una tabla de productos (MySQL) y uno de sus campos (numérico) indica ...
  #1 (permalink)  
Antiguo 31/07/2015, 11:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 523
Antigüedad: 20 años, 11 meses
Puntos: 6
Problema con for each

Estimados tengo un problema que debe ser simple, pero no logro resolverlo:
Tengo una tabla de productos (MySQL) y uno de sus campos (numérico) indica con un 0 o un 1 si el producto debe mostrarse al público en la página o no.
Para que el administrador de la página muestre / oculte productos le armé una pantalla donde selecciona un rubro, le listo los productos de ese rubro con un checkbox al lado y simplemente tilda los productos que deben ocultarse.
Con un for each recorro todos los checkbox (que en su propiedad value me traen el id del producto) y ejecuto una instrucción SQL UPDATE para modificar el campo en cuestión.
El problema es que para los primeros productos funciona todo bien, pero cuando se tilda algún producto, digamos, de la mitad del listado para abajo no pasa nada, no llega la variable $_POST. El rubro que más productos tiene tendrá unos 340 no se si serán muchos.

Código HTML del listado de productos:

Código PHP:
Ver original
  1. <input type="checkbox" name="chkocultar[]" id="chkocultar[]" value="<? echo $reg['codigo'];?>">
  2.  
  3. Código PHP que procesa los productos "tildados":
  4.  
  5.  foreach($_POST['chkocultar'] as $codigo)
  6.           {
  7.             // echo $codigo."<br>";
  8.           mysql_query("UPDATE productos SET kpasivo=1 WHERE codigo='$codigo'",$link);
  9.           $i++;    
  10.           }

Agradeceré cualquier orientación.

Última edición por Triby; 31/07/2015 a las 13:41 Razón: Código en highlight
  #2 (permalink)  
Antiguo 31/07/2015, 13:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con for each

Incluye la siguiente línea antes de procesar los datos:

Código PHP:
Ver original
  1. var_dump($_POST);

Pega aquí el resultado.

Tienes un error en HTML, la ID de cada elemento debe ser única y la estás repitiendo para cada checkbox, además de que no se permiten corchetes.

Otra cosa, hay un límite para la cantidad de datos enviados por formulario, aunque se me hace raro que lo superes si solo estás enviando los checkbox; de cualquier forma, sería más fácil para el usuario si en vez de un listado de tantos productos manejas de 30 o 50 por página.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 31/07/2015, 13:46
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: Problema con for each

Traté de simular tu código poniendo 340 checkbox y lo único que tuve que cambiar fue el órden de los parámetros en la función mysql_query, pero de resto todo funciona bien. Aquí te dejo el código que usé y funciona bien:

Código PHP:
Ver original
  1. <?php
  2.     $mysqli = new mysqli("localhost", "root", "", "prueba");
  3. ?>
  4. <?php
  5.     if (isset($_POST['enviar']))
  6.     {
  7.         foreach($_POST['chkocultar'] as $codigo)
  8.         {
  9.             echo $codigo."<br>";
  10.             $result = mysqli_query($mysqli, "UPDATE prueba SET kpasivo=1 WHERE codigo='{$codigo}'");
  11.         }
  12.         exit;
  13.     }
  14. ?>
  15. <html>
  16. <head></head>
  17. <body>
  18. <form action="" method="post">
  19. <?php
  20.     for ($i=1;$i<=340;$i++)
  21.     {
  22.         echo "<input type='checkbox' name='chkocultar[]' value='{$i}'>{$i}<br>";
  23.     }
  24. ?>
  25. <input type="submit" name = "enviar" value="Enviar">
  26. </form>
  27. </body>
  28. </html>

Como ves, no hay problema con el número de checkbox.

Corrijo el código. Ya la costumbre de usar mysqli. Así es como debe quedar. Y no hay que cambiar el órden en mysql_query:

Código PHP:
Ver original
  1. <?php
  2.     $mysql = mysql_connect("localhost", "root", "");
  3.     mysql_select_db("prueba", $mysql) or die(mysql_error());
  4. ?>
  5. <?php
  6.     if (isset($_POST['enviar']))
  7.     {
  8.         foreach($_POST['chkocultar'] as $codigo)
  9.         {
  10.             echo $codigo."<br>";
  11.             $result = mysql_query("UPDATE prueba SET kpasivo=1 WHERE codigo='{$codigo}'",$mysql);
  12.         }
  13.         exit;
  14.     }
  15. ?>
  16. <html>
  17. <head></head>
  18. <body>
  19. <form action="" method="post">
  20. <?php
  21.     for ($i=1;$i<=340;$i++)
  22.     {
  23.         echo "<input type='checkbox' name='chkocultar[]' value='{$i}'>{$i}<br>";
  24.     }
  25. ?>
  26. <input type="submit" name = "enviar" value="Enviar">
  27. </form>
  28. </body>
  29. </html>
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Última edición por chronos682; 31/07/2015 a las 13:52

Etiquetas: html, mysql, sql, tabla, variable
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 15:41.