J'ai un problème que je n'arrive pas à résoudre dans le bout de code permettant de limiter la pagination du nombre de livres par auteur.
Avant de cliquer sur les liens de pagination, lorsque j'affiche un auteur par la méthode GET, j'obtiens un page avec l'auteur en question, avec une url de type ".php?id=", où id correspond au nom de l'auteur, ainsi que la liste de livres, limitée par la fonction LIMIT de ma requête SQL, et obtenu par la jointure de mes bases sur cette même requête. Jusque là tout va bien ou presque.
Mon problème survient lorsque je veux passer aux ouvrages suivant via les liens de pagination.
En cliquant sur le lien, j'obtiens bien une url de type (.php?page=2) censée reprendre l'affichage des livres suivants, mais cette page n'affiche nie les données de l'auteur en question ni la suite de la liste des livres obtenu lors de l'affichage de ma première requête de l'auteur de méthode GET ".php?id=".
Merci pour votre aide.
<?php
include_once('connections/connect.inc.php') ;
class Pager{
public static function getPagerData($num_pages, $limit, $page){
$num_pages = ceil($num_pages / $limit);
$page = max($page, 1);
$page = min($page, $num_pages);
$offset = ($page - 1) * $limit;
$ret = new stdClass;
$ret->offset = $offset;
$ret->limit = $limit;
$ret->num_pages = $num_pages;
$ret->page = $page;
return $ret;
}
}
$page_name = htmlentities($_SERVER['PHP_SELF']);
$limit = 2;
if(!isset($_data))
{
try
{
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "
SELECT
count(livres.id)
AS total
FROM livres
INNER JOIN auteurs
ON auteurs.id = livres.auteur_id
WHERE auteurs.id = livres.id";
$req = $bdd->prepare($query);
try {
$req->execute();
}
catch(PDOException $e) {
die('Erreur MySQL : ' . $e->errorInfo[2]);
}
$data = $req->fetch(PDO::FETCH_COLUMN);
}
catch (Exception $e)
{
$data = 0;
}
}
if( filter_has_var(INPUT_GET, "page") == false)
{
$page = 1;
}
elseif(filter_var($_GET['page'], FILTER_VALIDATE_INT, array("min_range"=>1, "max_range"=>$data)) == false)
{
$page = 1;
}
else
{
$page = (int)$_GET['page'];
}
if($data == 0)
{
$content = 'Il n\'y a pas de données.';
}
else
{
$pager = Pager::getPagerData($data, $limit, $page);
$offset = $pager->offset;
$limit = $pager->limit;
$page = $pager->page;
$menu = '';
if($page != 1)
{
$menu .= '<li><a href="'.$page_name.'?page='.($page - 1).'"><< PREV </a></li>';
}
for ($i = 1; $i <= $pager->num_pages; $i++)
{
if ($i == $pager->page)
{
$menu .= '<li class="selected">'.$i.'</li>';
}
else
{
$menu .= '<li><a href="'.$page_name.'?page='.$i.'">'.$i.'</a></li>'."\n";
}
}
if ($page < $pager->num_pages)
{
$menu .= '<li><a href="'.$page_name.'?page='.($page + 1).'"> NEXT >></a></li>';
}
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = <<<EOQ
SELECT
livres.id,
livres.titre,
livres.sous_titre,
livres.lien_img,
livres.parution,
livres.resume,
livres.prix,
auteurs.prenom_nom AS auteur_nom,
auteurs.id AS auteur_id,
auteurs.lien_img AS auteur_img,
auteurs.biographie
FROM livres
INNER JOIN auteurs
ON auteurs.id = livres.auteur_id
WHERE auteurs.id = :id
LIMIT :limit
OFFSET :offset
EOQ;
$req = $bdd->prepare($query);
$req->bindParam(':limit', $limit, PDO::PARAM_INT);
$req->bindParam(':offset', $offset, PDO::PARAM_INT);
$req->bindValue(':id', (int)$_GET['id'], PDO::PARAM_INT);
try {
$req->execute();
}
catch(PDOException $e) {
die('Erreur MySQL : ' . $e->errorInfo[2]);
}
$res = $req->fetchAll(PDO::FETCH_ASSOC);
$content = '';
foreach ($res as $row)
{
$content .= '
<article id="content2">
<img src="img/cover_img/'.$row['lien_img'].'.png" alt="" id="cover">
<h2 class="titre"><a href="livre_numerique.php?id='.$row['id'].'">'.$row['titre'].'</a></h2>
<h3 class="titre">'.$row['sous_titre'].'</h3>
<p>Paru le : '.$row['parution'].'
</p>
<p>Description : '.$row['resume'].'</p>
<p class="prix">À partir de : '.$row['prix'].' €</p>
</article>';
}
}
?>