Foros del Web » Programando para Internet » PHP »

Paginacion

Estas en el tema de Paginacion en el foro de PHP en Foros del Web. Saludos, bueno señores yo soy una persona acostumbrada a crear paginadores desde Dreamweaver pero quiero dejar ese mal habito y me gustaria saber como hago ...
  #1 (permalink)  
Antiguo 03/06/2008, 08:03
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Paginacion

Saludos,
bueno señores yo soy una persona acostumbrada a crear paginadores desde Dreamweaver pero quiero dejar ese mal habito y me gustaria saber como hago un paginador... no alfabetico si no
primera - anterior - seguiente - ultima

me hechan una mano???

Gracias
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #2 (permalink)  
Antiguo 03/06/2008, 08:13
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: Paginacion

te recomiendo el paginator de JPinedo

yo lo uso y es bastante bueno
  #3 (permalink)  
Antiguo 03/06/2008, 08:14
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
Respuesta: Paginacion

Hola T4keOveR,

Revisa las FAQs o busca en el foro hay muchas clases para realizar paginado, si tu lo quieres hacer manualmente tienes que seguir estos pasos:

- Definir cuantos registros por pagina
- Obtener el TOTAL de registros
- Calcular el numero de paginas (total / cuantos x pagina )
- Descargar solo los registros actuales (usando generalmente una clausula tipo LIMIT o TOP en SQL)
- Crear los links de paginacion (esto es tipicamente un for desde i = 1 hasta el total de paginas )

Saludos,
  #4 (permalink)  
Antiguo 03/06/2008, 08:28
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

a ver
Código PHP:
$registros 20//registros por pagina
$pagnum 0//numero de pagina 
ok para ir luego a obtener el numero de registros haria un get a q variable'?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #5 (permalink)  
Antiguo 03/06/2008, 08:57
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

consegui este codigo en los faqs.. aja pero tngo una duda...
Código PHP:
<?php 
######################################################## 
## PAGINAR REGISTROS 
## POR: Marco A. Castillo 
## EMAIL: [email protected] 
######################################################## 

# Funcion para conectar a la base de datos 
function conectar($host,$user,$pass,$db){ 
$link = @mysql_connect($host,$user,$pass) or die("Error Conectando a la Base de datos"); 
@
mysql_select_db($db,$link) or die("Error Seleccionando base de datos."); 
return 
$link


$host "localhost"
$user "root"
$pass ""
$db "directorio"

# Se crea la variable $link que es para identificar la coneccion 
# a la base de datos 
$link conectar($host,$user,$pass,$db); 

# aqui colocan la tabla que se utilizara para 
# extraer los registros y paginarlos 
$tabla "licencias"

# aqui se extrae la cantidad de registros totales 
$rsC mysql_query("Select count(*) from ".$tabla); 
$resultC mysql_fetch_array($rsC); 
$count $resultC[0]; 

# Aqui se pone la cantidad de registros por pagina 
# que se quieren mostrar 
$hasta 2

if(
$pag==""){ 
 
$desde 0
 
$pag 1;     

else{ 
 
$pag $_GET["pag"]; 
 
$pagS $pag 1
 
$desde $hasta $pagS;     


$rs mysql_query("select * from ".$tabla." limit $desde,$hasta"); 
if(
$count!=0){ 
 while(
$result=mysql_fetch_array($rs)){ 
  
# Aqui colocan su tabla html y sus datos a mostrar 
  # solo se usa el array $result[""] y entre comillas 
  # el nombre de la celda a mostrar. 
  
echo $result["licencia"]."<br>\n";     
  
# fin del despliegue personalizado. 
 


else{ 
 echo 
"No tenemos registros.";     

mysql_close($link); 

# aqui se llama a la funcion que muestra los links por paginas 
# la variable $extra_variables es para anexar mas variables al url 
# si es necesario para los querys que hagan. 
# Solo se debe concatenar los datos nombre1=valor1&nombre2=value2 
# NOTA: puede ubicar en cualquier parte de su codigo esta funcion 
# para que aparesca dentro de la celda que desee. 
# link totales es una variable al ser definida le dices a la funcion 
# cuantos links quieres que aparescan por pantalla ya que si tienes 
# 100 paginas no deberas ver los 100 links y solo muestres los necesarios 
$link_totales 4
# se llama la funcion paginar 
# los links si tiene un css podran tomar la estructura y color que le pongas 
## Inicia Paginador 
paginar($count,$hasta,$pag,$link_totales,$extra_variables); 

# Funcion paginar 
# Inicia 
function paginar($count,$hasta,$pag,$link_totales,$extra_variables){ 
    if(
$link_totales==1)$link_totales=2
    
$links $count $hasta
    
$arriba $link_totales 2
    
$abajo $pag 1
    if(
$abajo==0)$abajo 1
    
$temp_r $links $pag
    if(
$temp_r>=$arriba){ 
     
$link_break $pag $arriba
    } 
    else{ 
     
$link_break $links
     
$abajo $pag $arriba
     if(
$pag==$links-1)$abajo $pag $arriba
     if(
$pag==$links)$abajo $pag $arriba
    } 
     
    if(
$pag==1)$link_break $link_totales
    if(
$abajo==0)$abajo=1
    if(
strlen($extra_variables)!=0$extra_variables "&".$extra_variables
     
    if(
$pag==1){ 
     
$anterior 1;     
    } 
    else{ 
    
$anterior $pag 1;     
    } 
    if(
$pag!=1){ 
    echo 
"<a href=".$_SERVER['PHP_SELF']."?pag=".$anterior.$extra_variables."><< Anterior | </a>"
    } 
     
    for(
$i=$abajo;$i<=$links;$i++){ 
     if(
$link_break<$i){ 
      break; 
     } 
     else{ 
        if(
$pag==$i){ 
        echo 
$i." | ";     
        } 
        else{ 
        echo 
"<a href='".$_SERVER['PHP_SELF']."?pag=".$i.$extra_variables."'>"
        echo 
$i
        echo 
" | </a>"
        } 
     } 
    } 
    if(
$pag==$links){ 
    
$siguiente $links
    } 
    else{ 
    
$siguiente $pag 1
    } 
    if(
$pag!=$links){ 
    echo 
"<a href=".$_SERVER['PHP_SELF']."?pag=".$siguiente.$extra_variables.">Siguiente >></a>"
    } 

?>
al parecer el codigo esta adaptado a una tabla pero yo tngo esto...

Código PHP:
<?php    
include ('conect.php');   

$sqlex="SELECT cedula, COUNT(*) AS total, SUM(monto) AS suma FROM factura GROUP BY cedula";
$sql_execex=mysql_query($sqlex) or die("Error en consulta: $sql_execex, error: "mysql_error());
while(
$rowex=mysql_fetch_assoc($sql_execex))   
{    
$cedula $rowex['cedula'];
if( empty( 
$cedula ) ) {
        die( 
"no existe el registro: $cedula, datos: " print_r$rowextrue ) );
}
$sqlexz="SELECT * FROM clientes WHERE cedula='$cedula'"
$sql_execexz=mysql_query($sqlexz) or die( "Error en consulta: $sqlexz, error: " mysql_error());  
$datoscli mysql_fetch_assoc$sql_execexz );
?>
si lo quiero aplicar a mi còdigo como hago en la consulta..???
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #6 (permalink)  
Antiguo 03/06/2008, 09: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
Respuesta: Paginacion

Hola T4keOveR,

La respuesta a tu primer POST, es hacer un GET a la variable que te indique el numero de pagina actual, generalmente se hace algo así:
Código PHP:
$pagina = (int) $_GET['pagina']; // suponiendo que por la variable pagina sea..
if( $pagina ) { // si no nos enviaron ninguna pagina
       
$pagina 1// ponemos por "defecto" la pagina 1

Respecto a tu segundo código, yo veo dos consultas, deberías de especificar que consulta vas a paginar.

Saludos.
  #7 (permalink)  
Antiguo 03/06/2008, 09:27
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

ah perfect... es decir q pagino mi consulta principal y de igual manera la otra continua mostrandose por estar relacionada a la primera... me equivoco?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #8 (permalink)  
Antiguo 03/06/2008, 09:46
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
Respuesta: Paginacion

Así es.

Saludos.
  #9 (permalink)  
Antiguo 03/06/2008, 09:52
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

ok. entendido... gracias.. luego posteare el codigo a penas lo termine :)

saludos y nuevamente gracias
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #10 (permalink)  
Antiguo 03/06/2008, 10:19
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

hasta aqui llegue.... no se a donde mas agarrar...
Código PHP:
<?php
$paginaactual 
$_SERVER["PHP_SELF"];

$registros 20//registros por pagina 
$pagnum 0//numero de pagina  
if (isset($_GET['pagnum'])) { //obtengo el conteo
  
$pagnum $_GET['pagnum'];
}
$empieza $pagnum $registros//empieza el ciclo

$sqlex="SELECT cedula, COUNT(*) AS total, SUM(monto) AS suma FROM factura GROUP BY cedula";
$sql_execex=mysql_query($sqlex) or die("Error en consulta: $sql_execex, error: "mysql_error());
$limite_sqlex sprintf ("%s LIMIT %d, %d"$sqlex$empieza$registros);
while(
$rowex=mysql_fetch_assoc($sql_execex))   
{    
$cedula $rowex['cedula'];
if( empty( 
$cedula ) ) {
        die( 
"no existe el registro: $cedula, datos: " print_r$rowextrue ) );
}
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #11 (permalink)  
Antiguo 03/06/2008, 10:33
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

si hago esto esta bien???

Código PHP:
$sqlex="SELECT cedula, COUNT(*) AS total, SUM(monto) AS suma FROM factura GROUP BY cedula";
$sql_execex=mysql_query($sqlex) or die("Error en consulta: $sql_execex, error: "mysql_error());
while(
$rowex=mysql_fetch_assoc($sql_execex))
$count $rowex[0]; //JUSTO ESTO ESTA BIEN?
{    
$cedula $rowex['cedula'];
if( empty( 
$cedula ) ) {
        die( 
"no existe el registro: $cedula, datos: " print_r$rowextrue ) );

por otro lado

hice esto con el otro codigo
Código PHP:
<?php  
########################################################  
## PAGINAR REGISTROS  
## POR: Marco A. Castillo  
## EMAIL: [email protected]  
########################################################  

# Funcion para conectar a la base de datos  
function conectar($host,$user,$pass,$db){  
$link = @mysql_connect($host,$user,$pass) or die("Error Conectando a la Base de datos");  
@
mysql_select_db($db,$link) or die("Error Seleccionando base de datos.");  
return 
$link;  
}  

$host "localhost";  
$user "root";  
$pass "";  
$db "pintor";  

# Se crea la variable $link que es para identificar la coneccion  
# a la base de datos  
$link conectar($host,$user,$pass,$db);  

# aqui colocan la tabla que se utilizara para  
# extraer los registros y paginarlos  
$tabla "factura";  

# aqui se extrae la cantidad de registros totales  
$sqlex="SELECT cedula, COUNT(*) AS total, SUM(monto) AS suma FROM factura GROUP BY cedula";
$sql_execex=mysql_query($sqlex) or die("Error en consulta: $sql_execex, error: "mysql_error());
while(
$rowex=mysql_fetch_assoc($sql_execex))
$count $rowex[0];
{    
$cedula $rowex['cedula'];
if( empty( 
$cedula ) ) {
        die( 
"no existe el registro: $cedula, datos: " print_r$rowextrue ) );
}

# Aqui se pone la cantidad de registros por pagina  
# que se quieren mostrar  
$hasta 2;  

if(
$pag==""){  
 
$desde 0;  
 
$pag 1;      
}  
else{  
 
$pag $_GET["pag"];  
 
$pagS $pag 1;  
 
$desde $hasta $pagS;      
}  

$sqlexz="SELECT * FROM clientes WHERE cedula='$cedula'"
$sql_execexz=mysql_query($sqlexz) or die( "Error en consulta: $sqlexz, error: " mysql_error());  
$datoscli mysql_fetch_assoc$sql_execexz );

# aqui se llama a la funcion que muestra los links por paginas  
# la variable $extra_variables es para anexar mas variables al url  
# si es necesario para los querys que hagan.  
# Solo se debe concatenar los datos nombre1=valor1&nombre2=value2  
# NOTA: puede ubicar en cualquier parte de su codigo esta funcion  
# para que aparesca dentro de la celda que desee.  
# link totales es una variable al ser definida le dices a la funcion  
# cuantos links quieres que aparescan por pantalla ya que si tienes  
# 100 paginas no deberas ver los 100 links y solo muestres los necesarios  
$link_totales 4;  
# se llama la funcion paginar  
# los links si tiene un css podran tomar la estructura y color que le pongas  
## Inicia Paginador  
paginar($count,$hasta,$pag,$link_totales,$extra_variables);  

# Funcion paginar  
# Inicia  
function paginar($count,$hasta,$pag,$link_totales,$extra_variables){  
    if(
$link_totales==1)$link_totales=2;  
    
$links $count $hasta;  
    
$arriba $link_totales 2;  
    
$abajo $pag 1;  
    if(
$abajo==0)$abajo 1;  
    
$temp_r $links $pag;  
    if(
$temp_r>=$arriba){  
     
$link_break $pag $arriba;  
    }  
    else{  
     
$link_break $links;  
     
$abajo $pag $arriba;  
     if(
$pag==$links-1)$abajo $pag $arriba;  
     if(
$pag==$links)$abajo $pag $arriba;  
    }  
      
    if(
$pag==1)$link_break $link_totales;  
    if(
$abajo==0)$abajo=1;  
    if(
strlen($extra_variables)!=0$extra_variables "&".$extra_variables;  
      
    if(
$pag==1){  
     
$anterior 1;      
    }  
    else{  
    
$anterior $pag 1;      
    }  
    if(
$pag!=1){  
    echo 
"<a href=".$_SERVER['PHP_SELF']."?pag=".$anterior.$extra_variables."><< Anterior | </a>";  
    }  
      
    for(
$i=$abajo;$i<=$links;$i++){  
     if(
$link_break<$i){  
      break;  
     }  
     else{  
        if(
$pag==$i){  
        echo 
$i." | ";      
        }  
        else{  
        echo 
"<a href='".$_SERVER['PHP_SELF']."?pag=".$i.$extra_variables."'>";  
        echo 
$i;  
        echo 
" | </a>";  
        }  
     }  
    }  
    if(
$pag==$links){  
    
$siguiente $links;  
    }  
    else{  
    
$siguiente $pag 1;  
    }  
    if(
$pag!=$links){  
    echo 
"<a href=".$_SERVER['PHP_SELF']."?pag=".$siguiente.$extra_variables.">Siguiente >></a>";  
    }  
}  
?>
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #12 (permalink)  
Antiguo 03/06/2008, 11:23
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
Respuesta: Paginacion

Tu primera consulta para obtener el total debería de ser algo así:
Código:
$sqlex="SELECT COUNT(cedula) AS total FROM factura GROUP BY cedula";
Por otro lado, tienes un problema ya que dentro del while es que tratas de hacer el conteo y paginación y ahí es donde tienes el error, primero debes de hacer el código para paginar, y posteriormente haces el while para dibujar tu tabla.

Saludos.
  #13 (permalink)  
Antiguo 03/06/2008, 12:59
Avatar de T4ke0veR  
Fecha de Ingreso: agosto-2007
Ubicación: Quito - Ecuador
Mensajes: 1.720
Antigüedad: 16 años, 8 meses
Puntos: 28
Respuesta: Paginacion

la primera consulta funciona perfecta.. tu mismo la hiciste asi como yo la coloque.. y me da los resultados q deseo. ahora bien
debo eliminar todo lo q esta debajo del while y re estructurarlo antes del while?
__________________
Diseño gráfico, Web, imagen corporativa, publicidad ...
  #14 (permalink)  
Antiguo 03/06/2008, 15:00
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
Respuesta: Paginacion

Te recomiendo dividas por bloques tu pagina y así podrás programar más limpiamente, por ejemplo:

- Bloque 1
Detección de pagina actual

- Bloque 2
Envío de Query y conteo de registros

- Bloque 3
Envío de Query ya con LIMIT

- Bloque 4
Descarga de datos (bloque while) y sub-querys

- Bloque 5
Realización de links de paginación

Saludos.
  #15 (permalink)  
Antiguo 03/06/2008, 19:26
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Respuesta: Paginacion

hasta parece chat esta cosa =)

es broma
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 14:11.