Créer un système de pagination en PHP

Aurèli1s Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   -  
 killianwebmaster -
Bonjour,

J'aurais l'envi de créer un système de pagination en php, relier a des requêtes d'une base de donnée, chose que je ne maitrise pas totalement pour le moment,

c'est pourquoi j'aimerais faire appel a une âme charitable, qui pourrais me soutenir dans cette tache, mon site est totalement créer en php, donc je doit comprendre normalement les bases...

Merci d'avance.



A voir également:

6 réponses

donniecent Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   27
 
Bonjour, pour faire une pagination rien de plus simple, il faut tout simplement créer 2 fonctions, une qui calcul le nombre de pages en fonction du nombre de publication que vous souhaitez avoir par page. Je vous le mets en 2 étapes (3 minutes de copier-coller ^^ ) tenez c'est cadeau :

PS : Source de cette solution http://b2geek.com/article-comment-faire-des-liens-suivant-precedent-avec-les-deux-numeros-de-page-2-3.html




** Etape 1 mettre les fonctions dans un fichier fonctions.php (copiez le bloc) ***



<?php   
// A - Fonction pour calculer le nombre de pages      

function calcul_des_pages($table, $bdd, $resultats)      
{      
//je compte le nombre de messages postés dans ma base de donnée      
         $reponse = $bdd->query('SELECT COUNT(*) AS nbr_publication FROM '.$table.'');      
         $donnees = $reponse->fetch();      
         $GLOBALS['nb_req']++;      
         if (isset($_GET['page'])) //Si le numéro de page est connu ( parametre $_GET['page'] est prit dans l'url ), celui_ci est égal a la variable $pages      
         {      
         $page = (int)$_GET['page'];      
         }                              
         else //Mais Si le numéro de page est inconnu, celui_ci est égal a 1      
         {      
         $page = 1;      
         }                      
         $nbr_publication = $donnees['nbr_publication']; //Nombre de méssages dans ma base de donnée                      
         $nbr_pages = $nbr_publication/$resultats; //Nombre de page du site en fonction du nombre de méssages e le nombre de résultats demandé par page                      
         $nbr_pages = ceil($nbr_pages); //Ce nombre est arrondi au supperieur (ex : si j'ai 2,3 pages je l'arrondi comme ça 2,3 -> 3      
$premier_article = $resultats*$page-($resultats*$page/$page); //Ligne a partir de laquelle on va afficher les résultats      
         $dernier_article = $resultats; //Le nombre de résultats à afficher a partir de la ligne séléctionnée avant.                      
return array($page, $nbr_pages, $premier_article, $dernier_article); // Pour pouvoir récuperer les variables $nbr_pages, $premier et $dernier par la suite dans mon code              
}     


