Bonjour,
J'ai un tableau SQL avec un système de pagination. Lorsque toutes les données du tableaux sont affichés, la pagination fonctionne très bien.
Ensuite j'ai fais un système avec une barre de recherche, malheureusement il n'affiche les résultats que sur la première page. C'est à dire que quand je change de page, il enlève la recherche et affiche de nouveau toutes les données.
Je n'ai donc aucun message d'erreur mais j'aimerai avoir une pagination correcte même après une recherche.
L'affichage des données (avec et sans recherche) :
//Verification que le champs n est pas vide
$rowsql = [];
// démarrage de la requete
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 0;
$limit = 25;
$page = (!empty($_GET['page']) ? $_GET['page'] : 1);
$debut = ($page - 1) * $limit;
//Si une recherche est lancée
if (isset($_POST['srch']) && !empty($_POST['srch'])) {
$recherche = '%' . ($_POST['srch']) . '%';
//Query DB
$sql = 'SELECT * FROM `extract_42c` WHERE `CAT` LIKE :search OR `CDTPC` LIKE :search LIMIT :limite OFFSET :debut';
//run query
$query = $db->prepare($sql);
$query->bindValue('debut', $debut, PDO::PARAM_INT);
$query->bindValue('limite', $limit, PDO::PARAM_INT);
$query->bindValue('search', $recherche, PDO::PARAM_STR);
$query->execute();
//loop through results
$rowsql = $query->fetchall(PDO::FETCH_ASSOC);
$resultFoundRows = $db->prepare('SELECT COUNT(*) FROM `extract_42c` WHERE `CAT` LIKE :search OR `CDTPC` LIKE :search');
$resultFoundRows->execute(array('search' => $recherche));
} else {
//Sinon affiche le tableau entier
$query = 'SELECT * FROM `extract_42c` LIMIT :limite OFFSET :debut';
$query = $db->prepare($query);
$query->bindValue('debut', $debut, PDO::PARAM_INT);
$query->bindValue('limite', $limit, PDO::PARAM_INT);
$query->execute();
$rowsql = $query->fetchAll(PDO::FETCH_ASSOC);
$resultFoundRows = $db->query('SELECT COUNT(*) FROM `extract_42c`');
}
// Nombre de lignes affichées
$nombredElementsTotal = $resultFoundRows->fetchcolumn();
echo '</br>Il y a ' . ($nombredElementsTotal) . ' résultats.';
?>
La pagination :
<?php
$nombreDePages = ceil($nombredElementsTotal / $limit);
// Page précédente
if ($page > 1):
?>
<a href="?page=<?php echo $page - 1; ?>">Page précédente</a>
—
<?php endif;
/* boucle autant de fois que l on a de page */
if (isset($_GET['page'])) // Si la variable $_GET['page'] existe
{
$pageactuelle = intval($_GET['page']);
if ($pageactuelle > $nombreDePages) {
$pageactuelle = $nombreDePages;
}
} else {
$pageactuelle = 1;
}
for ($i = $pageactuelle - 5; $i <= $pageactuelle + 5; $i++) {
if ($i > 0) {
if ($i == $pageactuelle) {
echo ' [ ' . $i . ' ] ';
} else {
echo ' <a href="principal.php?page=' . $i . '">' . $i . '</a> ';
}
}
}
?>
<!-- Page suivante -->
<?php if ($page < $nombreDePages): ?>
— <a href="?page=<?= $page + 1; ?>">Page suivante</a>
<?php endif; ?>
Merci d'y jeter un oeil et de m'apporter votre aide !
Bon déjà j'ai remplacé tous les $_POST['srch'] par des GET. Mais je n'arrive pas à l'adapter à mon code...
Problème résolu sur un autre forum !
Solution :
<a href="?page=<?php echo $page - 1; ?>">
Devient :
<a href="?page=<?php echo $page - 1; ?>&srch=<?= urlencode($_GET['srch']) ?>">
echo ' <a href="principal.php?page=' . $i . '">' . $i . '</a> ';
Devient :
echo ' <a href="principal.php?page=' . $i . '&srch=' . urlencode($_GET['srch']) . '">' . $i . '</a> ';
<a href="?page=<?= $page + 1; ?>">Page suivante</a>
Devient :
<a href="?page=<?= $page + 1; ?>&srch=<?= urlencode($_GET['srch']) ?>">Page suivante</a>
Et ne pas oublier :
if(isset($_GET['srch'])) {
echo ' <a href="principal.php?page=' . $i . '&srch=' . urlencode($_GET['srch']) . '">' . $i . '</a> ';
}else{
echo ' <a href="principal.php?page=' . $i . '">' . $i . '</a> ';
}