Foros del Web » Programando para Internet » PHP »

evitar error en paginacion

Estas en el tema de evitar error en paginacion en el foro de PHP en Foros del Web. hola forer@s estoy haciendo una paginacion php-ajax, mi duda queda aqui en php (segun yo ) cuando hay un solo registro quisiera que se mostrara ...
  #1 (permalink)  
Antiguo 28/01/2012, 12:06
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
evitar error en paginacion

hola forer@s

estoy haciendo una paginacion php-ajax, mi duda queda aqui en php (segun yo )

cuando hay un solo registro

quisiera que se mostrara solo "Pagina 1/1" actualmente se muestra

"<<-Primero <-Anterior Pagina 1/1 Siguiente-> Ultiimo->>"

cuando hay mas de un registro si esta bien que aparezcan estas opciones, anunque tambien debe seguir esta logica:

si esta en la pagina 1 mostrar:

"Pagina 1/7 Siguiente-> Ultiimo->>"

si esta en cualquier pagina (2,3,4,5 o 6...) mostrar

"<<-Primero <-Anterior Pagina 2/7 Siguiente-> Ultiimo->>"

si esta en la ultima pagina

"<<-Primero <-Anterior Pagina 7/7"

como les comento, actualmente se muestran todas las opciones sin importar en que pagina este y vienen los errores al estar en la pagina 1 y dar clic en anterior, o siguiente que no muestra nada, eso es lo que deseo evitar, dejo el codigo para ver que mejoras se le pueden hacer

gracias

pagina procesar.php

Código PHP:
<?php
$opcion
=trim($_GET['opcion']); //recibo variable que el usuario envia para saber que es lo que èste va a consultar

$registros 10
if(isset(
$_GET['pag'])){  
    
$inicio=($_GET['pag']-1)*$registros;  
    
$PagAct=$_GET['pag']; 
}else{  
    
$inicio=0;  
    
$PagAct=1
}

//...consulta para sacar los registros
$sql_query="Select * from tabla where opcion='$opcion' limit $inicio, $registros";
$res mysql_query($sql_query) or die('Error en la consulta '.mysql_error());

//...muestro registros

//...determinar paginas
$PagAnt=$PagAct-1
$PagSig=$PagAct+1
$PagUlt=$NroRegistros/$registros
$Resi=$NroRegistros%$registros;
?>    
        <div class='paginacion'>
            <?php
            
if($Resi>0$PagUlt=floor($PagUlt)+1
            
?>    
                <a onclick="paginacion('1', 'id_capa', 'pagina', '<?php echo $opcion?>')"><img src='go-first.png'/><span>Primero</span></a>
            <?php 
            
if($PagAct>1)
            
?> 
                <a onclick="paginacion('<?php echo $PagAnt?>', 'id_capa', 'pagina', '<?php echo $opcion?>')"><img src='go-left.png'/><span>Anterior</span></a> 
                <span><b><?php echo "Página ".$PagAct."/".$PagUlt." " ?></b></span>
            <?php
            
if($PagAct<$PagUlt)  
            
?>    
                <a onclick="paginacion('<?php echo $PagSig ?>', 'id_capa', 'pagina', '<?php echo $opcion?>')"><span>Siguiente</span><img src='go-right.png' /></a> 
                <a onclick="paginacion('<?php echo $PagUlt ?>', 'id_capa', 'pagina', '<?php echo $opcion?>')"><span>&Uacute;ltimo</span><img src='go-last.png'/></a>
        </div>
la funcion ajax lo unico que hace es recoger el numero de pagina en el que se encuentra el usuario, el div en el que se mostrara el resultado, el nombre de la pagina, y una variable que se necesita para "recordar" que es lo que el usuario esta consultando; y enviarlo devuelta:

function paginacion(nropagina, capa, pagina, variable)
....
ajax.open("GET", pagina+".php?pag="+nropagina+"&opcion="+variable);
  #2 (permalink)  
Antiguo 28/01/2012, 16:36
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: evitar error en paginacion

no lei todo..pero si el problema radica solo cuando hay un solo registro en tu bd...que no es mejor q uses el mysql_num_rows() ?? o sea con eso validas si la consulta contiene mas de un registro o no
  #3 (permalink)  
Antiguo 28/01/2012, 16:49
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: evitar error en paginacion

Tu código por lo que veo no esta completo, por lo cual no lo podré usar como ejemplo, pero podrías hacer algo así...

Código PHP:
Ver original
  1. <?php
  2. $num_reg_pag = 10; //numero de registros por página
  3. $registros = mysql_num_rows($sql);
  4. $paginas = ceil($registros/$num_reg_pag);
  5.  
  6. $paginacion = '';
  7.  
  8. if ($paginas != 1 && $pgAct > 1) {
  9. $paginacion .= '<a href="mipagina.php">Primero</a> ';
  10. $paginacion .= '<a href="mipagina.php">Anterior</a> ';
  11. }
  12. }
  13.  
  14. $paginacion .= 'P&aacute;gina '.$pgAct.'/'.$paginas;
  15.  
  16. if ($paginas != 1 && $pgAct < $paginas) {
  17. $paginacion .= ' <a href="mipagina.php">Siguiente</a>';
  18. $paginacion .= ' <a href="mipagina.php">Ultimo</a>';
  19. }
  20.  
  21. echo $paginacion;
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #4 (permalink)  
Antiguo 29/01/2012, 17:45
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: evitar error en paginacion

