Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Pregunta de principiante...

Estas en el tema de Pregunta de principiante... en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos!!! Pues bien, resulta que por cosas del trabajo me toca aprender POO en Php, por lo que en estos dìas me la ...

  #1 (permalink)  
Antiguo 04/08/2007, 11:30
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Pregunta de principiante...

Hola a todos!!!

Pues bien, resulta que por cosas del trabajo me toca aprender POO en Php, por lo que en estos dìas me la he pasado estudiando, intentando entender ciertas cosas, y pues se pueden imaginar que ya me llegaron ciertas dudas.... Ojalà alguno de ustedes me pueda ayudar...

1. Para que sirve "this->"??, cuàl es la funcionalidad de esa instrucciòn??
2. De lo que he leìdo, hablan de "constructores", alguien me puede aclarar un poco mas ese concepto porfa??, y eso..., es obligaciòn declararlo?? o no es ncesaria su declaraciòn??

Estos dìas estarè dàndole duro a eso, pa' ver si en una semana al menos ya puedo hacer ejemplos sencillos..., entonces andarè molestàndolos...

Saludos y gracias de antemano!!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #2 (permalink)  
Antiguo 04/08/2007, 13:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

1.- $this-> te sirve para accesar a una propiedad de un objeto o para llamar a una funcion o metodo del objeto.

2.- Un constructor es eso, una funcion que es llamada de manera automatica al crear una nueva instancia de algun objeto, y su trabajo es ese, el construir el objeto.

Saludos.
  #3 (permalink)  
Antiguo 04/08/2007, 14:49
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: Pregunta de principiante...

Hola GatorV!

Gracias por tu respuesta...

Es obligatorio definir el constructor?? o no??

Saludos!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 04/08/2007, 19:00
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Hola de nuevo...

Pues sigo leyendo a cerca de POO en php5.

Ahora me surgìo otra duda, caules son los buenos hàbitos para programar OO?? A travès de la experiencia de ustedes, cuàles son las cosas que uno debe tener encuenta para lograr una POO lo mas limpia y sòlida posible??

Esto se los agradecerìa resto!!! . Quiero comenzar de la manera mas òptima posible...

Gracias de antemano!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 04/08/2007, 22:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

No es necesario definir el constructor, todo depende si necesitas que tu clase haga algo al construirse (como conectar a una base de datos, leer un archivo de configuracion, establecer algo, etc.), si no no es necesario el constructor.

Buenos habitos? eso es dificil, pero mejor te recomendaria que antes de adentrarte leas un buen libro de POO, no en PHP, pero en cualquier lenguaje (recomiendo Java) para que vayas aprendiendo lo que es la POO y despues te metas a implementarla en PHP5.

Saludos.
  #6 (permalink)  
Antiguo 05/08/2007, 09:25
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: Pregunta de principiante...

Hola GatorV... còmo vas??

Pues lo de leer un libro, por ahora me queda grave, quisiera hacerlo, pero el ultimatum es que en una semana deba programar lo mas parecido posible POO en php5. No sè si logre entender lo mas bàsico de aquì a eso, pero lo estoy intentando.

Ahora lo que necesito son ejemplos y ejercicios pràcticos..., algo que me ayude visualmente a entender...

Crees que en una semana, dàndole sin descansar, logre al menos entender POO??, logre lo màs bàsico??

Gracias de antemano...
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 05/08/2007, 11:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Creo es demasiado poco tiempo si quieres realmente hacer algo bien, POO abarca muchos temas, Poliformismo, Herencia, Patrones de Diseño, etc.

Programar "parecido" a POO ese termino no me parece el mas adecuado, y creo no deberias de aventarte a hacer un proyecto 100% en POO sin saber lo basico de lo que es programacion Orientada a Objetos.

Saludos.
  #8 (permalink)  
Antiguo 05/08/2007, 18:05
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: Pregunta de principiante...

Gracias GatorV ...

Sì sè q' en una semana no puedo lograr lo que es realmente POO, pero estoy dàndole de tal manera que pueda abarcar lo mas posible y bien aprendido en una semana... gracias por tu opiniòn

Estudiando y leyendo me surgieron las siguientes dudas... ojalà me puedan ayudar y dar una luz

1. Cuando uno programa las clases, debe hacer una archivo .php por clase??, o un solo archivo .php con todas las clases que se necesiten??

2. Los tutos que he leido, pues agradeciendo que me han ayudado a entender algunas cosas bàsicas, otras ni siquiera las toca, por ejemplo, còmo entro a definir las clases con una DB???, las tablas de mi DB, vendriàn siendo las clases?? , realmente no entiendo

