Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 15-may-2008, 20:00   #1 (permalink)
vmac179 ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Ubicación: /home/victor
Mensajes: 45
Idea Problemas paginación postgres

Hola que tal bueno con mi hermano estamos desarrollando un sistema de gestión de socios para un club de tenis y tenemos un problema con una paginación bueno les muestro el codigo:

index.php
Código PHP:
<?

// Obtenemos la página actual, por el método que más nos guste

// Por defecto, la página se propaga por la variable $pagina

$pagina $HTTP_GET_VARS["pagina"];



// Incluimos la Clase Paginado

include("class.pag.php");

$conecta ="host=localhost port=5432 user=user password=pass dbname=club";

$cc=pg_connect($conecta);



$rs = new paginado($cc); // instanciamos un objeto

$rs->pagina($pagina); // Le indicamos en que página estamos - 1 por defecto

$rs->porPagina(5); // Le decimos cuantos registros por página queremos - 20 por defecto

$rs->propagar("forum"); // Le decimos las variables que queremos propagar en los links

if(!$rs->query("SELECT * FROM socios")) // Y ejecutamos nuestra consulta.

{

    die( 
$rs->error() ); // Si Query devolvió falso, hubo un error y lo mostramos.

}

echo 
"Mostrando ".$rs->desde()." - ".$rs->hasta()." de un total de ".$rs->total()."<br>";

// Recorremos todos los resultados y los mostramos.

while($row $rs->obtenerArray())

{

    echo 
$row["id_socios"].", ".$row["nombresocio"]."<br>";

  
//  echo "Email : ".$row["emailsocio"];

    

// while

// Finalmente mostramos los medios para la navegación entre los resultados.

echo $rs->anterior()." - ".$rs->nroPaginas()." - ".$rs->siguiente();

?>
class.pag.php
Código PHP:
<?php



/** 

 * Clase Paginado

 *  

 * Clase que permite la consulta a bases de datos

 * mientras que ofrece un sistema de paginado y 

 * navegación de resultados de manera automática.

 *

 * @author Webstudio <ws2000@web-studio.com.ar>

 * @version 0.1

 **/

class paginado

{



    var 
$_conn;

    var 
$_error;

    var 
$_pagina;

    var 
$_porPagina 20;

    var 
$_query;

    var 
$_rs;

    var 
$_total;

    var 
$_totalPaginas;

    var 
$_registros;

    var 
$_siguiente "Siguiente >";

    var 
$_anterior "< Anterior";

    function 
paginado($Conn)

    {

        
$this->conn($Conn);

    } 
// function

    
function conn()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_conn func_get_arg(0);

            break;

            default:

                return 
$this->_conn;

            break;

        }

    } 
// function

    
function error()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_error func_get_arg(0);

            break;

            default:

                return 
$this->_error;

            break;

        }

    } 
// function

    
function pagina()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_pagina func_get_arg(0);

                
$this->_pagina = empty($this->_pagina)?1:$this->_pagina;

            break;

            default:

                return 
$this->_pagina;

            break;

        }

    } 
// function



    
function porPagina()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_porPagina func_get_arg(0);

            break;

            default:

                return 
$this->_porPagina;

            break;

        }

    } 
// function

    

    
function total()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_total func_get_arg(0);

            break;

            default:

                return 
$this->_total;

            break;

        }

    } 
// function

    

    
function totalPaginas()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_totalPaginas func_get_arg(0);

            break;

            default:

                return 
$this->_totalPaginas;

            break;

        }

    } 
// function

    

    
function rs()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_rs func_get_arg(0);

                if(!
$this->_rs)

                {

                    return 
false;

                }
// Fin If

                
return true;

            break;

            default:

                return 
$this->_rs;

            break;

        }

    } 
// function

    

    
function registros()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_registros func_get_arg(0);

            break;

            default:

                return 
$this->_registros;

            break;

        }

    } 
// function



    
function desde()

    {

        return ((
$this->pagina()-1)*$this->porPagina())+1;

    } 
// function

    

    
function hasta()

    {

        return (
$this->desde()-1)+$this->registros();

    } 
