Foros del Web » Programando para Internet » PHP »

Problema con un "for" dentro de otro "for"

Estas en el tema de Problema con un "for" dentro de otro "for" en el foro de PHP en Foros del Web. Hola a todos! Estoy estudiando a través de videotutoriales la programación orientada a objetos, y bueno, despues de varios capítulos decidi poner manos en el ...
  #1 (permalink)  
Antiguo 05/01/2012, 12:19
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
Problema con un "for" dentro de otro "for"

Hola a todos!

Estoy estudiando a través de videotutoriales la programación orientada a objetos, y bueno, despues de varios capítulos decidi poner manos en el código porque mucha teoría y poca práctica no sirve. En fin, no llegue muy lejos, di dos pasos y ya me cai en un pozo....

Trato de hacer un loop for dentro de otro, haciendo dos consultas diferentes dentro de cada for pero que llaman a métodos dentro de la misma clase, les dejo el código para que entiendan mejor:

Esta es la clase "Lista"
Código PHP:
<?php 
require_once("conectar.php");

class 
Lista
{

    public function 
get_categorias()
    {
        
$sql1="SELECT * FROM categorias ORDER BY orden ASC";
        
$ris=mysql_query($sql1,Conectar::con());
        while(
$rig=mysql_fetch_assoc($ris))
        {
            
$this->cat[]=$rig;
        }
        return 
$this->cat;
    }
    
    public function 
get_subcategorias($categoria)
    {
        
        
$sql2="SELECT * FROM subcategorias WHERE id_cat='$categoria' ORDER BY orden ASC";
        
$res=mysql_query($sql2,Conectar::con());
        while(
$reg=mysql_fetch_assoc($res))
        {
            
$this->subcat[]=$reg;
        }
        return 
$this->subcat;
    }
    
    public function 
get_productos($subcategoria)
    {
        
$sql3="SELECT * FROM articulos WHERE id_sub='$subcategoria'";
        
$ros=mysql_query($sql3,Conectar::con());
        while(
$rog=mysql_fetch_assoc($ros))
        {
            
$this->articulo[]=$rog;
        }
        
        return 
$this->articulo;
        
    }
}
?>
y aca están los "for" donde llamo a los métodos de la clase "Lista"
Código HTML:
Ver original
  1. <div id="listo">
  2.     <ul>
  3.         <?php
  4.             $sub_categoria=$lista->get_subcategorias(1);
  5.                    
  6.             for($e=0;$e<sizeof($sub_categoria);$e++)
  7.             {
  8.         ?>
  9.         <li><a href="#" class="sub"><?php echo $sub_categoria[$e]["nombre_sub"]; ?></a>
  10.             <ul>
  11.                 <?php
  12.                $productos=$lista->get_productos($sub_categoria[$e]["id_sub"]);
  13.  
  14.                 for($x=0;$x<sizeof($productos);$x++)
  15.                {
  16.                ?>
  17.                 <li><a href="#" class="art"><?php echo $sub_categoria[$e]["nombre_sub"]; ?> <?php echo $productos[$x]["marca"]; ?> - <?php echo $productos[$x]["descripcion"]; ?></a></li>
  18.                 <?php } ?>
  19.             </ul>
  20.         </li>
  21.         <?php } ?>
  22.     </ul>
  23. </div>

El caso es que devuelve resultados, me hace un listado pero es totalmente incoherente, la primera vuelta del loop la hace bien, pero despues me devuelve todos los resultados de la tabla sin filtrarlos por el id como ordena la consulta del método "get_subcategorias".

Ya les digo soy nuevo en POO, tal vez el problema sea muy estúpido pero yo no lo veo, espero que alguien con más visión que yo en esto me ayude a ver el camino a la solución.

Muchas gracias a todos!!
  #2 (permalink)  
Antiguo 05/01/2012, 16:16
 
Fecha de Ingreso: julio-2010
Mensajes: 393
Antigüedad: 13 años, 9 meses
Puntos: 67
Respuesta: Problema con un "for" dentro de otro "for"

Antes que nada, felicidades!!! para ser newbie tu forma de programar es excelente, además se nota que te gusta programar y sobre todo INVESTIGAR, da gusto ayudar (o trata de ayudar) a gente así

Bueno, con tu problema, como lo veo (lastimosamente donde estoy no puedo hacer pruebas), el problema es que estás agregando elementos a los array de la misma instancia y no está limpiando estos array, por lo que se corregiría vaciandolos antes de volver a cargarlos, más o menos así...

Código PHP:
    ...
    
$this->cat = array() ;
    while(
$rig mysql_fetch_assoc($ris)){
        
$this->cat[] = $rig ;
    }
    ... 
Código PHP:
    ...
    
$this->subcat = array() ;
    while(
$reg mysql_fetch_assoc($res)){
        
$this->subcat[] = $reg ;
    }
    ... 
Código PHP:
    ...
    
$this->articulo = array() ;
    while(
$rog mysql_fetch_assoc($ros)){
        
$this->articulo[] = $rog ;
    }
    ... 
Pruebalo y me cuentas,
Saludos!
__________________
Páginas web de alta calidad y hechas a la medida.
  #3 (permalink)  
Antiguo 06/01/2012, 08:31
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Problema con un "for" dentro de otro "for"

Grande el_quick!!!

Era eso nomás, en un momento pense en ese problema, pero la solución que plantie no funcionó y me perdi.

Gracias por la buena onda, va karma!

Etiquetas: sql, 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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 22:05.