Agradezco mucho cualquier luz que me puedan dar para poder entender esto de la POO..., vengo con un pensamiento estructurado de hace 6 años y cambiarlo por OO.... vaya que si da duro...
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 05/08/2007, 18:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

1.- Es mejor hacer una clase por archivo, asi solo incluyes las clases que necesitas.
2.- A que te refieres con definir clases con una DB? Para las tablas que sean clases necesitas leer el patron ActiveTable y ActiveRecord para que sepas como aplicarlas.

Saludos.
  #10 (permalink)  
Antiguo 05/08/2007, 18:32
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: Pregunta de principiante...

Hola GatorV, parece que el ùnico q' me pode cuidado eres tù, jejeje

Bueno, lo de la segunda pregunta es por que no sè como debo "pensar", "analizar", el como se utiliza con POO en php la relaciòn con las DB.

Es decir, estructurademante, simplemente se conecta, se hace la consulta y se recorre con un array(mysql_fetch_array) los registros afectados por la consulta...

En POO, como se hace??, me imagino que toca hacer una clase para la conexiòn con la DB, y??? ahì quedo...., no se que mas "hacer"...

Gracias de antemano
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #11 (permalink)  
Antiguo 05/08/2007, 20:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Esque ese es el problema, tambien lo puedes hacer asi con clases, pero te estarias limitando a solo programar estilo POO pero no estarias usando POO como se debe, es por eso que el tiempo para que aprendas es muy poco y yo creo si quieres hacer algo bien hecho debes de darle mucho mas tiempo, mas de 1 semana, POO es algo totalmente diferente a programar de forma estructurada.

Saludos.
  #12 (permalink)  
Antiguo 07/08/2007, 11:52
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Hola GatorV..., si realmente se que en una semana no puedo pretender aprender POO, pero creeme que si lo quiero aprender y ademàs debo .

En este momento ando haciendo unos ejemplos para ver como me va..., en cualquier momento escribo para ver si me pueden ayudar, pues la verdad no me tengo mucha confianza aùn...

Saludos!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 08/08/2007, 08:13
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Pregunta Re: Pregunta de principiante...

Hola de nuevo...

Pues seguì dàndole a esto de POO en php e hice lo siguiente, no sè si està correcto y si voy por buen camino...

Hice una clase "conexionDB.php":
Código PHP:
<?php
class conexionDB
{
    public 
$local,$user,$pass,$lenk,$db,$consulta,$resultado;
    