Que tal edward18_1 tienes razon necesito saber cuantos registros hay para poner las condiciones tipo

si (num_registros == 1){
echo "Pagina 1/1"
}

que es lo que me propone Nemutagk no entiendo porque dices que mi codigo no esta completo, lo que puse es todo lo que hago para la paginacion

Cita:
Tu código por lo que veo no esta completo
ya probe el codigo y si sigue la lógica y funciona bien :D

aca pongo el codigo como lo he corregido

Código PHP:
<?php
$registros 
10
if(isset(
$_GET['pag'])){  
    
$inicio=($_GET['pag']-1)*$registros;  
    
$PagAct=$_GET['pag']; 
}else{  
    
$inicio=0;  
    
$PagAct=1
}

$NroRegistros=mysql_num_rows(mysql_query("SELECT campo FROM tabla WHERE opcion='$opcion'")); //agregue esta para saber cuantos registros hay

$paginas ceil($NroRegistros/$registros); //esto tambien se lo agregue como me lo propusiste

//...consulta para sacar los registros 
$sql_query="Select * from tabla where opcion='$opcion' limit $inicio, $registros"
$res mysql_query($sql_query) or die('Error en la consulta '.mysql_error()); 

//...muestro registros 

//...determinar paginas 
$PagAnt=$PagAct-1;  
$PagSig=$PagAct+1;  
$PagUlt=$NroRegistros/$registros;  
$Resi=$NroRegistros%$registros
?>     
        <div class='paginacion'>
<?php
                $paginacion 
'';
 
        if (
$paginas != && $PagAct 1) {
            
$paginacion .= "<a onclick=\"paginacion('1', 'id_capa', 'pagina', '$opcion')\"><img src='go-first.png'/><span>Primero</span></a>";
            
$paginacion .= "<a onclick=\"paginacion('$PagAnt', 'id_capa', 'pagina', '$opcion')\"><img src='go-left.png'/><span>Anterior</span></a>";
        }
                 
        
$paginacion .= "<span><b>Página $PagAct/$PagUlt</b></span>";
                 
        if (
$paginas != && $PagAct $paginas) {
            
$paginacion .= "<a onclick=\"paginacion('$PagSig', 'id_capa', 'pagina', '$opcion')\"><span>Siguiente</span><img src='go-right.png' /></a>";
            
$paginacion .= "<a onclick=\"paginacion('$PagUlt', 'id_capa', 'pagina', '$opcion')\"><span>&Uacute;ltimo</span><img src='go-last.png'/></a>";
        }
                 
        echo 
$paginacion;
?>
</div>
ahora solo tengo 2 dudas:

la primera es:

¿qué es lo que hacia esta linea que tenia en el código anterior?

if($Resi>0) $PagUlt=floor($PagUlt)+1;

¿ya no hará falta que la ponga con este nuevo codigo? si, sí es necesario ¿dónde iría?

y la segunda duda:

¿cómo puedo añadir los numeros de las paginas disponibles?, por ejemplo:

Pagina 1/7 1 2 3 4 5 ... siguiente-> ultima->>

<<-primera <-anterior Pagina 2/7 12 3 4 5 ... siguiente-> ultima->>

<<-primera <-anterior Pagina 7/7 ... 3 4 5 6 7

muchas gracias

Última edición por catpaw; 29/01/2012 a las 17:51
  #5 (permalink)  
Antiguo 29/01/2012, 18:01
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: evitar error en paginacion

que tal, probando ya el código,
como no tengo muchos registros (3 de hecho) para probar la paginacion ponia $registros = 1;

y todo bien salia Pagina 1/2, Pagina 2/3, Pagina 3/3

pero al cambiar ya al valor real $registros = 10;

me sale Página 1/0.3

y no se como corregirlo? y si después quisiera poner $registros = 7; o $registros = 30; volvería a variar?

gracias

editooooooooooooooooo

creo que ya me respondí mi segunda duda, para este caso es la condición:

if($Resi>0) $PagUlt=floor($PagUlt)+1;

ya lo resolví gracias, solo queda la primer duda :D
  #6 (permalink)  
Antiguo 29/01/2012, 18:35
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: evitar error en paginacion

Para enumerar las páginas solo has un loop...

Código PHP:
Ver original
  1. for($i=1; $i<=$paginas; $i++) {
  2.    if ($i == $pgAct) {
  3.        echo ' '.$i;
  4.    }else {
  5.        echo '<a href="mipagina.php?pag='.$i.'">'.$i.'</a>';
  6.    }
  7. }

El código que muestras hace lo mismo que el que te deje...

Código PHP:
Ver original
  1. //el tuyo..
  2. $PagUlt=$NroRegistros/$registros;
  3. $PagUlt=floor($PagUlt)+1;
  4.  
  5. //el mio...
  6. $paginas = ceil($NroRegistros/$registros);

Edit: tu problema...

Cita:
me sale Página 1/0.3
es porque estas usando $pagUlt cuando debes de usar $paginas, tu código que te deje arriba (el que te compare entre el tuyo y el mio) esta demás, no es necesario....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #7 (permalink)  
Antiguo 29/01/2012, 19:03
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: evitar error en paginacion

Gracias Nemutagk

ya quedo ok

Etiquetas: mysql, paginacion, registro, sql, tabla, variables, usuarios
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 12:25.