Foros del Web » Programando para Internet » PHP »

obtener todos los datos de una tabla

Estas en el tema de obtener todos los datos de una tabla en el foro de PHP en Foros del Web. Buenas, Tengo la siguiente clase que se llama material, Class material(){ $id; $nombre; $referencia; public function __construct($id_material){ $sql= " SELECT * FROM material "; //una ...
  #1 (permalink)  
Antiguo 08/06/2012, 10:30
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
obtener todos los datos de una tabla

Buenas,

Tengo la siguiente clase que se llama material,

Class material(){


$id;
$nombre;
$referencia;

public function __construct($id_material){

$sql= "
SELECT
*
FROM material
";

//una vez ejecutada la consulta
$t_material = leo_tabla($sql);

foreach($t_material as $k => $v){

$this->id = $t_material[$k]['id'];
$this->nombre = $t_material[$k]['nombre'];
$this->referencia = $t_material[$k]['referencia'];

}



}

como pueden observar le paso un id y obtengo todos los datos de dicho material. como hago si quiero obtener todos los datos de todos los materiales.
Ya que la función solo te retorna uno.

saludos
  #2 (permalink)  
Antiguo 08/06/2012, 10:41
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: obtener todos los datos de una tabla

Pues no, como puedo ver, no indicas en ningún lugar a mysql que filtre por el id del material.
  #3 (permalink)  
Antiguo 08/06/2012, 10:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

Cita:
Iniciado por ocp001a Ver Mensaje
Pues no, como puedo ver, no indicas en ningún lugar a mysql que filtre por el id del material.
se me borro.

seria asi
$sql= "
SELECT
*
FROM material
WHERE id = ".$id_material."
";


pero lo que yo quiero es agregar en esa clase que no solo me devuelva por id si no que tambien me devuelva todos los registros para mostrar en una tabla
  #4 (permalink)  
Antiguo 08/06/2012, 11:06
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: obtener todos los datos de una tabla

Hola blashak.

Tendrias que plantear el uso de una segunda clase a modo de coleccion de materiales.

La creacion de un material con:

Código PHP:
Ver original
  1. $mat = new Material(1);

En teoria devuelve 1 solo material si vos queres una clase que te devuelva todos
y lo queres hacer con teoria de objetos tendrias que engarar una clase algo asi.



Código PHP:
Ver original
  1. class MaterialCollection{
  2.         private $arr;
  3.         public function __construct(){
  4.             $sql= "SELECT id FROM material";
  5.             //una vez ejecutada la consulta
  6.             $t_material = leo_tabla($sql);
  7.             foreach($t_material as $k => $v)
  8.             {
  9.                 this->addMaterial(new Material($t_material[$k]['id']));
  10.             }      
  11.         }      
  12.         public function showMateriales(){
  13.             for($i=0;$i<count($arr);$i++)
  14.             {
  15.                 echo "<pre>";              
  16.                     print_r($this->arr[$i]);
  17.                 echo "</pre>";
  18.             }
  19.         }
  20.        
  21.         public function getMaterial($matid){}
  22.         public function addMaterial(Material $mat){}
  23.         public function removeMaterial($matid){}
  24.         public function __destruct(){}
  25. }

Espero sirva, saludos.
__________________
http://www.latinium.com.ar/
  #5 (permalink)  
Antiguo 08/06/2012, 14:54
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

elgoncho99 entiendo lo que me decis, pero, tengo me queda una duda.
1)seria correcto entonces tener dos clases una para un material y otra para todos?? ya que tengo que montar la de pedidos y necesito tambien todos los pedidos en una tabla y tambien un pedido en concreto para cuando se necesite la informacion de ese pedido. es correcto montarlo en dos clases por separado?
  #6 (permalink)  
Antiguo 08/06/2012, 15:10
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: obtener todos los datos de una tabla

Si, seria correcto.

Las clases estan diseñadas para manejar lo que son, si haces una clase llamada material. cada instancia maneja 1 material solo. Si haces una clase para manejar colecciones, 1 objeto de esa clase hara eso precisamente manejar 1 coleccion de algo.

En el siguiente link

http://ar.php.net/manual/es/class.iterator.php

Es una interfaz la cual tenes que implementar para manejar colecciones de objetos.

Espero te sirva, saludos.
__________________
http://www.latinium.com.ar/
  #7 (permalink)  
Antiguo 10/06/2012, 05:02
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

Cita:
Iniciado por elgoncho99 Ver Mensaje
Si, seria correcto.

Las clases estan diseñadas para manejar lo que son, si haces una clase llamada material. cada instancia maneja 1 material solo. Si haces una clase para manejar colecciones, 1 objeto de esa clase hara eso precisamente manejar 1 coleccion de algo.

En el siguiente link

http://ar.php.net/manual/es/class.iterator.php

Es una interfaz la cual tenes que implementar para manejar colecciones de objetos.

Espero te sirva, saludos.

elgoncho99, muchas gracias por la informacion pero no entiendo muy bien como implementarlo.





Código PHP:
Ver original
  1. include('db.php');
  2.  
  3. class material extends DB{
  4.  
  5.     public $id;
  6.     public $nombre;
  7.     public $referencia;
  8.     public $peso;
  9.     public $tamano;
  10.  
  11.     public function __construct($id_material){
  12.    
  13.         $sql= "
  14.             SELECT
  15.                 *
  16.             FROM material
  17.             WHERE id = ".$id_material."
  18.         ";
  19.        
  20.        
  21.         $this->query = $sql;
  22.        
  23.         $t_material  = $this->AssocList();
  24.        
  25.         foreach($t_material as $k => $v){
  26.        
  27.             $this->id = $t_material[$k]['id'];
  28.             $this->nombre = $t_material[$k]['nombre'];
  29.             $this->referencia = $t_material[$k]['referencia'];
  30.             $this->peso = $t_material[$k]['peso'];
  31.             $this->tamano = $t_material[$k]['tamano'];
  32.         }
  33.     }
  34.  
  35. }
  36.  
  37. class MaterialCollection implements Iterator {
  38.  
  39.    private $_items = null;
  40.  
  41.    public function __construct() {
  42.       $this->_material = array();
  43.    }
  44.  
  45.    public function addItem($i){
  46.       $this->_items[] = $i;
  47.    }
  48.  
  49.    public function removeItem($i){
  50.       unset($this->_items[array_search($i, $this->_items)]);
  51.    }
  52.  
  53.    public function rewind() {
  54.        reset($this->_items);
  55.    }
  56.  
  57.    public function current() {
  58.        return current($this->_items);
  59.    }
  60.  
  61.    public function key() {
  62.        return key($this->_items);
  63.    }
  64.  
  65.    public function next() {
  66.        return next($this->_items);
  67.    }
  68.  
  69.    public function valid() {
  70.        return $this->current() !== false;
  71.    }
  72.  
  73. }
  74.  
  75.  
  76. $material = new material(1);
  77.  
  78. echo $material->id;
  79.  
  80. $mc = new MaterialCollection();

ahora que tengo las dos clases, le tengo que pasar tada la informacion de material a la clase MaterialCollection?? o como se hace??
lo que me tendria que devolver MaterialCollection seria toda la informacion de todos los materiales para ponerlo en un listado.

Saludos
  #8 (permalink)  
Antiguo 10/06/2012, 16:01
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: obtener todos los datos de una tabla

Hola como andas.

Bueno para empezar, recorda que si tenes en 1 clase llamada Base de datos
y se encarga de manejar conexiones y consultas a la base de datos,
extenderla a un material no seria muy logico.
Lo que podrias es que un material pueda o no tener 1 referencia a la base de datos (atributo privado).
Y recuperar al instanciarlo 1 referencia de la clase Base de datos que podria ser singleton esa clase, instanciada solo 1 vez.

Pero bueno volviendo a lo que me preguntaste lo que te convendria es en el constructor de la implementacion de la interfaz
MaterialCollection recuperar todos los id desde la base de datos, para luego generar los respectivos id de ese material.

Algo asi seria.



Código PHP:
Ver original
  1. include('db.php');
  2.  
  3. class material {
  4.  
  5.     public $id;
  6.     public $nombre;
  7.     public $referencia;
  8.     public $peso;
  9.     public $tamano;
  10.    
  11.     /* Instancia privada de la clase db*/
  12.     private $_db;
  13.  
  14.     public function __construct($id_material){     
  15.         $this->_db = new DB();     
  16.         $sql= "
  17.            SELECT
  18.                *
  19.            FROM material
  20.            WHERE id = ".$id_material."
  21.        ";    
  22.        
  23.         $this->_db->query = $sql;
  24.        
  25.         /* Se supone que esto devuelve 1 solo
  26.         array asociativo si el id es unico*/
  27.         $t_material  = $this->_db->AssocList();
  28.        
  29.         $this->id           = $t_material['id'];
  30.         $this->nombre       = $t_material['nombre'];
  31.         $this->referencia   = $t_material['referencia'];
  32.         $this->peso         = $t_material['peso'];
  33.         $this->tamano       = $t_material['tamano'];
  34.     }
  35.  
  36. }
  37.  
  38. class MaterialCollection implements Iterator {
  39.  
  40.    private $_items = null;
  41.    private $_db;
  42.  
  43.    public function __construct() {
  44.         $this->_material = array();
  45.         $this->_db = new DB();
  46.         $this->_db->query = "SELECT id FROM material";
  47.        
  48.         /* Se supone que esto devuelve todos los id leidos*/
  49.         $materiales_id  = $this->_db->AssocList();
  50.         for($i=0;$i<count($materiales_id);$i++)
  51.         {
  52.             this->addItem( new Material($materiales_id ['id']) );
  53.         }  
  54.    }
  55.  
  56.    public function addItem($i){
  57.       $this->_items[] = $i;
  58.    }
  59.  
  60.    public function removeItem($i){
  61.       unset($this->_items[array_search($i, $this->_items)]);
  62.    }
  63.  
  64.    public function rewind() {
  65.        reset($this->_items);
  66.    }
  67.  
  68.    public function current() {
  69.        return current($this->_items);
  70.    }
  71.  
  72.    public function key() {
  73.        return key($this->_items);
  74.    }
  75.  
  76.    public function next() {
  77.        return next($this->_items);
  78.    }
  79.  
  80.    public function valid() {
  81.        return $this->current() !== false;
  82.    }
  83.  
  84. }
  85.  
  86.  
  87. $material = new material(1);
  88.  
  89.  
  90.  
  91. $mc = new MaterialCollection();
  92.  
  93. while(($m = $mc->next()) !== null)
  94. {
  95.     echo $material->id;
  96. }

Espero sirva, saludos.
__________________
http://www.latinium.com.ar/
  #9 (permalink)  
Antiguo 11/06/2012, 11:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

Hola elgoncho99,

Ante todo te quería agradecer por las respuesta. Hay 2 cosas que no me quedan claro.

1)

Código PHP:
Ver original
  1. while(($material = $mc->next()) != null)
  2. {
  3.    
  4.     echo $material ->id;
  5.     echo "<br>";
  6. }

vos me dejaste esto que recorre todos los items hasta que no tenga mas. el problema es que el primer id no me lo muestra con lo cual tuve que poner esto.

echo $mc->current()->id;

el codigo quedaria de esta manera

Código PHP:
Ver original
  1. echo $mc->current()->id;
  2. echo "<br>";
  3. while(($m = $mc->next()) != null)
  4. {
  5.    
  6.     echo $m->id;
  7.     echo "<br>";
  8. }

es correcto esto??? no hay una manera de llamarlo a todos dentro de while???

2)en la web tengo un formulario que agrega los materiales pero no esta implementado en la clase material.
como lo podria hacer?
seria correcto esta forma??

