Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Tengo un problema con el listado

Estas en el tema de Tengo un problema con el listado en el foro de PHP en Foros del Web. Hola, si uso el siguiente código funciona a la perfección, pero quiero hacerlo mas prolijo y depender de 2 clases mas "lógica" y "categorias" @import ...
  #1 (permalink)  
Antiguo 13/04/2016, 04:51
ilu7ionHD
Invitado
 
Mensajes: n/a
Puntos:
Tengo un problema con el listado

Hola, si uso el siguiente código funciona a la perfección, pero quiero hacerlo mas prolijo y depender de 2 clases mas "lógica" y "categorias"


Código PHP:
Ver original
  1. $logica = new Logica();
  2. $db = new Conexion();
  3. $consulta="SELECT id, nombre, descripcion FROM categorias";
  4. $res = $db->query($consulta);
  5. //$listaCategorias = $logica->listarCategorias();
  6.  
  7.         echo "<table>";
  8.                 //header
  9.                 echo "<tr><td>ID</td>";
  10.                 echo "<td>Nombre</td>";
  11.                 echo "<td>Descripción</td></tr>";
  12.                     //data  
  13.                      while ($row = $db->recorrer($res))  {
  14.                       echo "<tr><td>{$row['id']}</td>";
  15.                       echo "<td>{$row['nombre']}</td>";
  16.                       echo "<td>{$row['descripcion']}</td></tr>";
  17.                     }
  18.  
  19.         echo "</table>";

Me idea sería llamar a "listarCategorias()" que se encuentra en logica (solo un intermediario) y que a su vez esta llame a listar() que esta en "Categorias" que se encarga de hacer la consulta en la BD. Pero me sale error si lo hago de esta forma que quiero solo funciona de la forma que copie el código.
El error de que sale es:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, object given in C:\blablablablalbla\SQL.php on line 17
ID Nombre Descripción
  #2 (permalink)  
Antiguo 13/04/2016, 08:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tengo un problema con el listado

Sin conocer cómo es el código exacto de tus clases es complicado entender el problema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 13/04/2016, 10:49
ilu7ionHD
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Tengo un problema con el listado



Código PHP:
Ver original
  1. public function recorrer($x)
  2.       {
  3.         return mysqli_fetch_array($x);
  4.       }
  5.      
  6.   public function rows($y)
  7.       {
  8.         return mysqli_num_rows($y);
  9.       }
  10.  
  11.  
  12. public function Listar()
  13.     {
  14.       $db = new SQL();
  15.       $sentencia = "SELECT * FROM categorias;";
  16.       $sql = $db->query($sentencia);
  17.       $arrayAso = $db->recorrer($sql);
  18.       return $arrayAso;
  19.     }
  20.  
  21.  
  22. class Logica
  23.    {
  24.     public function listarCategorias()
  25.         {
  26.           require 'Categoria.php';
  27.           $categorias = new Categoria(null, null);
  28.           $categorias->Listar();
  29.           return $categorias;
  30.         }
  31.    }
  32.  
  33. require 'Logica.php';
  34. require 'SQL.php';
  35. $logica = new Logica();
  36. $db = new SQL();
  37. $listaCategorias = $logica->listarCategorias();
  38. if(count($listaCategorias)>0)
  39.     {
  40.         echo "<table>";
  41.                 //header
  42.                 echo "<tr><td>ID</td>";
  43.                 echo "<td>Nombre</td>";
  44.                 echo "<td>Descripción</td></tr>";
  45.                     //data  
  46.                      while ($row = $db->recorrer($listaCategorias))  {
  47.                       echo "<tr><td>{$row['id']}</td>";
  48.                       echo "<td>{$row['nombre']}</td>";
  49.                       echo "<td>{$row['descripcion']}</td></tr>";
  50.                     }
  51.  
  52.         echo "</table>";
  53.     }
  54.    
  55.     else
  56.         {
  57.           echo 'No hay categorias';
  58.  
  59.         }
  #4 (permalink)  
Antiguo 13/04/2016, 12:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tengo un problema con el listado

Se supone que el método Listar() devuelve algo pero no lo usas, devuelves la misma instancia en lugar del valor de retorno.

Código PHP:
Ver original
  1. // MAL
  2. $categorias->Listar();
  3. return $categorias;
  4.  
  5. // BIEN
  6. return $categorias->Listar();
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 13/04/2016, 12:32
ilu7ionHD
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Tengo un problema con el listado

Hasta el día de hoy pensaba que era exactamente lo mismo ponerlo en una linea que en 2.

Gracias, voy a probar! luego te comento
  #6 (permalink)  
Antiguo 13/04/2016, 12:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Tengo un problema con el listado

Cita:
Iniciado por ilu7ionHD Ver Mensaje
Hasta el día de hoy pensaba que era exactamente lo mismo ponerlo en una linea que en 2.

Gracias, voy a probar! luego te comento
No, no es lo mismo.

El punto es que Listar() devuelve un array, y tu instancia $categorias es un objeto completamente diferente.

Poner las dos sentencias no arregla nada, sencillamente devuelves lo que va después del return, eso no implica que el resultado de Listar() se regrese por arte de magia.

Originalmente devuelves $categorias pero eso no tiene sentido: porque debes devolver el array que Listar() te entrega.

¿Se entiende mejor?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: listado, mysql, select, sql
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:13.