PHP - Errores en paginación en PHP

 
Vista:
sin imagen de perfil

Errores en paginación en PHP

Publicado por Katze (6 intervenciones) el 20/06/2018 01:00:19
Tengo un problema con el siguiente código. Lo que debería hacer es mostrar una paginación en la que se muestren nueve productos por página. Eso lo hace. El problema está en las páginas que genera. Tal y como tengo el código y los productos ahora mismo (11 productos), me hace la paginación bien, pero en vez de mostrarme dos páginas, me muestra tres, y la tercera la muestra en blanco, pero es que si le cambio el número de elementos a mostrar por 6, me salen 5 páginas y sólo me muestra los productos en las dos primeras (que vuelvo a decir que salen bien, 6 y 5, respectivamente). ¿Cuál es el error que tengo para que me salgan tantas páginas?

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<section class="filtro">
    <form method="post">
        <h3>Ordenar por:
            <select name="ordenar">
                <option value="1">Orden alfabético (A-Z)</option>
                <option value="2">Orden alfabético inverso (Z-A)</option>
                <option value="3">Precio más bajo a más alto</option>
                <option value="4">Precio más alto a más bajo</option>
                <option value="5">Orden predeterminado</option>
            </select>
            <button type="submit" class="btn btn-danger"><b>Aplicar</b></button>
        </h3>
    </form>
</section>
 
<div class="mostrar_productos">
    <?php
        //Muestra los productos y contiene las funcionalidades del filtro
        $conexion = mysqli_connect($servidor, $usuario_BD, $contrasena_BD, $basedatos);
        mysqli_set_charset($conexion, "utf8");
 
        //Paginación
        $elementos = 6;
 
        if (isset($_GET['pagina_numerada'])) {
            $pagina_numerada = $_GET['pagina_numerada'];
        }else{
            $pagina_numerada = 1;
        }
 
        $empieza = ($pagina_numerada-1) * $elementos;
 
        //Condiciones del filtro y de la paginación
        if(!isset($_POST['ordenar'])){
            $consulta = "SELECT * FROM producto WHERE categoria = 'cuerda' LIMIT $empieza, $elementos";
        }else{
            if ($_POST['ordenar'] == "1"){
                $consulta = "SELECT * FROM producto WHERE categoria='cuerda' order by nombre_producto asc ";
                echo "<h4>Productos ordenados alfabéticamente (A-Z)</h4>";
            }
            if ($_POST['ordenar'] == "2"){
                $consulta = "SELECT * FROM producto WHERE categoria='cuerda' order by nombre_producto desc";
                echo "<h4>Productos ordenados alfabéticamente de forma inversa (Z-A)</h4>";
            }
            if ($_POST['ordenar'] == "3"){
                $consulta = "SELECT * FROM producto WHERE categoria='cuerda' order by precio asc";
                echo "<h4>Productos ordenados de precio más bajo a más alto</h4>";
            }
            if ($_POST['ordenar'] == "4"){
                $consulta = "SELECT * FROM producto WHERE categoria='cuerda' order by precio desc";
                echo "<h4>Productos ordenados de precio más alto a más bajo</h4>";
            }
            if ($_POST['ordenar'] == "5"){
                $consulta = "SELECT * FROM producto WHERE categoria='cuerda'";
            }
        }
 
        $resultado = mysqli_query($conexion, $consulta);
 
        //Muestra productos
        while ($fila = mysqli_fetch_assoc($resultado)) {
            echo "<div class='col-md-3 col-xs-5 producto_individual'>";
            $consulta2 = "SELECT * FROM producto WHERE id_producto = " .$fila["id_producto"] ."";
            $resultado2 = mysqli_query($conexion, $consulta2);
 
            echo "<h2>" . $fila['nombre_producto'] . "</h2>";
            echo "<img src='imagenes/" .$fila["imagen"] . "' width = 100px>";
            echo "<p>" . $fila['descripcion_corta'] . "</p>";
            echo "<p>Precio: " . $fila['precio'] . " €</p>";
            echo "<a class='btn btn-danger' href='producto_individual.php?id_producto=" .$fila["id_producto"]. "'><b>Ver más</b></a> ";
 
            //Formulario oculto que reoge los datos del producto para guardarlos en el carrito.
            echo "<form action='carrito.php' method='post' name='compra' style='display:inline;'>";
            echo "<input name='id_producto' type='hidden' value='".$fila["id_producto"]."'/>";
            echo "<input name='nombre_producto' type='hidden' value='".$fila["nombre_producto"]."'/>";
            echo "<input name='precio' type='hidden' value='".$fila["precio"]."'/>";
 
            echo "<button type='submit' class='btn btn-danger' name='comprar' value='comprar'><b>Comprar</b></button> ";
            echo "<input style='width:35px' name='cantidad' type='number' value='1'/>";
 
            echo "</form></div>";
        }
 
 
        $consulta3 = "SELECT * FROM producto";
        $resultado3 = mysqli_query($conexion, $consulta3);
        $total_registros = mysqli_num_rows($resultado3);
 
        $total_paginas = ceil($total_registros / $elementos);
        echo "<center><a href='cuerda.php?pagina_numerada=1'>". 'Primera '."</a>";
 
        for ($i=1; $i <= $total_paginas; $i++) {
            echo "<a href='cuerda.php?pagina_numerada=".$i."'>".$i."</a>";
        }
 
        //Link a última página
        echo "<a href='cuerda.php?pagina_numerada=$total_paginas'>".' Última'."</a></center>";
        mysqli_close($conexion);
    ?>
</div>
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

Errores en paginación en PHP

Publicado por Raymundo (15 intervenciones) el 20/06/2018 13:11:19
Buenas Katze

Saca en un echo, los valores que tienen $elementos y $total_registros antes de la línea 89. A ver si te salen 11 y 6, para comprobar que efectivamente esté bien la operación del ceil.

Un saludo
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