// B la fonction pour afficher les liens (page 1, 2 3 etc..) :      

   
function affichage_des_liens($page, $nbr_pages)      
{      
/******** DEBUT *********/      
echo '<div id ="liens_pages">      
<p>Pages :';      
$precedent = $page - 1;      

                if($page > 5 AND $page != 6) //Si le numero de la page sur laquelle on se trouve est inférieur a 5      
{      
                                 //On affiche les deux premiers liens et un lien précédent      
$debut = '<a href="'votresite.com?page='.$precedent.'" title="Page précédente"><img src="http://b2geek.com/images/icones/fleche-erreur-a-gauche-precedente-icone-3917-16.png" alt="fleche-erreur-a-gauche-precedente-icone-3917-16.png"/></a>      
<a class ="liens_pages" href="votresite.com?page=1" title="page n° 1">1</a>      
<a class ="liens_pages" href="votresite.com?page=2" title="page n° 2">2</a> ... ';      
}                                      
                elseif($page == 1)      
                {                                      
                $debut = '';      
                }      
                                      
                elseif($page < 5 AND 1 < $page)      
                {      
                $debut = '<a href="votresite.com?page='.$precedent.'" title="Page précédente"><img src="http://b2geek.com/images/icones/fleche-erreur-a-gauche-precedente-icone-3917-16.png" alt="fleche-erreur-a-gauche-precedente-icone-3917-16.png"/></a>';      
                }      

elseif($page == 5)      
{      
$debut = '<a class ="liens_pages" href="votresite.com?page=1">1</a>';      
}      
                      
elseif($page == 6)      
{      
$debut = '<a href="'votresite.com?page='.$precedent.'" title="Page précédente"><img src="images/icones/fleche-erreur-a-gauche-precedente-icone-3917-16.png" alt="fleche-erreur-a-gauche-precedente-icone-3917-16.png"/></a>      
<a class ="liens_pages" href="votresite.com?page=1" title="page n° 1">1</a> ...';      
}                                      

else      
{      
$debut = '<a class ="liens_pages"      
href="votresite.com?page='.$precedent.'" title="Page précédente"><img src="images/icones/fleche-erreur-a-gauche-precedente-icone-3917-16.png" alt="fleche-erreur-a-gauche-precedente-icone-3917-16.png"/></a>      
<a class ="liens_pages" href="votresite.com?page=1">1</a> ... ';      
}      
echo ''.$debut.'';      

/*********** MILIEU *********/      
        for ($i = 1; $i <= $nbr_pages; $i++)      
{      

if($i==$page) //Si il s'agit de la page actuelle...      
{      
echo '<span class = "liens_actif">'.$i.'</span>';      
}      
         elseif($i > $page + 3) //Si il s'agit de la page actuelle...      
{      
echo '';      
}      
         elseif($i < $page - 3) //Si il s'agit de la page actuelle...      
{      
echo '';      
}              
         else      
         {      
echo '<a class ="liens_pages" href="votresite.com?page='.$i.'" title="page n° '.$i.'">'.$i.'</a> ';      
         }      
                              
}      
                              
/******** FIN ********/      
                              
$totalmoins1 = $nbr_pages - 1;      
$totalmoins4 = $nbr_pages - 4;      
$totalmoins5 = $nbr_pages - 5;                              
                              

                                $suivant = $page + 1;      
                                      

if($page < $totalmoins4 AND $page != $totalmoins5)      
{      
$fin = '... <a class ="liens_pages" href="votresite.com?page='.$totalmoins1.'" title="page n° '.$totalmoins1.'">'.$totalmoins1.'</a>      
                                         <a class ="liens_pages" href="votresite.com?page='.$nbr_pages.'" title="page n° '.$nbr_pages.'">'.$nbr_pages.'</a>      
                         <a class ="liens_pages" href="votresite.com?page='.$suivant.'" title="Page suivante"><img src="http://b2geek.com/images/icones/prochain-a-droite-icone-5523-16-2.png" alt="prochain-a-droite-icone-5523-16.png"/></a>';      
}      

elseif($page == $totalmoins4)      
{      
$fin = '<a class ="liens_pages" href="votresite.com?page='.$nbr_pages.'" title="page n° '.$nbr_pages.'">'.$nbr_pages.'</a>';      
}      

elseif($page == $totalmoins5)      
{      
$fin = '... <a class ="liens_pages" href="votresite.com?page='.$nbr_pages.'" title="page n° '.$nbr_pages.'">'.$nbr_pages.'</a>      
                         <a class ="liens_pages" href="votresite.com?page='.$suivant.'" title="Page suivante"><img src="http://b2geek.com/images/icones/prochain-a-droite-icone-5523-16-2.png" alt="prochain-a-droite-icone-5523-16.png"/></a>';      
}                                      
                                      
else      
{      
$fin = '';      
}      


echo ''.$fin.'</p>';      

echo'</div>';      
}      
?>

Dans la fonction A (calcul_des_pages) vous n'avez rien a modifier. Et dans la fonction B (affichage_des_liens) vous devez juste remplace "votresite.com" par la vraie URL de votre site. (15 remplacements/1minute).

Après avoir enregistré vos deux fonctions dans votre fichier fonctions.php vous pouvez utiliser le code sur votre page.




************** Etape 2 : Utilisation dans votre code **************




<?php      
include('fonctions.php');      

//definistion de la table ou compter le nombre de contenu      
$table = 'REMPLACER';      
$resultats = 10; //vous choisissez le nombre de publications à afficher sur chaque page (réglé à 10 mais peut etre modifié).      
$hote = "REMPLACER";//votre hote      
$base = "REMPLACER";//votre nom de base de donne      
$pseudo_bdd = "REMPLACER";//pseudo      
$mdp_bdd = "REMPLACER";//mot de passe      

try      
{      
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;      
$bdd = new PDO('mysql:host='.$hote.';dbname='.$base, $pseudo_bdd, $mdp_bdd, $pdo_options);      
}      

catch (Exception $e)      
{      
        die('Erreur : ' . $e->getMessage());      
}              


//CALCUL DU NOMBRE DE PAGE      
calcul_des_pages($table, $bdd, $resultats);      