// function

    

    
function query($query)

    {

        
// Primero modificamos el query para averiguar la cantidad total

        // de registros que devuelve el query.

        
$query_count eregi_replace("select (.*) from""SELECT COUNT(*) FROM",$query);

        if(!
$this->rs(@pg_query($this->conn(),$query_count) ))

        {

            
$this->error("Ocurrió un error al ejecutar el query <i><b>\"$query_count\"</b></i>. La base dijo : <b>".pg_result_error()."</b>.");

            return 
false;

        }
// Fin If

        
$this->total(pg_query($this->rs(),0));

        
$this->totalPaginas(ceil($this->total() / $this->porPagina()));



        
// Comprobamos que no se intenta acceder a una página que no existe.

        
if( $this->pagina() > $this->totalPaginas() )

        {

            
$this->error("No exite la página ".$this->pagina()." de resutados. Hay solo un total de ".$this->totalPaginas());

            return 
false;

        }
// Fin If



        // Ahora modificamos el Query del usuario, para poder agregarle

        // los límites para realizar la paginación

        
$query .= " LIMIT ".($this->desde()-1).",".$this->porPagina();

        if(!
$this->rs(@pg_query($this->conn(),$query)))

        {

            
$this->error("Ocurrió un error al ejecutar el query \"$query\". La base dijo : ".pg_result_error());

            return 
false;

        }
// Fin If

        
$this->registros(   pg_num_rows($this->rs()));

        return 
true;

    } 
// function



    
function obtenerArray()

    {

        return   
pg_fetch_array($this->rs());

    } 
// function



    
function siguiente()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_siguiente func_get_arg(0);

            default:

                if(
$this->hasta() < $this->total())

                {

                    return 
"<a href=\"?pagina=".($this->pagina()+1).$this->propagar()."\">".$this->_siguiente."</a>";

                }
// Fin If

            
break;

        }

    } 
// function    

    



    
function anterior()

    {

        switch (
func_num_args())

        {

            case 
1:

                
$this->_anterior func_get_arg(0);

            default:

                if(
$this->pagina() != 1)

                {

                    return 
"<a href=\"?pagina=".($this->pagina()-1).$this->propagar()."\">".$this->_anterior."</a>";

                }
// Fin If

            
break;

        }

    } 
// function

    



    
function nroPaginas()

    {

        for(
$i 1$i <= $this->totalPaginas() ; $i++)

        {

            
$temp[$i] = "<a href=\"?pagina=$i".$this->propagar()."\">$i</a>";

        } 
// for

        
$temp[$this->pagina()] = "<b>".$this->pagina()."</b>";

        return 
implode(" | "$temp);

    } 
