Foros del Web » Programando para Internet » PHP »

Paginación

Estas en el tema de Paginación en el foro de PHP en Foros del Web. Hola, muy buenas. Dispongo de un problema... quiero hacer un sistema de paginación de resultados. Dispongo de esto: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $pg ...
  #1 (permalink)  
Antiguo 18/11/2013, 12:23
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 10 años, 7 meses
Puntos: 9
Paginación

Hola, muy buenas.

Dispongo de un problema... quiero hacer un sistema de paginación de resultados.

Dispongo de esto:

Código PHP:
Ver original
  1. $pg = ((isset($_GET['page']) && !empty($_GET['page']))?$_GET['page']:false);
  2.     $cantidad = 2;
  3.  
  4.     $sacarcoment = mysqli_query($conexion, "SELECT comentario,fecha,usuario FROM comentarios ORDER BY id DESC LIMIT $cantidad")or die(mysqli_error());
  5.     while($coment = mysqli_fetch_assoc($sacarcoment)){
  6.         echo "Comentario: ".$coment['comentario']." Fecha: ".$coment['fecha']." Usuario: ".$coment['usuario']."<br>";
  7.     }

Pero ya me he quedado atrancado me podrían decir por favor.
  #2 (permalink)  
Antiguo 18/11/2013, 13:23
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Paginación

ya existen clases paginadoras, además la lógica del paginado es simple, sin embargo hay clases complejas que usan el "query walker" pero eso es más complejo.

inicia con una clase paginadora normal, hay muchas disponibles.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 19/11/2013, 08:25
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 10 años, 7 meses
Puntos: 9
Respuesta: Paginación

Hola, muy buenas tengo:

Código PHP:
Ver original
  1. $pg = ((isset($_GET['page']) && !empty($_GET['page']))?$_GET['page']:0);
  2. $cantidad = 2;
  3.  
  4. $registros = mysqli_query($conexion, "SELECT count(*) as Total FROM comentarios") or die(mysqli_error());
  5. $sacarcoment = mysqli_query($conexion, "SELECT comentario,fecha,usuario FROM comentarios ORDER BY id DESC LIMIT $pg,$cantidad") or die(mysqli_error());
  6.  
  7. while($coment = mysqli_fetch_assoc($sacarcoment)){
  8.     echo "Comentario: ".$coment['comentario']." Fecha: ".$coment['fecha']." Usuario: ".$coment['usuario']."<br>";
  9. }
  10.  
  11. if($registros[0]["Total"]>(($pg+1)*$cantidad))
  12. {
  13.     echo "<a href='".$_SERVER["PHP_SELF"]."?pg=".$pg++."'>siguiente</a>";
  14. }
  15. if($registros[0]["Total"]>$cantidad && $pg>0)
  16. {
  17.     echo "<a href='".$_SERVER["PHP_SELF"]."?pg=".$pg--."'>anterior</a>";
  18. }

Y me da el siguiente error:

(Lo que es los registros se muestran lo que no se muestra es siguiente, y anterior)
Que no se muestra por que da el siguiente error:

Código:
Fatal error: Cannot use object of type mysqli_result as array in C:\myxampp\htdocs\me\coment.php on line 14
Y está es la línea 14:

Código PHP:
Ver original
  1. if($registros[0]["Total"]>(($pg+1)*$cantidad))

Gracias.
  #4 (permalink)  
Antiguo 19/11/2013, 09:06
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginación

Debes usar alguna de las funciones mysqli_fetch_* en la variable $registros. Como lo hiciste con $sacarcoment.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 19/11/2013, 09:16
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 10 años, 7 meses
Puntos: 9
Respuesta: Paginación

Te entiendo pero no sé cómo ponerlo me lío:

Código PHP:
Ver original
  1. if($registros[0]["Total"]>(($pg+1)*$cantidad))

Algo asín pero no se cómo colocarlo para que este bien.

Código PHP:
Ver original
  1. if(mysqli_fetch_assoc($registros[0]["Total"])>(($pg+1)*$cantidad))
  #6 (permalink)  
Antiguo 19/11/2013, 09:26
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginación

Debajo de $registros = mysqli_query... Colocas:

Código PHP:
Ver original
  1. $regs = mysqli_fetch_assoc($registros);

y ya lo usas abajo como:

Código PHP:
Ver original
  1. $regs['Total']
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 19/11/2013, 09:37
Avatar de TSG
TSG
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 373
Antigüedad: 10 años, 7 meses
Puntos: 9
Respuesta: Paginación

Ya lo solucione haciendole una fetch...

Pero ahora el problema es el siguiente:

tengo esto:

Código PHP:
Ver original
  1. $pg = ((isset($_GET['page']) && !empty($_GET['page']))?$_GET['page']:0);
  2. $cantidad = 2;
  3.  
  4. $registros = mysqli_query($conexion, "SELECT count(*) as Total FROM comentarios") or die(mysqli_error());
  5. $regs = mysqli_fetch_assoc($registros);
  6. $sacarcoment = mysqli_query($conexion, "SELECT comentario,fecha,usuario FROM comentarios ORDER BY id DESC LIMIT $pg,$cantidad") or die(mysqli_error());
  7.  
  8. while($coment = mysqli_fetch_assoc($sacarcoment)){
  9.     echo "Comentario: ".$coment['comentario']." Fecha: ".$coment['fecha']." Usuario: ".$coment['usuario']."<br>";
  10. }
  11.  
  12. if($regs["Total"]>(($pg+1)*$cantidad))
  13. {
  14.     echo "<a href='".$_SERVER["PHP_SELF"]."?page=".$pg++."'>anterior</a><br>";
  15. }
  16. if($regs["Total"]>$cantidad && $pg>0)
  17. {
  18.     echo "<a href='".$_SERVER["PHP_SELF"]."?page=".$pg--."'>siguiente</a>";
  19. }

Y cuándo voy a la ultima pagina me sale, siguiente y no anterior y quiero que si no hay más página nada más salga anterior ¿puede ser?
  #8 (permalink)  
Antiguo 19/11/2013, 12:32
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginación

Para esto existen muchas clases que funcionan perfectamente y a mi me gustan las que usan arrays. Supongo que quieres aprender a hacer uno.

Basándome en lo que tienes, podrías hacer algo así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $conexion = new mysqli('localhost', 'root', '12345', 'test');
  4.  
  5. $pg = ((isset($_GET['page']) && !empty($_GET['page'])) ? (int) $_GET['page'] : 1);
  6. $cantidad = 20;
  7. $inicio = ($pg-1) * $cantidad;
  8.  
  9. $registros = mysqli_query($conexion, "SELECT count(*) as Total FROM personas") or die(mysqli_error($conexion));
  10. $regs = mysqli_fetch_assoc($registros);
  11.  
  12. $paginas = floor($regs['Total'] / $cantidad);
  13.  
  14. if ($pg <= ($paginas+1) && $pg > 0 && !((isset($_GET['page']) && $_GET['page'] == 0))) {
  15.  
  16.     $sacarcoment = mysqli_query($conexion, "SELECT * FROM personas ORDER BY id DESC LIMIT $inicio,$cantidad") or die(mysqli_error($conexion));
  17.    
  18.     while($coment = mysqli_fetch_assoc($sacarcoment)){
  19.         echo "Id: {$coment['id']} Nombre: {$coment['nombre']} <br />";
  20.     }
  21.      
  22.     if($pg > 1) {
  23.         $ant = $pg - 1;
  24.         echo "<a href=\"{$_SERVER["PHP_SELF"]}?page=1\">primera</a>";
  25.         echo " <a href=\"{$_SERVER["PHP_SELF"]}?page=$ant\">anterior</a>";
  26.     }
  27.    
  28.     if($pg <= $paginas) {
  29.         $sig = $pg + 1;
  30.         echo " <a href=\"{$_SERVER["PHP_SELF"]}?page=$sig\">siguiente</a>";
  31.         $ult = $paginas + 1;
  32.         echo " <a href=\"{$_SERVER["PHP_SELF"]}?page=$ult\">ultima</a> ";
  33.     }
  34.  
  35. } else {
  36.     echo 'La pagina solicitada no existe';
  37. }

Ahí te dejo para que lo mejores.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: fecha, mysql, select, sql
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 09:20.