    public function 
__construct($var1,$var2,$var3,$var4)
    {
        
$this->local=$var1;
        
$this->user=$var2;
        
$this->pass=$var3;
        
$this->db=$var4;
        
$this->lank=0;
    }
    public function 
hacerConect()
    {
        
//conecto con Mysql
        
if(!($link=mysql_connect($this->local,$this->user,$this->pass)))
        {
            
$this->lank=1;
        }
        
//selecciono la DB
        
if(!mysql_select_db($this->db,$link))
        {
            
$this->lank=1;            
        }
    }
    public function 
getConect()
    {
        
//retorno la bandera de la conexión
        
return $this->lank;
    }
    function 
consultar($query
    {
        
//aquí se realizan las consultas a la base de datos
        
$this->consulta=mysql_query($query);
    }    
    
//obtener resultados de la consulta
    
function obtendatos()
    {
        
//aquí se obtienen los datos de la consulta
        
$this->resultado=mysql_fetch_array($this->consulta);
        return 
$this->resultado;
    }

}
?>
Y en "validalogin.php", pues la utilizo:
Código PHP:
<?php
function __autoload($class_name)
{
    require_once 
$class_name.'.php';
}

$login=$_POST[login];
$pass=$_POST[pass];
echo 
$_POST[login]."<br>";
echo 
$_POST[pass]."<br>";
$a=new conexionDB("localhost","root","","usuarios");
$a->hacerConect();
if(
$a->getConect()!=1)
{
    
//si la conexiòn ha tenido èxito...
        
$a->consultar("select * from usrios");
     do
    {
        echo 
$row['id_usrio']."<br>";
    }while(
$row=$a->obtendatos());
}
?>
Esto es lo poco que he logrado hacer y que funcione, pero la verdad no sè si lo estoy haciendo correctamente desde el punto de vista POO..., como dije funciona!!!, pero mi duda es si segùn la filosofìa POO lo estoy programando correctamente....

Gracias de antemano!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #14 (permalink)  
Antiguo 08/08/2007, 08:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Primero, no utilizes $_POST[login], si tienes PHP corriendo bajo E_STRICT te arrojara varios warnings, utiliza $_POST['login'].

Segundo, lo que estas haciendo es programando estilo PHP, y no esta mal, pero no estas utilizando al 100% todo el poder de OOP, es mucho mas amplio, y como te comentaba en un inicio es dificil que alcances a ver todos los patrones que existen pero si quieres seguir en esto te recomiendo leer el libro (no ahora):

Head First - Design Patterns

Te puedes dar una muy buena idea de como hacer un buen disenio en POO.

Tercero es recomendable que a todos los metodos de tus funciones les des una visibilidad, es decir a todos pon si son public, private o protected, no los dejes sin darles una visibilidad.

Respecto al disenio general de tu clase esta bien, todavia deberias de hondar en los temas de Patrones de Disenio, por la naturaleza de PHP es dificil programar al 100% OOP en algun lado tienes que meter codigo en procedimientos, pero podrias hacer algo asi:

Código PHP:
class Pagina {
        public static function 
main() {
                  
// Aqui todo el codigo que quieras manejar como el de validar login
        
}
}


Pagina::main(); // Aqui llamamos a la funcion para que funcione "todo" 
Saludos.
  #15 (permalink)  
Antiguo 08/08/2007, 08:35
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Exclamación Re: Pregunta de principiante...

Cita:
Iniciado por GatorV Ver Mensaje
Respecto al disenio general de tu clase esta bien, todavia deberias de hondar en los temas de Patrones de Disenio, por la naturaleza de PHP es dificil programar al 100% OOP en algun lado tienes que meter codigo en procedimientos, pero podrias hacer algo asi:

Código PHP:
class Pagina {
        public static function 
main() {
                  
// Aqui todo el codigo que quieras manejar como el de validar login
        
}
}


Pagina::main(); // Aqui llamamos a la funcion para que funcione "todo" 
Jejejeje, me acabas de dejar

Oseà que lo que me dices es que haga un mètodo dentro de la clase que maneje "tooooodo"??.

Gracias GatorV, por tu interès...
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #16 (permalink)  
Antiguo 08/08/2007, 14:51
Avatar de k4k4  
Fecha de Ingreso: junio-2007
Ubicación: Baja California, México
Mensajes: 120
Antigüedad: 16 años, 11 meses
Puntos: 6
Re: Pregunta de principiante...

Hola,

sin quererme poner como un experto en OOP, que no se supone que los datos de conexión a la bd deberían ser privados? xD

Una pregunta: cuál sería la ventaja/desventaja de conectarse a la bd en el método __construct ?

Una observación: la variable $this->lank debería contener el identificador de conexión a la base de datos, es decir, el valor regresado por mysql_connect (que actualmente esta en una variable local $link), no?

Me parece que va bien la discusión.


Saludos.
  #17 (permalink)  
Antiguo 08/08/2007, 15:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

La ventaja/desventaja es que si solo deseas crear el objeto o pasarlo por singleton, pero si no lo vas a usar, aseguras que el crear el objeto sea rapido, y no gastas recursos que no vas a utilizar.

Saludos.

PD Respecto a tu observacion es correcta, no esta guardando el enlace a la base de datos si no un entero jeje.
  #18 (permalink)  
Antiguo 08/08/2007, 15:25
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: Pregunta de principiante...

Interesante, yo ando igual aprendiendo OOP, este post esta super.. en caso he leido "un tro" (muchisimo) de oop , pero soy del tipo de gente que hasta que no logra hacer algo que funcione todo se queda guardado en la cabeza y solo se explicarlo si me lo preguntan.

He leido OOP desde libros de Java, etc., pero como dije, ahora es que vine hacer mi primera clase para conectar mysql y empiezo a entender, pero como dice GatorV, tenemos que leer sobre patrones, de lo contrario creo que duraremos mucho para manejar oop, puesto que esto es un concepto el cual se le aplica a cualquier lenguaje oop....

Aunque difiero un poquito de GatorV sobre "leer antes de meterte en un proyecto", creo que es necesario ir leyendo y desarrollando algo, claro, algo que sea nuestro, en mi caso, tengo varios proyectos personales, no lo he iniciado por que quiero romper el paradigma este del oop y he decidido leer e ir desarrollando, aunque luego cuando este mas maduro en esto empiece a modificar lo ya hecho...

Sigan con el post que ta bueno :)

Ahora a buscar el libro que recomiendo GatorV
__________________
www.dataautos.com
  #19 (permalink)  
Antiguo 08/08/2007, 15:36
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 3 meses
Puntos: 6
Re: Pregunta de principiante...

aqui microsoft tiene algo sobre Design Patterns

