Autor Tema: [Tutorial] Clase para mostrar datos de una tabla MySQL  (Leído 4201 veces)

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
[Tutorial] Clase para mostrar datos de una tabla MySQL
« en: 11 de Mayo de 2010, 02:20:04 am »
¡Hola PHPeros!

Bueno, como ahora estoy desarrollando un proyecto de una comunidad virtual (TribuAvatar), me he visto en la necesidad de crear una clase para mostrar los datos de la tabla "usuarios". Como la pude hacer, y por lo visto me ha quedado bien, es corta y sencilla, les paso el código para ahorrarles futuros problemas.

<?php
class usuario
{
	
# Declaro las variables que serán la consulta a la base de datos y el resultado del mysql_fetch_array
	
private 
$consulta;
	
private 
$fetch;
	

	
# Interpreto y asigno los valores a las variables pasadas por los parámetros de la clase
	
function 
__construct($xIdusuario)
	
{
	
	
$this->consulta mysql_query("SELECT * FROM usuarios WHERE id = &#39;".$xIdusuario."&#39;");
	
	
$this->fetch mysql_fetch_array($this->consulta);
	
}
	

	
# Y con esta función muestro los datos
	
function 
mostrar($xDato)
	
{
	
	
return 
$this->fetch[$xDato];
	
}
}
?>


Ahora bien, para mostrar los datos lo hago desde la siguiente manera:

<?php
# Llamo a la clase con los datos del usuario que tiene el ID #1
$usuario = new usuario(1);

# Ahora, simplemente muestro los datos
echo "Nombre ".$usuario->mostrar("nombre")."<br>";
echo 
"Correo ".$usuario->mostrar("correo");

# Y se pueden seguir mostrando más columnas...
?>


Ahora vamos con algo un poco más complejo; cambiar de forma dinámica el nombre de la tabla a mostrar, así como elegir parámetros, etcétera.

class consultarTabla
{
	
# Declaro las variables que serán la consulta a la base de datos y el resultado del mysql_fetch_array
	
private 
$consulta;
	
private 
$fetch;
	

	
# Interpreto los datos enviados por los parámetros de la clase
	
function 
__construct($xTabla$xParametros)
	
{
	
	
$this->consulta mysql_query("SELECT * FROM ".$xTabla." ".$xParametros."");
	

	
	
$this->fetch mysql_fetch_array($this->consulta);
	
}
	

	
# Y con esta función muestro los datos
	
function 
mostrar($xDato)
	
{
	
	
return 
$this->fetch[$xDato];
	
}
}
?>


Si no se quieren especificar los parámetros para la consulta (WHERE X=Y, etc...) se debe poner un "@" al principio del llamado a la clase, esto para que no muestre el error de "Missing Argument".

<?php
$usuarios 
= @new consultarTabla("usuarios");
echo 
$usuarios->mostrar("usuario");
?>


Si se quisiera consultar la tabla con argumentos:

<?php
$usuarios 
= new consultarTabla("usuarios","WHERE id = &#39;1&#39;");
echo 
$usuarios->mostrar("usuario");
?>



Eso es todo, espero que les sirva, cualquier duda que tengan me la ponen acá mismo (como una respuesta al post) ;).
Saludos.
- Moderador de PHP


Comunidad PHPeros

[Tutorial] Clase para mostrar datos de una tabla MySQL
« en: 11 de Mayo de 2010, 02:20:04 am »

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #1 en: 11 de Mayo de 2010, 15:37:12 pm »
En la primera clase, yo usaría eval para que las variables fueran $clase->variable, por comodidad simplemente.

Y en la segunda... me parece un desperdicio una clase solo para un SELECT, al menos para cualquier query, vale...

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #2 en: 11 de Mayo de 2010, 19:48:57 pm »
Citar
En la primera clase, yo usaría eval para que las variables fueran $clase->variable, por comodidad simplemente.
Ya habíamos probado con el eval y no funcionaba como esperábamos, ¿te acuerdas?

