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

Ayuda para paginar registros

Estas en el tema de Ayuda para paginar registros en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola foreros, por favor que alguien me ayude tengo el siguiente problema con una clase para paginar registros desde una base de datos mysql, el ...
  #1 (permalink)  
Antiguo 18/08/2008, 23:48
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Ayuda para paginar registros

Hola foreros, por favor que alguien me ayude tengo el siguiente problema con una clase para paginar registros desde una base de datos mysql, el avance de la paginación funciona perfectamente con los link “anterior” y “siguiente” pero NO con los link números de las paginas.

El problema esta es aquí: [anterior] [1] 2 3 4… [Siguiente], en los números que pongo con negrita.

esta es la clase

Código PHP:
<?php

    
class queryList {

        function 
queryList($sql$link$page$rowsPerPage$pageLimit) {

            
// check the numbers of pages
            
$result        mysql_query($sql);
            
$totalRows    mysql_num_rows($result);
            
$totalPages ceil($totalRows $rowsPerPage);


            
// verify the given values
            
$page $page*1
            
$rowsPerPage $rowsPerPage*1
            
$pageLimit $pageLimit*1
            if(!
is_int($rowsPerPage) || $rowsPerPage 1) { $rowsPerPage 10; }
            if(!
is_int($pageLimit)   || $pageLimit   1) { $pageLimit   10; }
            if(
$page $totalPages) { $page $totalPages; }
            if(!
is_int($page) || $page 1) { $page 1; }


            
// build the starting values
            
if($totalPages $pageLimit ) { $value $pageLimit; } 
                else { 
$value $totalPages; }
            if(
$page $pageLimit) { $i $page $pageLimit$value $pageLimit+$i; }
            
            
$pages "";
            
// section for Previous Record
            
if($page 1){
                
$pages .= '&nbsp;<b>[ <a href='.$link.'&page='.($page-1).'>anterior</a> ] &nbsp;</b>';
            }


            
// build the Pages Browser
            
while (@$i $value){
                @
$i++;
                if (
$i == $page){
                    
$pages .= '<b>['.$i.']</b>&nbsp;';
                } else { 
                    if(
$i <= $totalPages) { 
                        
$pages .= '<a href='.$link.'&page='.$i.'>'.$i.'</a>'
                    }
                }
            }


            
// section for Next Record
            
if($i <= $totalPages){
                if(
$totalPages != $page){
                    
$pages .= '&nbsp;<b>[ <a href='.$link.'&page='.($page+1).'>siguiente</a> ]</b>';
                }
            }


            
// make the return values
            
$this->result $pages;
            
$this->start  = (($page-1) * $rowsPerPage) + 1;
            
$this->total  $totalRows;
            
$this->pages  $totalPages;
            
$this->sql      $sql.' LIMIT '.($page-1)*$rowsPerPage.','.$rowsPerPage;
            
            
$stop "";
            if(
$page==$totalPages) { 
        
$this->stop = ($page-1)*$rowsPerPage+($totalRows-(($page-1)*$rowsPerPage)); 
      } else { 
        
$this->stop $page $rowsPerPage
      }

        } 
// end of query()
        
    
// end of Class


?>
aqui el uso:
Código PHP:
<?php
include 'db_config.php';
include 
'queryList.php';
$sql "SELECT * FROM tabla ORDER BY campo DESC";
$queryList = new queryList();
$queryList->queryList($sql'lista_contactos.php?'$_GET['page'], 1020);

//aqui se muestra el resultado
$result mysql_query ($queryList->sql);

?>

<table cellspacing="0" cellpadding="0" border="0" width="600px">
  <tr>
    <th>Id</th>
    <th>Nombres y apellidos</th>
    <th>Telefono</th>
    <th>Acciones</th>
  </tr>
  <?php
       
while ($fila mysql_fetch_assoc($result)) {
       
$nombre    $fila["nombre"];
       
$apellidos $fila["apellidos"];
       
$email     $fila["email"];
       
$telefono  $fila["telefono"];         
        
?>
   <tr>
    <td><?php echo $nombre ?></td>
    <td><?php echo $apellidos ?></td>
    <td><?php echo $email?></td>
    <td><?php echo $telefono;?></td>
  </tr>
  <?php    ?>
</table>

<?php
if($queryList->pages 1) { 
    echo 
'Paginas ('$queryList->pages .') : ';  
    echo 
$queryList->result
}
echo 
"<br>";
if(
$queryList->total >= 1) { 
    echo 
'Archivos mostrados <font color=red>'$queryList->start .'</font> a <font color=red>'$queryList->stop .'</font> de <font color=red>'$queryList->total .'</font>'
}

?>
No se explique bien, Gracias a quien pueda ayudarme.
  #2 (permalink)  
Antiguo 19/08/2008, 08:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda para paginar registros

Hola datauser,

¿Cuando le picas a los numeros que URL ves en el navegador?,

Saludos.
  #3 (permalink)  
Antiguo 19/08/2008, 12:48
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Ayuda para paginar registros

if(!is_int($page) || $page < 1) { $page = 1; } eso esta mal

para valores $_GET siemrpe el tipo va a er string!
entoences tienes que usar is_numeric()
__________________
Degiovanni Emilio
developtus.com
  #4 (permalink)  
Antiguo 19/08/2008, 18:29
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Ahora ya funciona la clase para paginar registros

Ante todo gracias por contestar GatorV y emiliodeg, la paginación ya funciona con las ligas “anterior”, “siguiente” y “los números de pagina” aunque debo decir que no hice ningún cambio a la clase, no me explico cual haya sido el problema pero de todos modos tendré presente vuestra ayuda para cualquier inconveniente mas adelante gracias una vez mas.

Saludos.

Dejo la clase una vez más por si alguien lo necesite.

Código PHP:
<?php

    
class queryList {

        function 
queryList($sql$link$page$rowsPerPage$pageLimit) {

            
// check the numbers of pages
            
$result        mysql_query($sql);
            
$totalRows    mysql_num_rows($result);
            
$totalPages ceil($totalRows $rowsPerPage);


            
// verify the given values
            
$page $page*1
            
$rowsPerPage $rowsPerPage*1
            
$pageLimit $pageLimit*1
            if(!
is_int($rowsPerPage) || $rowsPerPage 1) { $rowsPerPage 10; }
            if(!
is_int($pageLimit)   || $pageLimit   1) { $pageLimit   10; }
            if(
$page $totalPages) { $page $totalPages; }
            if(!
is_int($page) || $page 1) { $page 1; }


            
// build the starting values
            
if($totalPages $pageLimit ) { $value $pageLimit; } 
                else { 
$value $totalPages; }
            if(
$page $pageLimit) { $i $page $pageLimit$value $pageLimit+$i; }
            
            
$pages "";
            
// section for Previous Record
            
if($page 1){
                
$pages .= '&nbsp;<b>[ <a href='.$link.'&page='.($page-1).'>anterior</a> ] &nbsp;</b>';
            }


            
// build the Pages Browser
            
while (@$i $value){
                @
$i++;
                if (
$i == $page){
                    
$pages .= '<b>['.$i.']</b>&nbsp;';
                } else { 
                    if(
$i <= $totalPages) { 
                        
$pages .= '<a href='.$link.'&page='.$i.'>'.$i.'</a>'
                    }
                }
            }


            
// section for Next Record
            
if($i <= $totalPages){
                if(
$totalPages != $page){
                    
$pages .= '&nbsp;<b>[ <a href='.$link.'&page='.($page+1).'>siguiente</a> ]</b>';
                }
            }


            
// make the return values
            
$this->result $pages;
            
$this->start  = (($page-1) * $rowsPerPage) + 1;
            
$this->total  $totalRows;
            
$this->pages  $totalPages;
            
$this->sql      $sql.' LIMIT '.($page-1)*$rowsPerPage.','.$rowsPerPage;
            
            
$stop "";
            if(
$page==$totalPages) { 
        
$this->stop = ($page-1)*$rowsPerPage+($totalRows-(($page-1)*$rowsPerPage)); 
      } else { 
        
$this->stop $page $rowsPerPage
      }

        } 
// end of query()
        
    
// end of Class


?>

  #5 (permalink)  
Antiguo 19/08/2008, 23:19
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Ahora ya funciona la clase para paginar registros

Cita:
Iniciado por datauser Ver Mensaje
la paginación ya funciona con las ligas “anterior”, “siguiente” y “los números de pagina” aunque debo decir que no hice ningún cambio a la clase, no me explico cual haya sido el problema

Noooooooo!!!! un cuchillo por favor! me quiero cortar las venas!
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 20/08/2008, 13:14
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Respuesta: Ayuda para paginar registros

Perdon que me entrometa, pero datauser, eso no es una clase y menos para PHP5, es cualquier cosa, incluso en las condiciones de tu clase es mejor que hubieras usado una simple función.

Ninguno de tus propiedades o atributos están declarados, una clase que concentra todo en un solo metodo sin interfaz ni nada, encapsulamiento?, abstracción?, Polimorfismo?, Herencia?, Principio de ocultación?, principios básicos de OOP ¿donde están? ni siquiera hay un principio.

Consejo leer mucho y aprender sobre OOP y después a programar.

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:56.