Realmente solo me falla los botones de adelante y atras, ojo, estoy aprendiendo, esto es una paginación sencilla con PDO.
index.php
Código PHP:
<?php
try{
$conexion = new PDO('mysql:host=localhost;dbname=curso_php_mysql', 'root', '');
}catch(PDOException $e){
echo "Error: " . $e->getMessage();
die();
}
// Esto es lo mismo que hacer un 'if' 'else' -- si 'no se pone if si no la condicion' entonces '?' si no ':'
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1 ;
// Post por cada pagina
$PostPorPagina = 5;
$inicio = ($pagina > 1) ? ($pagina * $PostPorPagina - $PostPorPagina) : 0;
// SQL_CALC_FOUND_ROWS nos calcula cuantas filas hay en la tabla
$articulos = $conexion->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM articulos LIMIT $inicio, $PostPorPagina");
// Ejecutamos la consulta
$articulos->execute();
$articulos = $articulos->fetchAll();
// Ver si hay articulos para una $pagina, si no reenviar al index.php
if(!$articulos){
header('location: index.php');
}
// Calculamos el numero total de articulos
$TotalArticulos = $conexion->query('SELECT FOUND_ROWS() as total');
$TotalArticulos = $TotalArticulos->fetch()['total'];
// Redondeamos al alza o valor superior con ceil()
$NumeroPaginas = ceil($TotalArticulos / $PostPorPagina);
require('index.view.php');
?>
index.view.php
Código PHP:
<!doctype html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Paginacion</title>
<link href="https://fonts.googleapis.com/css?family=Oswald" rel="stylesheet" type="text/css">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="contenedor">
<h1>Artículos</h1>
<section class="articulos">
<ul>
<?php foreach($articulos as $fila): ?>
<li><?php echo $fila['id'] . '.- ' . $fila['articulo'] ?></li>
<?php endforeach; ?>
</ul>
</section>
<section class="paginacion">
<ul>
<!-- Establecemos cuando el boton anterior esta desabilitado -->
<?php if($pagina == 1): ?>
<li class="desable">«</li>
<?php else: ?>
<li><a href="?pagina=<?php $pagina - 1 ?>">«</a></li>
<?php endif; ?>
<!-- Ejecutamos un ciclo para mostrar las paginas -->
<?php
for ($i = 1; $i <= $NumeroPaginas; $i++){
if($pagina == $i){
echo "<li class='active'><a href='?pagina=$i'>$i</a></li>";
}else{
echo "<li><a href='?pagina=$i'>$i</a></li>";
}
}
?>
<!-- Establecemos cuando el boton siguiente esta desabilitado -->
<?php if($pagina == $NumeroPaginas): ?>
<li class="desable">»</li>
<?php else: ?>
<li><a href="?pagina=<?php $pagina + 1 ?>">»</a></li>
<?php endif; ?>
</ul>
</section>
</div>
</body>
</html>
Mi problema es que el boton atras no van bien, el de atras me envía siempre a la pagina 1 y el boton adelante no funciona.
Los problemas creo que están aquí:
Código PHP:
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1 ;
y aquí:
Código PHP:
<!-- Establecemos cuando el boton anterior esta desabilitado -->
<?php if($pagina == 1): ?>
<li class="desable">«</li>
<?php else: ?>
<li><a href="?pagina=<?php $pagina - 1 ?>">«</a></li>
<?php endif; ?>
<!-- Establecemos cuando el boton siguiente esta desabilitado -->
<?php if($pagina == $NumeroPaginas): ?>
<li class="desable">»</li>
<?php else: ?>
<li><a href="?pagina=<?php $pagina + 1 ?>">»</a></li>
<?php endif; ?>
¿Como podría resolverlo?
Muchísimas gracias de antema, un saludo.