Ir al contenido


Foto

Problema con clase PHP


  • Por favor identifícate para responder
3 respuestas en este tema

#1 jolupeza

jolupeza

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 20 enero 2012 - 10:42

Buenos días ante todo gracias por su ayuda.

Miren he creado una clase la cual interactua con la base de datos.
// Método para obtener los 3 últimos libros ingresados

class Book{
        public function getLastBook(){
            $sql = "SELECT count(*) as cuantos FROM books";
            $res = Conectar::con()->query($sql);
            $total;
            if($reg = $res->fetch_array()){
                $total = $reg['cuantos'];
            }
            $total = $total-3;
            $sql = "SELECT isbn, title, bookdes, price, catid FROM books limit $total, 4";
            $res = Conectar::con()->query($sql);
            if(!$res){
                return FALSE;
            }
            if($res->num_rows == 0){
                return FALSE;
            }
            while($reg = $res->fetch_assoc()){
                $this->books[] = $reg;
            }
            return $this->books;
            $reg->free();
        }
}

Lo que pasa es que en la pagina donde interactuo con esta clase creo un objeto de esta clase.
La primera llamada trae los datos correctamente.

Cuando vuelvo a utilizar el objeto para llamar otro método me arrastra los datos almacenados en la anterior método. Es por eso que puse $reg->free().

Lo que hice es crear varios objetos de esta clase e ir llamando cada uno con un método diferente, lo que me parece que no esta bien.
Que es lo que puedo estar haciendo mal.

<?php
                $b = new Book();
                $bookmas = $b->getMasVendido();
                if(!is_array($bookmas)){
            ?>
            <p>No hay libro m&aacute;s vendido actualmente.</p>
            <?php
                }else{
                    $imagen = "images/".$bookmas[0]['isbn'].".jpg";
                    if(file_exists($imagen)){
            ?>
                <img src="<?php echo $imagen; ?>" width="66px" height="88" alt="<?php echo $bookmas[0]['title']; ?>" />
            <?php 
                    }else{
            ?>
            <img src="<?php echo $base->getBaseURL(); ?>images/no_picture.jpg" width="66px" height="88" alt="<?php echo $bookmas[0]['title']; ?>" />
            <?php
                    }
            ?>
            <h4><?php echo $bookmas[0]['title']; ?></h4>
            <?php
                    $autores = $b->getNameAuthor($bookmas[0]['isbn']);
                    if(is_array($autores)){
                        for($i=0; $i<sizeof($autores); $i++){
            ?>
            <h6><?php echo $autores[$i]['autor']; ?></h6>
            <?php
                        }
                    }else{
            ?>
            <h6>An&oacute;nimo</h6>
            <?php
                    }
            ?>
            <h7>ISBN: <?php echo $bookmas[0]['isbn']; ?></h7>           
            <div class="mas_info"><a href="#" title="Leer m&aacute;s">> Información completa</a></div>
            <span>S/. <?php echo $bookmas[0]['price']; ?></span>
            <div class="add_carrito">
                <a href="" title="">añadir al carrito</a>
            </div>
            <?php
                }
                unset($b);
            ?>


  • 0

#2 lisper

lisper

    Newbie

  • Miembros
  • Pip
  • 8 mensajes
  • LocationSantiago Chile

Escrito 20 enero 2012 - 12:37

No entiendo bien tu problema, tienes un error o quieres optimizar el código que escribiste??????----
  • 0

#3 jolupeza

jolupeza

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 23 enero 2012 - 07:27

Bueno lo que me pasa es que he creado una clase la que interactua con la base de datos.

Y en mi vista declaro un objeto de esta clase. Por ejemplo me trae los datos de todos los libros que tengo que mi tabla Books.
Lo que me ocurre es lo siguiente:
- Cuando llamo por primera vez un metodo de esta clase me trae los datos correctamente.
- Llamo por segunda vez a otro método utilizando el mismo objeto tambien los trae.
- Pero al llamar por tercera vez a otro método ya no me trabaja.

Primer método que utilizo:

public function getMasVendido(){
            $sql = "SELECT sum( oi.quantity ), b.title, b.price, b.publisher_id, b.catid, o.date, o.order_status, oi.isbn "
                  ."FROM books b, order_items oi, orders o "
                  ."WHERE b.isbn = oi.isbn "
                  ."AND oi.orderid = o.orderid "
                  ."AND o.date > date_add( now( ) , INTERVAL -7 DAY) "
                  ."GROUP BY b.title "
                  ."LIMIT 0 , 1";
            $res = Conectar::con()->query($sql);
            if(!$res){
                return FALSE;
            }
            if($res->num_rows == 0){
                return FALSE;
            }
            if($reg = $res->fetch_array()){
                $this->books[] = $reg;
            }
            $res->free();
            return $this->books;
        }


Segundo método que utilizo:

public function getNameAuthor($isbn){
            $sql = "SELECT concat( a.nombres, ' ', a.ape_paterno, ' ', a.ape_materno ) AS autor "
                  ."FROM books_by_author ba, authors a "
                  ."WHERE ba.author_id = a.author_id "
                  ."AND ba.isbn =".$isbn;
            $res = Conectar::con()->query($sql);
            if(!$res){
                return FALSE;
            }
            if($res->num_rows == 0){
                return FALSE;
            }
            while($reg = $res->fetch_assoc()){
                $this->books[] = $reg;                       
            }
            $res->free();
            return $this->books;
        }


Hasta aquí funciona correctamente.

Tercer método:

public function getNamePublisher($publisher_id){
            $sql = "select publisher from publisher "
                  ."where publisher_id = ".$publisher_id;
            $res = Conectar::con()->query($sql);
            if(!$res){
                return FALSE;
            }
            if($res->num_rows == 0){
                return FALSE;
            }
            if($reg = $res->fetch_array()){
                $this->books[] = $reg;
            }
            $res->free();
            return $this->books;
        }


Aquí ya no me trabaja.

En mi vista:

$book = new Book();

$vendido = $book->getMasVendido();

$nameAuthor = $book->getNameAuthor($vendido[0]['isbn']);


Hasta ahí funciona.

$namePublisher = $book->getNamePublisher($vendido[0]['publisher_id']);


Aquí ya no me trae es como si siguiera cargando los datos de $vendido.

He colocado $namePublisher[0]['catname'] y no me muestra nada, pero si hago $namePublisher[0]['publisher_id'] me muestra el id del
publisher pero no me debería mostrar ya que en mi consulta a la tabla solo hago select a publisher y no a publisher_id, por eso digo que me sigue arrastrando los datos de la primera variable $vendido.



  • 0

#4 Elmasterivan

Elmasterivan

    Newbie

  • Miembros
  • Pip
  • 2 mensajes
  • LocationSanto Domingo, Republica Dominicana

Escrito 25 enero 2012 - 12:12

Si solo quieres mostrar los 3 ultimos libros ingresados osea registro porq no solo usas una consulta con limit 0,3 ??
  • 0




IP.Board spam blocked by CleanTalk.