Foros del Web » Programando para Internet » PHP »

Como Hacer links de paginación

Estas en el tema de Como Hacer links de paginación en el foro de PHP en Foros del Web. Buenas , tengo una lista de usuarios los cuales son los registrados , este se llama usuarios.php al ingresar sale por orden de id todos ...
  #1 (permalink)  
Antiguo 26/02/2013, 20:59
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 2 meses
Puntos: 0
Como Hacer links de paginación

Buenas , tengo una lista de usuarios
los cuales son los registrados , este se llama usuarios.php
al ingresar sale por orden de id todos los usuarios ...

como no quiero que salgan todos en una sola página le hise una paginación
para solo mostrar 5 usuarios por página ...

todo bien , pero necesito ayuda ,

necesito que el máximo de paginas sea solo 10

por ejemplo al costado le puse un boton llamado NEXT
yo quiero que cuando aprete NEXT se pase a otra página donde
empieze desde el numero 11 hasta el numero 20

por ejemplo que en la primera página sea asi ..

PREVIUS 1 - 2 - 3 - 4 -5 - 6 - 7- 8 - 9- 10 NEXT

cuando de NEXT , ahora saldran del número 11 hasta el numero 20

PREVIUS 11 - 12 - 13 - 14 -15 - 16 - 17- 18 - 19- 20 NEXT

y asi sucesivamente .. pero no lo logro



aqui pongo mi codigo PHP lo que hace listarlos y hace la paginación



Código PHP:
Ver original
  1. <?php
  2.    
  3.     require('connect_db.php');
  4.  
  5. // maximo por pagina
  6. $limit = 5;
  7.  
  8. // pagina pedida
  9. $pag = (int) $_GET["pag"];
  10. if ($pag < 1)
  11. {
  12.    $pag = 1;
  13. }
  14. $offset = ($pag-1) * $limit;
  15.  
  16.  
  17. $sql = "SELECT SQL_CALC_FOUND_ROWS id ,Nick ,Sexo ,FechaNac,DiaRegistro ,avatar FROM registro LIMIT $offset, $limit";
  18. $sqlTotal = "SELECT FOUND_ROWS() as total";
  19.  
  20. $rs = mysql_query($sql);
  21. $rsTotal = mysql_query($sqlTotal);
  22.  
  23. $num_rows=mysql_num_rows($rs);
  24.  
  25.  
  26. $rowTotal = mysql_fetch_assoc($rsTotal);
  27. // Total de registros sin limit
  28. $total = $rowTotal["total"];
  29.  
  30. while ($row = mysql_fetch_assoc($rs))
  31.          {
  32.            
  33.          
  34.      $id = $row["id"];
  35.      $Nick = $row["Nick"];
  36.      $Sexo = $row["Sexo"];
  37.      $Fecha = $row["FechaNac"];
  38.      $Registro = $row["DiaRegistro"];
  39.      $avatar = $row["avatar"];
  40.      ?>
  41.      <p></p>
  42.      
  43.      <td align ="center" Height="30" Width="150" background="http://i46.tinypic.com/qsur9t.jpg"><font color="red"><label for="foro">Usuario</label></font></td> <td align ="center" Height="30" Width="110" background="ImagenInicio/fondotabla3.jpg"></td>  <td align ="center" Height="30" Width="240" background="ImagenInicio/fondotabla3.jpg"></td>      <td align ="center" Height="30" Width="400" background="ImagenInicio/fondotabla3.jpg"></td>  </tr>  
  44.      
  45.      <tr>
  46.      <td align ="center" Height="110" Width="160" background="ImagenInicio/fondo.jpg" ><br><img src= <?php echo "miembros/$avatar" ?> width="110" height="130" /></br><br></br>Nick : <a href="perfil.php?id= <?php echo $id ?>"><font color="red"><?php echo $Nick ?></a></font><br></br></td>
  47.      <td align ="left" Height="110" Width="160" background="ImagenInicio/fondo.jpg"><br><?php echo "***" ?>Sexo :</br><br><?php echo "***" ?>Fecha de Nacimiento :</br><br><?php echo "***" ?>Se registro el :</br></td>  
  48.      <td align ="left" Height="30" Width="140" background="ImagenInicio/fondo.jpg"><br><?php echo "***" ?> <?php echo $Sexo ?></br><br><?php echo "***" ?><?php echo $Fecha ?></br><br><?php echo "***" ?><?php echo $Registro ?></br></td>    
  49.      <td align ="center" Height="30" Width="390" background="ImagenInicio/fondo.jpg"></td>  </tr>
  50.      
  51.                                                                                                  
  52.      </tr>
  53.      
  54.      
  55.      
  56.      <?php
  57.      }
  58.    
  59.  
  60. ?>     
  61. </table>
  62.  
  63.  
  64. <script type="text/javascript">
  65.     //Redireccionar con el formulario creado
  66.     document.formulario.submit();
  67. </script>
  68.    
  69.  
  70.    
  71.    
  72. <p>**</p>
  73. <p>**</p>
  74. </form>
  75. </body>
  76.  
  77.  
  78. <table border="0" Height="30" width="1400" cellpadding="0" cellspacing="0" align ="center">
  79. <tr>
  80. <td align="center" background="http://i46.tinypic.com/qsur9t.jpg"><font color=red >
  81.  
  82.  
  83.  
  84. <?php
  85.  
  86.  
  87.        
  88.          $totalPag = ceil($total/$limit);  
  89.          $links = array();
  90.          for( $i=1; $i<=$totalPag ; $i++)
  91.          {
  92.             $links[] = "<li><a href=\"?pag=$i\">$i</a></li>";
  93.          }
  94.          
  95.  
  96.          echo implode(" - ", $links);
  97.          
  98.       ?>
  99.       <li class="next"><a href="?page=8">Next »</a></li>
  100. </ul>
  101.  
  102.     </font>  
  103. </td>
  104. </tr>
  105. </table>


