Probleme de pagination

Fermé
WiseCrow86 Messages postés 1 Date d'inscription jeudi 5 novembre 2020 Statut Membre Dernière intervention 5 novembre 2020 - 5 nov. 2020 à 13:16
yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 - 5 nov. 2020 à 17:37
Bonjour,

alors je cherche le probleme avec ma pagination sur mon site .

(c est mon premier site pour apprendre php).

Probleme c est que quand je clique pour me afficher une categorie de articles et puis je change de page et puis je reviens vers la première page elle m affiche un article d une autre categorie.

J ai donc ma page index.php avec une categorie d articles avec des liens (ahref qui passe une valeur qui represente la categorie selectionnée.) apres le clique elle redirige vers un page - fetch.php qui recupere la valeur et affiche les articles de cette categorie,la pagination calcule les page de cette categorie par une simple requete SELECT COUNT where categorie_id=valeur.

Puis de sous il y a une pagination simple avec des numeros des pages ,quand je clique sur le numero de la page elle nous envois vers page.php qui montre la prochaine page.

Je ne comprend pas pourquoi quand je reviens vers la premiere page ca m affiche un article d une autre categorie.

je vous joint la partie code de trois doc php:

je vous joint la partie code de trois doc php:

voila la partie de la page index.php

...
<!-- Page Content -->
<div class="container">
<div class="row">
<!-- Blog Entries Column -->
<div class="col-md-8" id="txtHint">
<br>
<!-- Blog -->
<?php
//pagination
$limit = 2;
$sql = "SELECT COUNT(id) FROM articles";
$rs_result = mysqli_query($conn, $sql);
$row = mysqli_fetch_row($rs_result);
$total_records = $row[0];
$total_pages = ceil($total_records / $limit);
//pagination script pause ,continue at blog end as page count
$stmt = $db->query('SELECT id, title, short_details, pubdate FROM articles ORDER BY id DESC');
$row = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<div class="card mb-4">
<div class="card-body">
<h2 class="card-title">
<?php echo '<a href="view.php?id='.$row['id'].'">'.$row['title'].'</a>'; ?>
</h2>
<div class="card-footer text-muted">
<?php echo '<p>Posted on '. $row['pubdate'].'</p>'; ?>
<p class="card-text">
<?php echo '<p>'.$row['short_details'].'</p>'; ?>
</p>
<?php echo '<p><a href="view.php?id='.$row['id'].'">Read More</a></p>'; ?>
</div>
</div>
</div>
<!-- Blog -->
<?php $row = $stmt->fetch(PDO::FETCH_ASSOC); ?>
<div class="card mb-4">
<div class="card-body">
<h2 class="card-title">
<?php echo '<a href="view.php?id='.$row['id'].'">'.$row['title'].'</a>'; ?>
</h2>
<div class="card-footer text-muted">
<?php echo '<p>Posted on '. $row['pubdate'].'</p>'; ?>
<p class="card-text">
<?php echo '<p>'.$row['short_details'].'</p>'; ?>
</p>
<?php echo '<p><a href="view.php?id='.$row['id'].'">Read More</a></p>'; ?>
</div>
</div>
</div>
<div class="col-md-8" id="txtHint">
<ul class='pagination text-center' id="pagination">
<?php
if(!empty($total_pages)):
for($i=1; $i<=$total_pages; $i++):
if($i == 1):?>
<li class='active' id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php else:?>
<li id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php endif;?>
<?php
endfor;
endif;?>
</ul>
</div>
</div><!-- </div class="col-md-8"-->
<!-- Sidebar Widgets Column -->
<div class="col-md-4">
<!-- Search Widget -->
<div class="card my-4">
<div class="card bg-success">
<h5 class="card-header">Search</h5>
<div class="card-body">
<div class="search-box">
<input type="text" autocomplete="off" placeholder="Search ..." />
<div class="result"></div>
</div>
</div>
</div>
</div>
<!-- Categories Widget -->
<div class="card my-4">
<div class="card bg-success">
<h5 class="card-header">Categories</h5>
<div class="card-body">
<div class="row">
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="fetch.php?value_key=1">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
<li>
<a href="fetch.php?value_key=2">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
<li>
<a href="fetch.php?value_key=3">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
</ul>
</div>
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="fetch.php?value_key=4">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
<li>
<a href="fetch.php?value_key=5">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
<li>
<a href="fetch.php?value_key=6">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
</ul>
</div>
<div class="col-lg-6">
<ul class="list-unstyled mb-0">
<li>
<a href="fetch.php?value_key=7">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
<li>
<a href="fetch.php?value_key=8">
<?php
$cat = $result->fetch(PDO::FETCH_ASSOC);
$articles_count = $db->query('SELECT * FROM articles WHERE categorie_id ="'.$cat['id'].'"');
echo '<li>' . $cat['title'] . ' ('.$articles_count->rowCount() .')</li>';
?>
</a>
</li>
</div>
</div>
</div>
</div>
</div>
...