http://msdn.microsoft.com/practices
__________________
www.dataautos.com
  #20 (permalink)  
Antiguo 13/08/2007, 09:33
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Hola de nuevo!!

Pues bien, la empresa trabaja con php4, y por ende no puedo aprovechar las caracterìsticas propias de php5

Respecto a esto me surgiò una pregunta: php4 soporta public?, private?, protected? Creo que no...

Gracias de antemano!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #21 (permalink)  
Antiguo 13/08/2007, 09:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

No, en PHP4 no hay visibilidad de variables ni de metodos, todos son publicos y se pueden accesar de manera estatica o no estatica.

Las variables se declaran con var:
Código PHP:
class Foo {
      var 
$algo;

      function 
Foo($algo) {
            
$this->algo $algo;
      }

Saludos.
  #22 (permalink)  
Antiguo 13/08/2007, 09:50
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Listo GatorV!!! Muchas gracias!

Luego posteo algo mas
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #23 (permalink)  
Antiguo 13/08/2007, 10:35
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Re: Pregunta de principiante...

Hola de nuevo!!!

Pues bien, he leìdo por ahì o mejor he visto por ahì que el ciclo repetitivo que mas se usa en objetos es "foreach", yo he venido usando el do{}while(); si tengo este còdigo asì:

Código PHP:
<?php
    
do
    {
?>
        <li><a href="secciones/lecturas/articulo.php?art=<?php echo $row[0]?>" class="lonks"><?php echo $row[2]?></a></li>
<?php
    
}while($row=$a->obtenerDatos());
?>
Còmo deberìa implementarlo con foreach??? Es que no ni idea como serìa...

Gracias!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #24 (permalink)  
Antiguo 13/08/2007, 10:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

En foreach es mas complicado, ya que en PHP4 los objetos no se devuelven por referencia asi que te recomiendo te quedes en el do/while o un while normal.

Saludos.
  #25 (permalink)  
Antiguo 13/08/2007, 10:47
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Ok GatorV!!! Cogido el dato!

Pero de todas formas me podrìas guiar de como hacerlo en php5?? Es ya modo personal... Gracias!!!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #26 (permalink)  
Antiguo 13/08/2007, 11:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Puedes hacer esto:
Código PHP:
foreach( $db->getRow() as $row ) {
      
var_dump$row );

Saludos.
  #27 (permalink)  
Antiguo 13/08/2007, 13:19
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
Re: Pregunta de principiante...

Listo GatorV! Muchas gracias!

Ahora, me surgiò la siguiente duda...

Tengo la siguiente clase:
Código PHP:
<?php
class conexionDB
{
    var 
$local,$user,$pass,$lenk,$db,$consulta,$resultado;
        
