PHP - Paginación.

   
Vista:
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 18/11/2013 19:26:09
Hola, muy buenas.

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

Dispongo de esto:

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

Pero ya me he quedado atrancado me podrían decir por favor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 18/11/2013 21:38:06
Hola Tomás, he intentado hacer algo sencillo, aunque no lo he probado... es básico, solo tiene siguiente y anterior...

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

Si nos puedes comentar si funciona...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 19/11/2013 15:25:30
Lo he probado y sirve un 50% solo falta la otra mitad que es mostrar siguiente y atrás...
(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:

1
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:

1
if($registros[0]["Total"]>(($pg+1)*$cantidad))

Te agradecería tu colaboración.
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 19/11/2013 16:40:29
Ya lo solucione haciendole una fetch...

Pero ahora el problema es el siguiente:

tengo esto:

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

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?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 19/11/2013 18:10:47
Huy perdon Tomás, me lie...

En vez de:
1
if($regs["Total"]>(($pg+1)*$cantidad))
creo que tendría que ser:
1
if($pg>0)

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 19/11/2013 18:35:30
Si pongo eso se me oculta anterior y siguiente.

Aquí dispongo el código:

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

¿Cómo hacer para si cuando pase a la última página no hay más me muestre anterior?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 19/11/2013 18:37:59
Hola Tomás, pero en el código que nos muestras, no has puesto lo que te he comentado, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 19/11/2013 18:40:35
No por que he puesto el que muestra anterior y siguiente...

Si pongo en el if lo que me dices se oculta las palabras: anterior y siguiente.

Es para ver si algo anda mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 19/11/2013 19:22:18
Hola tomas, creo que algo haces mal... son dos if diferentes... uno no tiene porque interceptar con el otro...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 19/11/2013 19:29:27
¿Y cuál puede ser el error?.

Por que el botón anterior no funciona se queda sobre la misma página.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 19/11/2013 21:37:53
Hola Tomás, no entiendo muy bien que te esta pasando... la verdad no se muy bien como ayudarte...

Estaría muy bien, que nos mostraras la imagen de como lo ves, y el código fuente para poder ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Tomás

Paginación.

Publicado por Tomás (81 intervenciones) el 20/11/2013 19:00:22
Intenté hacer algunas modificaciones y salió lo correspondido:

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

Gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Paginación.

Publicado por xve (5513 intervenciones) el 20/11/2013 20:56:06
Gracias por comentarlo y mostrarlo Tomás!!!

Me alegra que lo hayas conseguido!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar