Créer un système de pagination en PHP

Fermé
Aurèli1s Messages postés 136 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 14 octobre 2013 - 17 sept. 2011 à 17:39
 killianwebmaster - 5 nov. 2012 à 14:18
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 lundi 1 mars 2010 Statut Membre Dernière intervention 1 juin 2012 27
Modifié par donniecent le 26/05/2012 à 16: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 lundi 27 août 2012 Statut Membre Dernière intervention 4 janvier 2013
5 nov. 2012 à 14:06
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 nov. 2012 à 14:10
c'est $_GET['page']
0
killianwebmaster
5 nov. 2012 à 14:18
Voici un site ou tu pourras t'aidé.
http://www.newdzign.com/?page=tutoriels#
2
Utilisateur anonyme
17 sept. 2011 à 21:25
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 14 octobre 2013 4
Modifié par Aurèli1s le 18/09/2011 à 13:21
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 14 octobre 2013 4
18 sept. 2011 à 13:30
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
18 sept. 2011 à 18:32
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 14 octobre 2013 4
18 sept. 2011 à 18:54
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
19 sept. 2011 à 08:14
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 14 octobre 2013 4
18 sept. 2011 à 21:26
Up! svp
1