mi idea seria añadir en la clase material una funcion que se llame add($array) que le pasas una array con todos los valores del formulario. pero el problema esta la clase material siempre necesita un argumento id y como estoy generando un material no puedo pasarle la id.

Saludos
  #10 (permalink)  
Antiguo 11/06/2012, 11:36
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: obtener todos los datos de una tabla

Si tenes razon, me salto el primero.

1- Podes usar un do while si queres.

Código PHP:
Ver original
  1. do{
  2.     echo $mc->current()->id;
  3.     echo "<br>";
  4. } while($mc->next() != null);

2- Cambia el constructor de la clase material y si usa un metodo add y ahi tienes la solucion.

Código PHP:
Ver original
  1. public function add( $datos = array() )
  2.  {
  3.     /* esto cambialo por los campos que tengas, no incluyas el id*/
  4.     if(isset($datos['campo_1'])
  5.     {
  6.         this->campo_1 = $datos['campo_1'];
  7.     }
  8.     if(isset($datos['campo_2'])
  9.     {
  10.         this->campo_2 = $datos['campo_2'];
  11.     }
  12.     /* aca hacer el insert a mysql y obtener el ID del material insertado
  13.     para asignarselo a $this->id*/
  14.  }
  15.  public function __construct($id_material = -1){
  16.    
  17.     /* Si hay que leer que lo lea sino no hacer nada */
  18.     if( $id_material > 0 )
  19.     {
  20.         $sql= "
  21.            SELECT
  22.                *
  23.            FROM material
  24.            WHERE id = ".$id_material."
  25.        ";
  26.        
  27.        
  28.         $this->query = $sql;
  29.        
  30.         $t_material  = $this->AssocList();
  31.        
  32.         foreach($t_material as $k => $v){
  33.        
  34.             $this->id = $t_material[$k]['id'];
  35.             $this->nombre = $t_material[$k]['nombre'];
  36.             $this->referencia = $t_material[$k]['referencia'];
  37.             $this->peso = $t_material[$k]['peso'];
  38.             $this->tamano = $t_material[$k]['tamano'];
  39.         }
  40.     }
  41. }



Espero sirva, saludos.
__________________
http://www.latinium.com.ar/
  #11 (permalink)  
Antiguo 11/06/2012, 12:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

segun tu me tendria que quedar asi, no???



Código PHP:
Ver original
  1. include('db.php');
  2.  
  3.  
  4. class material extends DB{
  5.  
  6.     private $db;
  7.    
  8.     public $id;
  9.     public $nombre;
  10.     public $referencia;
  11.     public $peso;
  12.     public $tamano;
  13.    
  14.     public function __construct($id_material){
  15.         if($id_material > 0){
  16.            
  17.             $this->db = new DB();
  18.        
  19.             $sql= "
  20.                 SELECT
  21.                     *
  22.                 FROM material
  23.                 WHERE id = ".$id_material."
  24.             ";
  25.            
  26.            
  27.             $this->db->query = $sql;
  28.            
  29.             $t_material  = $this->db->AssocList();
  30.            
  31.             foreach($t_material as $k => $v){
  32.            
  33.                 $this->id = $t_material[$k]['id'];
  34.                 $this->nombre = $t_material[$k]['nombre'];
  35.                 $this->referencia = $t_material[$k]['referencia'];
  36.                 $this->peso = $t_material[$k]['peso'];
  37.                 $this->tamano = $t_material[$k]['tamano'];
  38.             }
  39.            
  40.         }
  41.     }
  42.    
  43.     public function add($Idatos;)
  44.      {
  45.        
  46.         $this->nombre = $Idatos['nombre'];
  47.         $this->referencia = $Idatos['referencia'];
  48.         $this->peso = $Idatos['peso'];
  49.         $this->tamano = $Idatos['tamano'];
  50.  
  51.        
  52.         ;
  53.         $sql= "INSERT INTO material(nombre, referencia, peso, tamano)VALUES(".$this->nombre.", ".$this->referencia.", ".$this->peso.", ".$this->tamano.")" ;
  54.  
  55.         $this->db->query = $sql;
  56.        
  57.         $this->db->InsertData();
  58.        
  59.      }
  60.  
  61. }
  62.  
  63.  
  64. $material = new material(-1);
  65. $material->add($Idatos);
  #12 (permalink)  
Antiguo 11/06/2012, 12:07
 
Fecha de Ingreso: junio-2012
Ubicación: Argentina - Buenos Aires
Mensajes: 135
Antigüedad: 11 años, 10 meses
Puntos: 32
Respuesta: obtener todos los datos de una tabla

Si esta bien, pero te hago un par de observaciones.

En el constructor asignale un valor por default, por ejemplo -1 asi cuando creas un nuevo material no tenes que especificar nada mas que new Material()

Código PHP:
Ver original
  1. public function __construct($id_material = -1)

Despues el punto y coma no va en el metodo add

Código PHP:
Ver original
  1. add($Idatos;) //<- Este punto y coma no va, es error de sintaxis

Y por ultimo en la sentencia insert, recorda que los campos de texto van encerrados entre comillas.

Código PHP:
Ver original
  1. $sql = .. VALUES( '".$this->nombre."' ..

Despues creo que te deberia andar.

Saludos.
__________________
http://www.latinium.com.ar/
  #13 (permalink)  
Antiguo 11/06/2012, 15:07
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: obtener todos los datos de una tabla

pero si en el constructor pones esto

Código PHP:
Ver original
  1. public function __construct($id_material = -1)

cuando quiera consultar un material

Código PHP:
Ver original
  1. new material(13);

no me va agarrar el 13 si no el -1

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




La zona horaria es GMT -6. Ahora son las 02:41.