en la parte $totalPag = ceil($total/$limit)
es para sacar al numero total de páginas
$total q tiene todas las filas encontradas en la bd
y $limit que es la cantidad de registros que quiero que aparesca
la cual es 5
y con ceil hago que redondee al numero mas alto, el resultado de esto sale 3
asi que mostrara solo 3 páginas ..

mientras mas usuarios se registren el numero de páginas ira aumentando
yo quiero que solo llegue a un máximo de 10
y al darle next , continue del 11 al 2 , luego doy next y sera del 21 al 30 y asi sucesivamente...

espero alguien pueda ayudarme o darme alguna idea ....

gracias ..
  #2 (permalink)  
Antiguo 27/02/2013, 00:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como Hacer paginación en php

Lo que hago normalmente:

1- Si el total de páginas es menor que la cantidad de enlaces a mostrar, entonces inicio = 1, final = total de páginas y me brinco los siguientes pasos
2- inicio = total de páginas menos la mitad de los enlaces que se van a mostrar; en tu caso, 5
3- Si inicio < 1, entonces inicio = 1
4- final = inicio + (total de enlaces a mostrar ; en tu caso, 10
5- Si final > total de páginas, entonces, final = total de páginas y inicio = final - 10

Con esto, realmente se mostrarán 11 enlaces, pero, el número de página actual quedará al centro, siempre que no esté cerca de 1 o del total de páginas.

Aparte de eso, me gusta agregar siempre el enlace a primera y última página, cuando sea necesario

Ejemplo: Página 1 de 20 (No es necesario la primera)
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - Siguiente - Última

Ejemplo: Página 8 de 20 (Se necesita primera y última)
Primera - Anterior - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - Siguiente - Última

Ejemplo: Página 19 de 20 (No es necesario la última)
Primera - Anterior - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - Siguiente
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/02/2013, 21:32
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Como Hacer paginación en php

Cita:
Iniciado por Triby Ver Mensaje
Lo que hago normalmente:

1- Si el total de páginas es menor que la cantidad de enlaces a mostrar, entonces inicio = 1, final = total de páginas y me brinco los siguientes pasos
2- inicio = total de páginas menos la mitad de los enlaces que se van a mostrar; en tu caso, 5
3- Si inicio < 1, entonces inicio = 1
4- final = inicio + (total de enlaces a mostrar ; en tu caso, 10
5- Si final > total de páginas, entonces, final = total de páginas y inicio = final - 10

Con esto, realmente se mostrarán 11 enlaces, pero, el número de página actual quedará al centro, siempre que no esté cerca de 1 o del total de páginas.

Aparte de eso, me gusta agregar siempre el enlace a primera y última página, cuando sea necesario

Ejemplo: Página 1 de 20 (No es necesario la primera)
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - Siguiente - Última

Ejemplo: Página 8 de 20 (Se necesita primera y última)
Primera - Anterior - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - Siguiente - Última

Ejemplo: Página 19 de 20 (No es necesario la última)
Primera - Anterior - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - Siguiente

Hola mira

te entendi mas o menos

eh logrado esto , te pondre el codigo donde defino la pagina
el total de paginas , el numero de paginas que quiero que salga ( no el total )
etc




Código PHP:
Ver original
  1. $registros=1;
  2. $pagina=$_GET["num"];
  3. if (is_numeric($pagina))
  4. $inicio=((($pagina-1)*$registros)+1);
  5. else
  6.    
  7. $inicio=1;
  8.  
  9.  
  10.    
  11. $paginas = ceil($rs/$registros);
  12.  
  13. $juas=5;


ahora te pondre donde sale la paginacion


Código PHP:
Ver original
  1. <?php
  2.  
  3. if($pagina>1)
  4.            
  5.             echo  "<a href='a.php?num=". ($pagina-1) ."' >Anterior</a> ";
  6.        
  7.          
  8.          
  9.            
  10.            for ($cont=$inicio;$cont<=$juas;$cont++)
  11.         {
  12.              if($cont ==$pagina)
  13.                
  14.                 echo $cont." ";
  15.                 else
  16.                
  17.                 echo  "<a href='a.php?num=". $cont ."' >$cont</a> ";
  18.                
  19.                
  20.            
  21.             }
  22.                
  23.                 if (0>$inicio)
  24.                 $inicio=0;  // para evitar que se salga de rango
  25.                 else
  26.                 if ($pages<$final)
  27.                 $final=$pages;  // p
  28.                
  29.                
  30.                
  31.                
  32.            
  33.            
  34.                if($pagina<$paginas)
  35.                o();
  36.                echo  "<a href='a.php?num=". ($pagina+1) ."' >Siguiente</a>";
  37.                
  38.         ?>


hasta el momento me funciona asi

al momento de entrar ala lista
me sale UN usuario por cada página ( puse solo para un registro por pagina para evitarme algunos problemas y que funcione bien )

al momento de entrar sale asi



1 - 2 - 3 - 4 - 5 Siguiente

ok todo bien ahi
cuando eligo el numero 2 o presione ´´ Siguiente , ahora pasa a ser asi


Anterior 2 - 3 - 4 - 5 Siguiente ,

todo bien hasta aqui... y asi sucesivamente ,

pero lo que aun no eh podido lograr es que
el numero 5 avance ..... eh intedo de varias formas pero no lo logro

osea me refiero a que quede asi


Anterior 2 - 3 - 4 - 5 - 6 Siguiente ,



Como tengo solo 12 registros , necesito que cada ves que aprete siguiente
el numero 5 suba , luego a 6 , a 7 y asi hasta llegar al numero 12
cuando llegue al numero 12 , el boton Siguiente desaparece eso ya esta

lo que me falta es que el 5 avance .... aun no lo eh logrado

Última edición por awik; 27/02/2013 a las 21:37
  #4 (permalink)  
Antiguo 27/02/2013, 21:39
Avatar de zetahosting  
Fecha de Ingreso: octubre-2011
Mensajes: 119
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: Como Hacer links de paginación

porque no probas asi amigo:

Cita:
<?php

require('connect_db.php');

// maximo por pagina
$limit = 10;

// pagina pedida
$pag = (int) $_GET["pag"];
if ($pag < 1)
{
$pag = 1;
}
$offset = ($pag-1) * $limit;
$pag2=$pag+10;

$sql = "SELECT SQL_CALC_FOUND_ROWS id ,Nick ,Sexo ,FechaNac,DiaRegistro ,avatar FROM registro LIMIT $offset, $limit";
$sqlTotal = "SELECT FOUND_ROWS() as total";

$rs = mysql_query($sql);
$rsTotal = mysql_query($sqlTotal);

$num_rows=mysql_num_rows($rs);


$rowTotal = mysql_fetch_assoc($rsTotal);
// Total de registros sin limit
$total = $rowTotal["total"];

while ($row = mysql_fetch_assoc($rs))
{


$id = $row["id"];
$Nick = $row["Nick"];
$Sexo = $row["Sexo"];
$Fecha = $row["FechaNac"];
$Registro = $row["DiaRegistro"];
$avatar = $row["avatar"];
?>
<p></p>

<td align ="center" Height="30" Width="150" background="http://i46.tinypic.com/qsur9t.jpg"><font color="red"><label for="foro">Usuario</label></font></td> <td align ="center" Height="30" Width="110" background="ImagenInicio/fondotabla3.jpg"></td> <td align ="center" Height="30" Width="240" background="ImagenInicio/fondotabla3.jpg"></td> <td align ="center" Height="30" Width="400" background="ImagenInicio/fondotabla3.jpg"></td> </tr>

<tr>
<td align ="center" Height="110" Width="160" background="ImagenInicio/fondo.jpg" ><br><img src= <?php echo "miembros/$avatar" ?> width="110" height="130" /></br><br></br>Nick : <a href="perfil.php?id= <?php echo $id ?>"><font color="red"><?php echo $Nick ?></a></font><br></br></td>
<td align ="left" Height="110" Width="160" background="ImagenInicio/fondo.jpg"><br><?php echo "***" ?>Sexo :</br><br><?php echo "***" ?>Fecha de Nacimiento :</br><br><?php echo "***" ?>Se registro el :</br></td>
<td align ="left" Height="30" Width="140" background="ImagenInicio/fondo.jpg"><br><?php echo "***" ?> <?php echo $Sexo ?></br><br><?php echo "***" ?><?php echo $Fecha ?></br><br><?php echo "***" ?><?php echo $Registro ?></br></td>
<td align ="center" Height="30" Width="390" background="ImagenInicio/fondo.jpg"></td> </tr>


</tr>



<?php
}


?>
</table>


<script type="text/javascript">
//Redireccionar con el formulario creado
document.formulario.submit();
</script>




<p>**</p>
<p>**</p>
</form>
</body>


<table border="0" Height="30" width="1400" cellpadding="0" cellspacing="0" align ="center">
<tr>
<td align="center" background="http://i46.tinypic.com/qsur9t.jpg"><font color=red >



<?php



$totalPag = ceil($total/$limit);
$links = array();
for( $i=1; $i<$pag2 ; $i++)
{
$links[] = "<li><a href=\"?pag=$i\">$i</a></li>";
}


echo implode(" - ", $links);

?>
<li class="next"><a href="?page=8">Next »</a></li>
</ul>

</font>
</td>
</tr>
</table>
__________________
Excelente WebHosting -> www.zetahosting.net
[email protected]
Twitter: @zetahosting
  #5 (permalink)  
Antiguo 27/02/2013, 21:50
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Como Hacer links de paginación

Cita:
Iniciado por zetahosting Ver Mensaje
porque no probas asi amigo:
ok muchas gracias ,agregue eso a mi codigo nuevo y funciona bien

no entiendo como una cosa tan simple no se me ocurrio por la cabeza

eso que me diste

$pag2=$pagina+10;

yo estaba hasciendo otra cosa ..... plop

solo me faltaria q solo llegara al número de registros , osea 12 y no pase de ahi

pero creo que eso ya debo hacerlo ....

Última edición por awik; 27/02/2013 a las 22:12
  #6 (permalink)  
Antiguo 27/02/2013, 22:21
Avatar de zetahosting  
Fecha de Ingreso: octubre-2011
Mensajes: 119
Antigüedad: 12 años, 6 meses
Puntos: 2
Respuesta: Como Hacer links de paginación

jeje, si era simple, no entendi lo que te falta.

Si no te sale explicame un poco mejor y te doy una mano

Abrazo!
__________________
Excelente WebHosting -> www.zetahosting.net
[email protected]
Twitter: @zetahosting
  #7 (permalink)  
Antiguo 27/02/2013, 22:35
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como Hacer links de paginación

hola mira si quieres prueba este script que hice de paginacion, es facil de aplicar

Código PHP:
Ver original
  1. <?php
  2.             // maximo por pagina
  3. if(!isset($orden))
  4.     {
  5.        $orden="id";
  6.     }          
  7. $limit = 20;
  8. @$pag = 0;
  9. // pagina pedida
  10. @$pag =  $_GET["pag"];
  11. if ($pag < 1)
  12. {
  13.   @ $pag = 1;
  14. }
  15. $offset = (@$pag-1) * $limit;
  16. $sql = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM usuarios ORDER BY ".$orden." LIMIT $offset, $limit ") or die(mysql_error());
  17. $sqlTotal = "SELECT FOUND_ROWS() as total";
  18.  
  19. $rsTotal = mysql_query($sqlTotal);
  20. $rowTotal = mysql_fetch_assoc($rsTotal);
  21. // Total de registros sin limite
  22.  echo "<font face='Times New Roman, Times, serif' size='3'><center></br>";
  23. echo "Actualmente existen <b>";
  24. echo $total = $rowTotal["total"];
  25. echo "</b> <b>Usuarios </b> registrados,";
  26. echo " ordenados por <b>".$orden."</b>";
  27. echo "<br><br>";
  28. echo "<hr size='1' noshade>";
  29. echo "<br>";
  30. $total = $rowTotal["total"];
  31. $i=1;
  32. while($array=mysql_fetch_array($sql)) {
  33.            ?>
  34.            <tr>
  35.              <td align="center" valign="middle"><?php echo $array['id']; ?></td>
  36.              <td align="center" valign="middle"><?php echo $array['nombre']; ?></td>
  37.              <td align="center" valign="middle"><?php echo $array['telefono']; ?></td>
  38.              <td align="center" valign="middle"><?php echo $array['cargo']; ?></td>
  39.              <td align="center" valign="middle"><?php echo $array['usuario']; ?></td>
  40.              <td align="center" valign="middle"><?php echo $array['nivel']; ?></td>
  41.              <td align="center" valign="middle"><label>
  42.              <img src="../images/editar.png" onclick="
  43.              document.getElementById('id').value = <?php echo $array['id']; ?>,
  44.              document.getElementById('nombre').value = <?php echo empty($array['nombre']) ? '0' : "'".$array['nombre']."'";?>,
  45.              document.getElementById('telefono').value = <?php echo empty($array['telefono']) ? '0' : "'".$array['telefono']."'"; ?>,
  46.              document.getElementById('cargo').value = <?php echo empty($array['cargo']) ? '0' : "'".$array['cargo']."'"; ?>,
  47.              document.getElementById('usuario').value = <?php echo empty($array['usuario']) ? '0' : "'".$array['usuario']."'"; ?>,
  48.              document.getElementById('nivel').value = <?php echo empty($array['nivel']) ? 'ADMINISTRADOR' : "'".$array['nivel']."'"; ?>"  border="0"title="Actualizar Usuario"/>
  49.     </label></td>
  50.              <td align="center" valign="middle">
  51.              <a href="usuarios.php?eliminar=<?php echo base64_encode('eliminar_usuario'); ?>&id=<?php echo base64_encode($array['id']); ?>" >
  52.     <img src="../images/eliminar.png" title="Eliminar Usuario" onClick="return confirm('&iquest;Esta seguro que desea Eliminar este Usuario? \n .::Una vez Eliminado no se podr&aacute; recuperar de la Base de Datos::.')"></a>
  53.              </td>
  54.            </tr>
  55.            </tr>
  56.            <?php $i++; } ?>
  57.          </table>
  58.          <p align="center"><strong>Páginas: <span class="Estilo5">|</span></strong>
  59.            <strong>
  60.            <?php
  61.          $totalPag = ceil($total/$limit);
  62.          $links = array();
  63.          for( $i=1; $i<=$totalPag ; $i++)
  64.          {
  65.          
  66.             $links[] = "<a href=\"?pag=$i\">$i</a>";
  67.          }
  68.          echo implode("<strong> | </strong>", $links);
  69.       ?>
  70.            <span class="Estilo5">|</span></strong></p>
  #8 (permalink)  
Antiguo 27/02/2013, 22:36
ruben_chirinos_1985
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como Hacer links de paginación

tienes q agregarle la conexion a la bd, pero eso ya seria de tu parte de como trabajes la conexion
  #9 (permalink)  
Antiguo 28/02/2013, 19:03
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Como Hacer links de paginación

Cita:
Iniciado por zetahosting Ver Mensaje
jeje, si era simple, no entendi lo que te falta.

Si no te sale explicame un poco mejor y te doy una mano

Abrazo!
Ola por fin pude arreglarlo sin ninguna falla , todo quedo como yo queria
pero ahora surgio un problema medio extraño que no entiendo
mira por ejemplo tengo 12 registros ....
y supongamos que pongo que solo muestre una persona por cada página
entonces tendria 12 páginas para mostrar .... OK todo bien hasta ahi
se muestran exactamente solo 12 ...

Ahora mira , cuando me logueo en la página y veo la lista de usuarios
en ves de salir solo las 12 páginas ( por que son solo 12 registros )

osea deberia salirme solo 12 páginas , por que puse que muestre un usuario por cada página ... pero me salen 14 registros :S
osea me salen 14 páginas ,( siempre le suma 2 ) :S


y cuando me deslogueo de la página todo vuelve ala normalidad ...

En pocas palabras , cuando me logueo en la página , se aumentan dos registros :S
sabes a que se deba esto ?

Etiquetas: formulario, mysql, registro, select, sql, tabla, 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 07:12.