voila la partie de la page fetch.php:
...
<!-- Page Content -->
<div class="container">
<div class="row">
<!-- Blog Entries Column -->
<div class="col-md-8" id="txtHint">
<br>
<!-- Blog -->
<?php
$limit = 2;
$q = $_GET['value_key'];
$sql = "SELECT COUNT(id) FROM articles WHERE categorie_id = $q";
$rs_result = mysqli_query($conn, $sql);
$row = mysqli_fetch_row($rs_result);
$total_records = $row[0];
$total_pages = ceil($total_records / $limit);

if (isset($_GET["page"])) { $page = $_GET["page"]; }
else { $page=1; };
$start_from = ($page-1) * $limit;

//FETCH POSTS
$stmt = $db->prepare('SELECT id, title, short_details, pubdate FROM articles WHERE categorie_id = "'.$q.'" ORDER BY pubdate ASC LIMIT '.$start_from.', '.$limit.'');
$stmt->execute(array(':q' => $q));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo "<br>";
echo "<div class='card mb-4'>" . "<div class='card-body'>";
echo "<h2 class='card-title'>";
echo $row['title'] . "</h2>";
echo "<div class='card-footer text-muted'>";
echo $row['pubdate'];
echo "</h2>";
echo "<p class='card-text'>";
echo $row['short_details'];
echo "</p>";
echo '<p><a href="view.php?id='.$row['id'].'">Read More</a></p>';
echo "</div>" . "</div>" . "</div>";
};
?>

<!-- pagination section-->
<div class="col-md-8" id="pagination">
<ul class='pagination text-center'>
<?php if(!empty($total_pages)):for($i=1; $i<=$total_pages; $i++):
if($i == 1):?>
<li class='active' id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php else:?>
<li id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php endif;?>
<?php endfor;endif;?>
</ul>
</div>
</div><!-- </div class="col-md-8"-->

...
et donc la page.php:

<!-- Page Content -->
<div class="container">
<div class="row">
<!-- Blog Entries Column -->
<div class="col-md-8" id="txtHint">
<br>
<!-- Blog -->
<?php
$limit = 2;
$sql = "SELECT COUNT(id) FROM articles";
$rs_result = mysqli_query($conn, $sql);
$row = mysqli_fetch_row($rs_result);
$total_records = $row[0];
$total_pages = ceil($total_records / $limit);

if (isset($_GET["page"])) { $page = $_GET["page"]; }
else { $page=1; };
$start_from = ($page-1) * $limit;

$stmt= $db->query("SELECT id,title,short_details,pubdate FROM articles ORDER BY pubdate ASC LIMIT $start_from, $limit");
$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<div class='card mb-4'>" . "<div class='card-body'>";
echo "<h2 class='card-title'>";
echo $row['title'] . "</h2>";
echo "</h2>";
echo "<p class='card-text'>";
echo $row['short_details'];
echo "</p>";
echo "<div class='card-footer text-muted'>";
echo $row['pubdate'];
echo '<p><a href="view.php?id='.$row['id'].'">Read More</a></p>';
echo "</div>"."</div>"."</div>" ;
}
?>
<!-- pagination section-->
<div class="col-md-8" id="pagination">
<ul class='pagination text-center'>
<?php if(!empty($total_pages)):for($i=1; $i<=$total_pages; $i++):
if($i == 1):?>
<li class='active' id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php else:?>
<li id="<?php echo $i;?>"><a href='page.php?page=<?php echo $i;?>'><?php echo $i;?></a></li>
<?php endif;?>
<?php endfor;endif;?>
</ul>
</div>
</div>

1 réponse

yg_be Messages postés 22696 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 avril 2024 1 471
5 nov. 2020 à 17:37
bonjour,
je pense que tu n'as pas choisi le langage quand tu utilises les balises de code: infos ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

as-tu analysé les requêtes SQL que tu fais dans chaque page? montre-nous la liste des requêtes faites dans chacune des trois pages.
0