// function

    



    
function propagar()

    {

        switch(
func_num_args()){

            case 
0

                foreach(
$this->_variables as $var)

          
//          $ret.= "&$var=".$GLOBALS[$var];

                
return $ret;

                break;

            default:

                for(
$i 0$i func_num_args(); $i++)

                {

                    
$this->_variables[] = func_get_arg($i);

                } 
// for

                
break;

        } 
// switch

    
// function





// end of class

?>
Su ayuda sera muy bien recibida de ante mano muchas gracias
vmac179 está desconectado   Responder Citando
Antiguo 15-may-2008, 20:44   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.600
Respuesta: Problemas paginación postgres

Hola vmac179,

¿Precisamente que error tienes?

Saludos
__________________
Blog Web
GatorV está desconectado   Responder Citando
Antiguo 15-may-2008, 20:48   #3 (permalink)
Genetix está en el buen camino
 
Avatar de Genetix
 
Fecha de Ingreso: noviembre-2002
Ubicación: LP
Mensajes: 734
Respuesta: Problemas paginación postgres

Como dice Gator ¿Cual es el problema?

Otra cosa evita usar $HTTP_GET_VARS cámbialo por $_GET

saludos!
Genetix está desconectado   Responder Citando
Antiguo 15-may-2008, 21:49   #4 (permalink)
vmac179 ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Ubicación: /home/victor
Mensajes: 45
Respuesta: Problemas paginación postgres

mi problema es el siguiente:

No exite la página 1 de result. Hay solo un total de 0

la clase para paginar era para mysql la estoy tratando de implementar para postgres pero no me esta mostrando los registros

Saludos..
vmac179 está desconectado   Responder Citando
Antiguo 15-may-2008, 22:33   #5 (permalink)
vmac179 ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Ubicación: /home/victor
Mensajes: 45
Respuesta: Problemas paginación postgres

a ver ahora cambie el orden y estoy usando la clase de conección que esta acá http://www.forosdelweb.com/f68/clase-postgresql-576514/

y el index.php me quedo así
Código PHP:
<?



// Obtenemos la página actual, por el método que más nos guste

// Por defecto, la página se propaga por la variable $pagina

$pagina $_GET["pagina"];



// Incluimos la Clase Paginado y coneccion 

include("class.pag.php");
include (
"class/class.db.php");


$C = new Pgsql();

$Conn "SELECT * FROM socios";

$C->conectar($Conn);


$rs = new paginado($conn); // instanciamos un objeto

$rs->pagina($pagina); // Le indicamos en que página estamos - 1 por defecto

$rs->porPagina(5); // Le decimos cuantos registros por página queremos - 20 por defecto

$rs->propagar("forum"); // Le decimos las variables que queremos propagar en los links

if(!$rs->query("SELECT * FROM socios")) // Y ejecutamos nuestra consulta.

{

    die( 
$rs->error() ); // Si Query devolvió falso, hubo un error y lo mostramos.

}

echo 
"Mostrando ".$rs->desde()." - ".$rs->hasta()." de un total de ".$rs->total()."<br>";

// Recorremos todos los resultados y los mostramos.

while($row $rs->obtenerArray())

{

    echo 
$row["id_socios"].", ".$row["nombresocio"]."<br>";

  
//  echo "Email : ".$row["emailsocio"];

    

// while

// Finalmente mostramos los medios para la navegación entre los resultados.

echo $rs->anterior()." - ".$rs->nroPaginas()." - ".$rs->siguiente();

?>
y me da este error

Ocurrió un error al ejecutar la query weona "SELECT COUNT(*) FROM socios". La base dijo: .

gracias por las respuestas y la ayuda

Saludos..
vmac179 está desconectado   Responder Citando
Antiguo 16-may-2008, 07:59   #6 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay
Mensajes: 575
Enviar un mensaje por MSN a enriqueplace
Respuesta: Problemas paginación postgres

Te contesto medio rápido: asumo que en algún lado estás usando un limit, entonces fijate la sintaxis del limit, ya que postgres la usa al revés que Mysql.

Sugerencia: al hacer el debug siempre divide el problema por capas, primero imprime la consulta sql entera y deberás probarla contra la base de datos y asegurarte que sea correcta.
__________________
Saludos, Enrique Place

Blogs: Enrique Place y PHPSenior.
enriqueplace está desconectado   Responder Citando
Antiguo 16-may-2008, 09:05   #7 (permalink)
vmac179 ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Ubicación: /home/victor
Mensajes: 45
Respuesta: Problemas paginación postgres

chicos muchas gracias por sus respuestras, bueno les cuento encontré un LIMIT y creo que en postgres se usa el offset pero la pregunta es como se hace :D

Código PHP:
    function query($query)

    {

        
// Primero modificamos el query para averiguar la cantidad total

        // de registros que devuelve el query.

        
$query_count eregi_replace("select (.*) from""SELECT COUNT(*) FROM",$query);

        if(!
$this->rs( @pg_query($this->conn(),$query_count) ))

        {

            
$this->error("Ocurrió un error al ejecutar  la query weona <i><b>\"$query_count\"</b></i>. La base dijo: <b>" .pg_result_error()."</b>.");

            return 
false;

        }
// Fin If

        
$this->total( @pg_query($this->rs(),0) );

        
$this->totalPaginas(ceil($this->total() / $this->porPagina()));



        
// Comprobamos que no se intenta acceder a una página que no existe.

        
if( $this->pagina() > $this->totalPaginas() )

        {

            
$this->error("No exite la página ".$this->pagina()." de result. Hay solo un total de ".$this->totalPaginas());

            return 
false;

        }
// Fin If



        // Ahora modificamos el Query del usuario, para poder agregarle

        // los límites para realizar la paginación

        
$query .= " LIMIT ".($this->desde()-1).",".$this->porPagina();

        if(!
$this->rs( @pg_query($this->conn(),$query) ))

        {

            
$this->error("Ocurrió un error al ejecutar el query \"$query\". La base dijo : ".pg_result_error());

            return 
false;

        }
// Fin If

        
$this->registros(@pg_num_rows($this->rs()));

        return 
true;

    } 
// function 
Saludos...
vmac179 está desconectado   Responder Citando
Antiguo 19-may-2008, 06:47   #8 (permalink)
Colaborador
enriqueplace tiene algunos puntos positivos de karma
 
Avatar de enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay
Mensajes: 575
Enviar un mensaje por MSN a enriqueplace
Respuesta: Problemas paginación postgres

¿Leyendo el manual de postgres?
__________________
Saludos, Enrique Place

Blogs: Enrique Place y PHPSenior.
enriqueplace está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:54.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69