Citar
Y en la segunda... me parece un desperdicio una clase solo para un SELECT, al menos para cualquier query, vale...
Pues yo veo más simple y rápido hacer:

$noticia = new consultarTabla("noticias","WHERE id = &#39;1&#39;");
echo 
$noticia->mostrar("titulo");


A hacer esto:

$sql mysql_query("SELECT * FROM noticias WHERE id = &#39;1&#39;");
$sql mysql_fetch_array($sql);

echo 
$row["titulo"];


Pero en fin, como te dije ese es mi punto de vista, y obviamente, cada programador tiene un punto de vista más o menos diferente al de los otros xD.
- Moderador de PHP


Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #3 en: 11 de Mayo de 2010, 21:29:11 pm »
Pero yo prefiero hacer
new consulta("SELECT..", "UPDATE")...
que new select("tabla", "algo"); new update("tabla", "algo");

Y el eval... con una @ se solucionaba :P

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #4 en: 11 de Mayo de 2010, 22:55:07 pm »
¿A que os referís con usar eval?
No se si os referís a llamar directamente desde fuera de la clase a las variables así:
echo $noticia->fetch[&#39;titulo&#39;];
En este caso no necesitas eval, simplemente colocar a $fetch como public, aunque no te lo recomiendo.
En POO existe el principio de abstracción (busca un poco de información sobre él si quieres), que dice que una clase debe definirse a si misma y debe contener todos los métodos y variables que necesita, y ella misma se modificará y se adaptará, exepto en los casos en que necesita estrictamente pasarle como parametro otra clase o algo similar.
Normalmente lo que se suele hacer es un método Get (como en tu caso, mostrar) y un metodo Set para cada variable.

Tu clase esta bien, aunque se puede mejorar, sobre todo la forma de plantearla.

Normalmente, y como truco, la clase es un sustantivo, las variables son adjetivos, propiedades o cualidades, o almacenadores para guardar algo, y los metodos son las acciones que ese sustantivo puede realizar. Por eso no te aconsejo crear una clase para cada función en la BD como haces. Así acabarás teniendo class consultarTabla, class escribirTabla, class  contarTabla... Como ves todas tienen en común el hecho de que son acciones que se hacen en una BD, y como acciones que son, te recomiendo que sean métodos, y no clases. La clase sería la propia base de datos.

Por ejemplo:

class MySQL {
   private 
$con;
   private 
$fetch;

   function 
__construct() { // Aqui conectas con la BD y lo guardas en $con }

   
public function consultar($tabla$sentencia 0) {
      
// En pseudocodigo:
      // Si $sentencia = 0
           // Hacer mysql_query("SELECT * FROM ".$tabla, $con);
      // Si $sentencia != 0
           // Hacer  mysql_query("SELECT * FROM ".$tabla." ".$sentencia, $con);
     // Guardar resultado en $fetch
	

   
}

   public function 
mostrar($que) {
       return 
$this->fetch[$que];
   }

   public function 
insertar($queinserto) { // Con esta función insertas en la bd... }
}


No se si me explico, son formas diferentes de definir clases. Si la defines como lo estabas haciendo acabarás con muchas clases pequeñitas, y con esto consigues una sola clase mas funcional.

Acuérdate:
- Sustantivos -> Clases
- Adjetivos, propiedades, contenedores -> Variables
- Acciones que puede realizar el sustantivo -> Métodos

Espero haberte ayudado y que me hayas entendido :)
Saludos!
« Última modificación: 13 de Mayo de 2010, 09:38:20 am por TLX »
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #5 en: 11 de Mayo de 2010, 23:20:44 pm »
Por eval me refiero a poder usar $clase->nombre, $clase->email, etc... por simple vageza :P

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #6 en: 11 de Mayo de 2010, 23:23:52 pm »
No entiendo que tiene que ver eval con eso, no lo capto jaja

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Focux

  • PHPero Master
  • ******
  • Mensajes: 1.010
  • Karma: 22
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #7 en: 11 de Mayo de 2010, 23:26:12 pm »
Creo quiere decir que en vez de $this->fetch[algo]; sea $this->alo
Mixtiqueros.net

<?PHP
define
(_miNombre, &#39;Focux&#39;);
if(_miNombre == &#39;Focux&#39;): printf(&#39;%s es un programador avanzado&#39;, _miNombre); else: printf(&#39;Tu no eres %s&#39;, _miNombre); endif;
?>

Desconectado westwest

  • PHPero Master
  • ******
  • Mensajes: 2.837
  • Karma: 104
  • Sexo: Masculino
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #8 en: 11 de Mayo de 2010, 23:28:22 pm »
quedaría algo asi

class usuario {
function 
__construct($id) {
$query query...
$fetch mysql_fetch_assoc($query);
foreach(
$fetch as $key=>$value) {
@eval(&
#39;$this->&#39;.$key.&#39; = (&#39;.gettype($value).&#39;) \&#39;&#39;.$value.&#39;\&#39;;&#39;);
}
}
}

Y así usaríamos
$usuario = new usuario(1);
echo 'Hola '.$usuario->nick;

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #9 en: 12 de Mayo de 2010, 00:01:08 am »
Entiendo, no me parece mala idea, pero aún así ya te digo, yo soy mas partidario de usar un método Get para mostrar variables, y además de esa forma no tendrías en la declaración de la clase las variables que coge de la BD.

Pero aún así, no hay duda de que lo que propones es una opción muy interesante y con utilidad, no la había pensado, gracias :)

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #10 en: 12 de Mayo de 2010, 03:01:01 am »
Se me olvidó la otra vez preguntar sobre esto...
Que significa el '->' ese que usan siempre con $this-> ??
No lo pillo bien, gracias de antemano..

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #11 en: 12 de Mayo de 2010, 16:29:13 pm »
A ver, la "variable" (no se si llamarla así) $this hace referencia al propio objeto que estamos ejecutando.
Para comprender esto es necesario saber diferenciar clase y objeto, pues aunque pueda paracerlo, no son la misma cosa.

Izquierda->Derecha quiere decir que Derecha pertenece a Izquierda, por lo tanto $this->nombre hace referencia a la variable nombre del objeto donde ponemos esa sentencia. $alumno->mostrar() hace referencia el método mostrar del objeto $alumno.

No se si ha quedado claro,
Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #12 en: 13 de Mayo de 2010, 03:15:21 am »
A ver, la "variable" (no se si llamarla así) $this hace referencia al propio objeto que estamos ejecutando.
Para comprender esto es necesario saber diferenciar clase y objeto, pues aunque pueda paracerlo, no son la misma cosa.

Izquierda->Derecha quiere decir que Derecha pertenece a Izquierda, por lo tanto $this->nombre hace referencia a la variable nombre del objeto donde ponemos esa sentencia. $alumno->mostrar() hace referencia el método mostrar del objeto $alumno.

No se si ha quedado claro,
Saludos!
Lo que pasa es que yo estoy estudiando la POO de manera teórica sin aplicar ningún lenguaje, entonces se me hacía raro.
Creo que ya sé a qué te refieres, por ejemplo estamos dando Algoritmos en POO, y en el programa principal aparece:

obj_nombre.pasa_valor(val1,val2), por decir un ejemplo. Entonces ese -> representaría al punto y el $this al obj_nombre (que le puse ese nombre para identificarlo nada más xD)...

Se me hace muy aburrido estudiar algoritmos y eso sin poder aplicarlo a ningún lenguaje de programación, pero bueno es la metodología que está aplicando mi profesora... Muchas gracias TLX :D

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[Tutorial] Clase para mostrar datos de una tabla MySQL
« Respuesta #13 en: 13 de Mayo de 2010, 09:34:43 am »
Sin duda lo mejor es primero estudiar la metodología y la teoría de POO.
Luego lo agradecerás a la hora de ponerte a practicar, ya lo verás.

Y si, -> en PHP es equivalente a . en Java, por ejemplo. Recuerda que todos los carácteres especiales dependen del lenguaje que utilices, así que, aunque normalmente suelen ser iguales o parecidos, en algunos lenguajes cambia.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es