//EXTRAIRE LES VALEURS DE $page, $nbr_pages, $premier ET $dernier DE LA FONCTION calcul_des_pages($table, $bdd, $resultats)      
list($page, $nbr_pages, $premier_article, $dernier_article) = calcul_des_pages($table, $bdd, $resultats);              

// Je récupère tous les articles postés ainsi que le nombre de commentaire associés à chacuns      
$req = $bdd->query('SELECT * FROM '.$table.' ORDER BY id DESC LIMIT '.$premier.', '.$dernier.'');                                                                      
              
while ($donnees = $req->fetch())      
{      
              
//vos données à afficher              

}      
              
affichage_des_liens($page, $nbr_pages);              
?> 


Vous devez copier coller cette page sur votre page ou vous voulez voir apparaitre la pagination.

Donnees a remplacer :

$table = 'REMPLACER';//Le nom de la table o|u se trouve vos publications
$resultats = 10; //vous choisissez le nombre de publications à afficher sur chaque page (réglé à 10 mais peut etre modifié).

$hote = "REMPLACER";//votre hote
$base = "REMPLACER";//votre nom de base de donne
$pseudo_bdd = "REMPLACER";//pseudo
$mdp_bdd = "REMPLACER";//mot de passe

Etape 3 : Il y a pas d'étape 3 c'est finit :). Aller bonne fin de journée, un petit +1 serait gentil de votre part :). (source de ces codes ==> http://b2geek.com/article-comment-faire-des-liens-suivant-precedent-avec-les-deux-numeros-de-page-2-3.html )




L'informatique au service du partage, du divertissement, des passions, de la communication, de la technologie, du futur.
3
tolysall Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
slt j'ai utilisé le code mais pour $get['page'] j'ai comme erreur index indefini
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
c'est $_GET['page']
0
killianwebmaster
 
Voici un site ou tu pourras t'aidé.
http://www.newdzign.com/?page=tutoriels#
2
Utilisateur anonyme
 
Bonjour,

Pour la pagination PHP mySQL tout est basé sur la clause SQL
limit x,y qui affiche à partir de la ligne x, y lignes

Donc vous pouvez jouer là dessus

Une page qui reçoit en GET ou POST le numéro de la page à afficher (si rien $page=0)

ensuite vous calculez le x en fonction du nombre de lignes vous acceptez par page, mettons LIGNES=20 define('LIGNES',20);

x est calculé ainsi :
$x = ($page-1)*LIGNES;
$y = LIGNES;

votre requête devient pour cette page
$sql='select ... from ... where ... limit '.$x.','.$y;

Après vous gérez des boutons page suivante $lien='href="url?page='.($page+1).'">Page suivante</a>'

Même chose pour page précédente

Après si vous connaissez le nombre total de ligne de votre requête vous pouvez aussi faire un système du genre :

1...5 6 7...20

Tout est ouvert, mais le principe est là.
1
Aurèli1s Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   4
 
Merci pour l'instant j'ai 6 pages, avec 6 articles par pages, le truck qui me coince, c'est mon système de vignette par pages qui donne un preview avec une image et un résume des articles...
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aurèli1s Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   4
 
Je vous invite a regarder mon site avec sont système actuel, ou j'ai pour le moment un système assez primitif le temps d'intégrer le tous avec des requêtes entre php/base de données, je répète je vais me lancer mais j'ai besoin d'une petite aide si quelqu'un pouvais ce joindre a moi....
1
Utilisateur anonyme
 
Avez-vous lu les explications que j'ai donné au début ?
Sincèrement je ne vois pas que dire d'autre, tout le principe est là.
Après si vous savez programmer en PHP, il ne devrait pas y avoir de difficulté non ?.
0
Aurèli1s Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   4
 
Ce qui me coince c'est la pratique, je saurais creer les tables pour la base de donnee mais je n'est pas assez de notion pour faire en sorte que tous s'affige avec la pagination, est ce que je peut avoir ton msn, pour ton soutiens en ligne, du moins pour le debut seulement pour ne pas abuser de ton temps merci beaucoup d'avence..
0
Utilisateur anonyme
 
Désolé Aurèl1s, le chantier serait trop grand.
Avant de s'embarquer dans ce genre de chose une maîtrise minimum du HTML, PHP est nécessaire, sinon on passe des heures à expliquer des concepts de base et on finit par écrire tout ton code, donc non, je ne pourrais pas t'aider.
Cordialement
0
Aurèli1s Messages postés 136 Date d'inscription   Statut Membre Dernière intervention   4
 
Up! svp
1