    function 
conexionDB($var1,$var2,$var3,$var4)
    {
        
$this->local=$var1;
        
$this->user=$var2;
        
$this->pass=$var3;
        
$this->db=$var4;
        
$this->lank=1;
    }
    function 
hacerConnect()
    {
        
//conecto con Mysql
        
if(!($link=mysql_connect($this->local,$this->user,$this->pass)))
        {
            
$this->lank=0;
        }
        
//selecciono la DB
        
if(!mysql_select_db($this->db,$link))
        {
            
$this->lank=0;            
        }
    }
    function 
getConnect()
    {
        
//retorno la bandera de la conexión
        
return $this->lank;
    }
    function 
consultar($query
    {
        
//aquí se realizan las consultas a la base de datos
        
$this->consulta=mysql_query($query);
    }    
    function 
obtenerDatos()
    {
        
//aquí se obtienen los datos de la consulta
        
$this->resultado=mysql_fetch_array($this->consulta);
        return 
$this->resultado;
    }
}
?>
En articulo.php, la utilizo para realizar las siguientes consultas:
Código PHP:
$arti=$_GET['art'];
$a=new conexionDB("localhost","root","","db_blogcarxl");
$a->hacerConnect();
$link=$a->getConnect();
if(
$link)
{
    
$a->consultar("select * from articulos where id_artclo='$arti'");
    
$row=$a->obtenerDatos();
    
$a->consultar("select * from articulos order by id_artclo desc limit 6");
    
$raw=$a->obtenerDatos();
    
$a->consultar("select * from comentarios,usuarios where id_artclo='$arti' and usuarios.id_usrio=comentarios.id_usrio");
    
$ruw=$a->obtenerDatos();
    
$a->consultar("select count(*) from comentarios where id_artclo='$arti'");
    
$num=$a->obtenerDatos();

Es correcto utilizar de esa manera el objeto "$a"???. Es que resulta que asì como està no sirven las dos ùltimas consultas, la pàgina funciona bien solo permitiendo las dos primeras consultas, pareciera que dichas consultas(las ùltimas) afectaran las primeras, porque cuando las comentareo, vuelve y funcionan las primeras. Y por esto me gustarìa saber si debo crear otro objeto? o que estarè haciendo mal?

El còdigo de arriba es solo una parte de lo que es realmente si lo necesitan todo me avisan para ponerlo vale??

Gracias de antemano
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #28 (permalink)  
Antiguo 13/08/2007, 14:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Que es el error que te da? o porque dices que no te funcionan?

Saludos.
  #29 (permalink)  
Antiguo 13/08/2007, 14:37
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 9 meses
Puntos: 70
De acuerdo Re: Pregunta de principiante...

Hola de nuevo GatorV

Pues veràs, asì como està el còdigo pareciera que todo funciona, pero la verdad es que no lo hace como debiera, te explico mejor, no son errores sintàcticos, son errores parece que lògicos:

Cuando comentareo, estas lìneas, las dos ùltimas, segùn lo posteado mas arriba:
Código PHP:
/*$a->consultar("select * from comentarios,usuarios where id_artclo='$arti' and usuarios.id_usrio=comentarios.id_usrio");
    $ruw=$a->obtenerDatos();
    $a->consultar("select count(*) from comentarios where id_artclo='$arti'");
    $num=$a->obtenerDatos();*/ 
Hace lo que me gustarìa que hiciera, osea me deja ver los artìculos mas recientes o mas nuevos, hasta ahì bien. Pero en el momento que las descomentareo:
Código PHP:
$a->consultar("select * from comentarios,usuarios where id_artclo='$arti' and usuarios.id_usrio=comentarios.id_usrio");
    
$ruw=$a->obtenerDatos();
    
$a->consultar("select count(*) from comentarios where id_artclo='$arti'");
    
$num=$a->obtenerDatos(); 
Ya no me aparece lo que si me aparecìa antes, osea lo de los ùltimos articulos..., pareciera que esas dos consultas(las que comentareo), afectan las dos primeras... he ahì mi pregunta, serà que me toca crear otro objeto para esas dos últimas consultas??

Si sirve de algo, asì es como las utilizo:
Código PHP:
$arti=$_GET['art'];
$a=new conexionDB("localhost","root","","db_blogcarxl");
$a->hacerConnect();
$link=$a->getConnect();
if($link)
{
    $a->consultar("select * from articulos where id_artclo='$arti'");
    $row=$a->obtenerDatos();
    $a->consultar("select * from articulos order by id_artclo desc limit 6");
    $raw=$a->obtenerDatos();
    $a->consultar("select * from comentarios,usuarios where id_artclo='$arti' and usuarios.id_usrio=comentarios.id_usrio");
    $ruw=$a->obtenerDatos();
    $a->consultar("select count(*) from comentarios where id_artclo='$arti'");
    $num=$a->obtenerDatos();
}
.
.
.
<?php
    
do
    {
?>
        <li><a href="articulo.php?art=<?php echo $raw[0]?>" class="lonks"><?php echo $raw[2]?></a></li>
<?php
    
}while($raw=$a->obtenerDatos());
?>
.
.
.
<h2><?php echo $row[2]?></h2>
<?php echo $row[3]?>
.
.
.
<table width="100%">
<?php
    
do
    {
?>
            <tr bgcolor="#999999">
                <td align="left">Por: <?php echo $ruw[9];?></td>
                 <td align="right"><?php echo "Fecha: ".$fecha[2]." de ".$mes." de ".$fecha[0]?></td>
                    </tr>                    
                    <tr>
                        <td style="color:#666666" colspan="2"><?php echo $ruw[3]?></td>
                    </tr>
                    <tr><td><br /></td></tr>
<?php
         
}while($ruw=$a->obtenerDatos());          
?>
       </table>
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #30 (permalink)  
Antiguo 13/08/2007, 14:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Pregunta de principiante...

Asi es en efecto es un error logico, ya que en tu clase tu por cada ->consulta() reescribes el valor de $this->result por ende no puedes hacer con tu clase muchas consultas multiples, tienes que hacer 1 consulta y descargar todos los resultados, hacer otra consulta y asi.

Es un error comun en disenios de tu clase DB como la que hiciste, y para remediarlo lo comun es que cada metodo Consulta (o Query) te devuelva un objeto Recordset donde puedas ciclar, asi aislas el problema y puedes guardar y enviar Querys multiples.

Saludos.
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 05:32.