Problème d'affichage page par page / Pagination

Bonjour messieurs ,J'ai ajouter un système de pagination et ça marche très bien seulement il ne limite pas le nombre de page ,il affiche tous les numéros de page.Je vous prie messieurs, de m'aider à résoudre ce problème et je vous remercie d'avance .Voila la fonction qui affiche les numéro et ne limite pas le nombre de pages .

<?php
function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
        echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
            if($compteurPages == 10) {
            $compteurPages = 1;
            echo '<br>'."\n";
            }
        }
        echo '</tr></table>'."\n";
}
?>


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

5 réponses

  1. Contributeur
    bonsoir, tu veux dire que, malgré
    while($numeroPages <= $nbpages)
    , $numeroPages dépasse $nbpages?
    si oui, es-tu certain de la valeur de $nbpages?
    si non, peux-tu expliquer plus factuellement?
    0
    1. Bonjour monsieur , je vous remercie beaucoup de m'avoir répondu .En bref et franchement , j' ai rien compris parce que je suis débutant et faible en php ( seulement si quelqu'un me montre quelque chose à supprimer, ajouter ou modifier ,dans ce cas je peux le faire .merci monsieur
      0
      1. Contributeur
        dans ce cas, il serait utile que tu expliques factuellement ce que tu obtiens et ce que tu souhaites obtenir.
        0
    2. Bonjour monsieur ;je m'éxcuse de vous avoir dérangé . J'ai bien placé la pagination , ça fonctionne très bien ( j'ai bien limiter le nombre d'enregistrement par page et afficher les liens des pages .Le problème que tous les liens s'affiche sur la page , c'est à dire le nombre de pages n'est pas limité . Mio, je voudrais obtenir une pagination avec des points de suspension : par exemple << 1234.........25 25 27 28 >>
      Voila le lien si vous voulez tester www.bravoforum.topsawa.com . et voila les page de ma pagination .
      1) page index.php
      <html>
      <head>
      <style type="text/css">
      
      .menu{
       width: 20px;
       font-family: Arial, Helvetica, sans-serif;
       font-size: 12px;
       font-weight: bold;
       font-style: normal;
       text-decoration: none;
      }
      
      .menu ul{
       margin: 0;
       padding: 0;
       float: left;
       width: 20px;
       background: #000000;
       border-top-width: 1px;
       border-right-width: 1px;
       border-bottom-width: 1px;
       border-left-width: 1px;
       border-top-style: solid;
       border-right-style: solid;
       border-bottom-style: solid;
       border-left-style: solid;
       border-top-color: #0000FF;
       border-right-color: #0000FF;
       border-bottom-color: #0000FF;
       border-left-color: #0000FF
      }
      
      .menu ul li{
      display: inline;
      }
      
      .menu ul li a{
       float: left;
       color: #FFFFFF;
       padding: 5px 6px;
       text-decoration: none;
       border-right-width: 1px;
       border-right-style: solid;
       border-right-color: #000000;
      }
      
      .menu ul li a:visited{
      color: #FFFFFF;
      }
      
      .menu ul li a:hover, .menu ul li .selected{
       color: #000000 !important;
       padding-top: 5px;
       padding-bottom: 5px;
       background: #FFFF35;
      }
      
      </style>
      </head>
      <body>
      <?php
       require 'header.html'; 
       require 'config.php';
      
      // initialisation des variables 
      
      // on va afficher 5 résultats par page.
      
      $nombre = 5;  
      
      // si limite n'existe pas on l'initialise à zéro
      
      if (!$limite) $limite = 0; 
      
      // on cherche le nom de la page.    
      
      $path_parts = pathinfo($_SERVER['PHP_SELF']);
      
      $page = $path_parts["basename"];
      
      $link = mysql_connect (localhost,user,pass) or die ('Erreur : '.mysql_error() );
      
      mysql_select_db(base_donnees) or die ('Erreur :'.mysql_error());
      
      // requête SQL qui compte le nombre total 
      
      // d'enregistrements dans la table.
      
      
       $select = 'SELECT id, auteur, titre, date_derniere_reponse FROM forum_sujets';
      
      $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
      
      $row = mysql_fetch_row($result);
      
      $total = $row[0];
      
          
      
      // vérifier la validité de notre variable 
      
      // $limite;
      
      
      
      require 'fonctions.php';
      
      
      // initialisation des variables 
      
      
      
      // on va afficher 5 résultats par page.
      
      $nombre = 5;  
      
      // si limite n'existe pas on l'initialise à zéro
      
      if (!$limite) $limite = 0; 
      
      // on cherche le nom de la page.    
      
      $path_parts = pathinfo($_SERVER['PHP_SELF']);
      
      $page = $path_parts["basename"];
      
      
      // connection à la DB
      
      $link = mysql_connect (localhost,user,pass) or die ('Erreur : '.mysql_error() );
      
      mysql_select_db(topsawa_forum) or die ('Erreur :'.mysql_error());
      
      
      // requête SQL qui compte le nombre total 
      
      // d'enregistrements dans la table.
      
      $select = 'SELECT count(id) FROM forum_sujets';
      
      $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
      
      $row = mysql_fetch_row($result);
      
      $total = $row[0];
      
      
      // vérifier la validité de notre variable 
      
      // $limite;
      
      $verifLimite= verifLimite($limite,$total,$nombre);
      
      // si la limite passée n'est pas valide on la remet à zéro
      
      if(!$verifLimite)  {
      
          $limite = 0;
      
      }
      
      // requête SQL qui ne prend que le nombre 
      
      // d'enregistrement necessaire à l'affichage.
      
      $select = 'select id,auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC limit '.$limite.','.$nombre;
      
      $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
      
      ?>
      
      <br />
      <a href="insert_sujet.php"><img src="images/Hb.png" alt="cliquer"/></a>
      
      <?php
      
      // si la limite passée n'est pas valide on la remet à zéro
      
      if(!$verifLimite)  {
      
          $limite = 0;
      
      }
      
      // requête SQL qui ne prend que le nombre 
      
      // d'enregistrement necessaire à l'affichage.
      
      $select = 'select id, auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC limit '.$limite.','.$nombre;
      
      $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
      
      // si on a récupéré un resultat on l'affiche.
      
      if($total) {
      
          // début du tableau
      echo '<p align="center">Page : ';
          echo '<table bgcolor="#660000 width="700" border="20">'."\n";
              // première ligne on affiche les titres prénom et surnom dans 2 colonnes
              
      echo '<tr>';
              echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>auteur</u></big></big></b></td>';
      echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>titre</u></big></big></b></td>';
      echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>date_derniere_reponse</u></big></big></b></big></td>'; 
              echo '</tr>'."\n";
      
          // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
          while($row = mysql_fetch_array($result)) {
              echo '<tr>';
              echo '<td bgcolor="#ffffff"><div style="text-align: center;"><big>'.$row['auteur'].'</big></td>';
              echo '<td bgcolor="#ffffff"><big><a href="./lire_sujet.php?id_sujet_a_lire=' , $row['id'] , '">' , htmlentities(trim($row['titre'])).'</a></td>';
              echo '<td bgcolor="#ffffff"><div style="text-align: center;"><big>'.$row['date_derniere_reponse'].'</big></td>';
              echo '</tr>'."\n";
          }
          echo '</table>'."\n";
      
      }
      
      else echo 'Pas d\'enregistrements dans cette table...';
      
      mysql_free_result($result);
      
      
      // si le nombre d'enregistrement à afficher 
      
      // est plus grand que $nombre 
      
      if($total > $nombre) {
      
          // affichage des liens vers les pages
      
         affichePages($nombre,$page,$total);
      
          // affichage des boutons
      
      }
      
      // page precedante et page suinte
       if($limite != 0) {
          echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
       }
       if($limitesuivante < $total) {
          echo '<a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a>';
       }
      ?>
      
      </body>
      
      </html>
      
      
      


      Et voila ma page fonction.php
      <?php
      
      //récupération de $limite
      
          if(isset($_GET['limite'])) 
      
              $limite=$_GET['limite'];
          else   $limite=0;
      
      
      function verifLimite($limite,$total,$nombre) {
      
          // je verifie si limite est un nombre.
      
          if(is_numeric($limite)) {
      
              
      // si $limite est entre 0 et $total, $limite est ok
      
              // sinon $limite n'est pas valide.
      
              if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
      
                  // j'assigne 1 à $valide si $limite est entre 0 et $max
      
                  $valide = 1;
      
              }    
      
              else {
      
                  // sinon j'assigne 0 à $valide
      
                  $valide = 0;
      
              }
      
          }
      
          else {
      
                  // si $limite n'est pas numérique j'assigne 0 à $valide
      
                  $valide = 0;
      
          }
      
      // je renvois $valide
      
      return $valide;
      
      }
      
      
      function affichePages($nb,$page,$total) {
              $nbpages=ceil($total/$nb);
              $numeroPages = 1;
              $compteurPages = 1;
              $limite  = 0;
              echo '<table border = "10" ><tr>'."\n";
              while($numeroPages <= $nbpages) {
              echo '<td ><div class="menu"> 
      <ul> 
      <li><center><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></center></li>
      </ul>
      </div></td>'."\n";
              $limite = $limite + $nb;
              $numeroPages = $numeroPages + 1;
              $compteurPages = $compteurPages + 1;
                 if($compteurPages == 10) {
                  $compteurPages = 1;
                  echo '<br>'."\n";
                  }
              }
              echo '</tr></table>'."\n";
      }
      
      // page precedante et page suinte
      $limitesuivante = $limite + $nombre;
      $limiteprecedente = $limite - $nombre;
      ?> 

      et je vous remercie d'avance .
      0
      1. Contributeur
        donc tu voudrais avoir uniquement les 4 premiers et les 4 derniers liens?
        pourquoi n'as-tu pas expliqué cela dès le départ?
        as-tu essayé de programmer cela?
        peut-être ainsi:
        function affichePages($nb,$page,$total) {
                $nbpages=ceil($total/$nb);
                $numeroPages = 1;
                $limite  = 0;
                echo '<table border = "0" ><tr>'."\n";
                while($numeroPages <= $nbpages) {
                    if ($numeroPages <=4 or $numeroPages >= $nbpages-4) {
                           echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
                    }
                   $limite = $limite + $nb;
                   $numeroPages = $numeroPages + 1;
                }
                echo '</tr></table>'."\n";
        }
        0
    3. Merci beaucoup cher monsieur, j'ai essayé le bout de code que vous m'avez envoyé, c'est bien ça ce que je cherche, mais il n'y'a pas de points de suspension entre les quatre premiers numéro de page et le reste des pages; alors s'il n'a pas de points de suspension ,on peut pas trouver et cliquer sur les pages sautées.
      1 2 3 4 17 18 19 20 21
      si vous voulez tester en haut de la barre google www.bravoforum.topsawa.com
      Et voila ma nouvelle page : fonction.php
      <?php
      
      //récupération de $limite
      
          if(isset($_GET['limite'])) 
      
              $limite=$_GET['limite'];
          else   $limite=0;
      
      
      function verifLimite($limite,$total,$nombre) {
      
          // je verifie si limite est un nombre.
      
          if(is_numeric($limite)) {
      
              
      // si $limite est entre 0 et $total, $limite est ok
      
              // sinon $limite n'est pas valide.
      
              if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
      
                  // j'assigne 1 à $valide si $limite est entre 0 et $max
      
                  $valide = 1;
      
              }    
      
              else {
      
                  // sinon j'assigne 0 à $valide
      
                  $valide = 0;
      
              }
      
          }
      
          else {
      
                  // si $limite n'est pas numérique j'assigne 0 à $valide
      
                  $valide = 0;
      
          }
      
      // je renvois $valide
      
      return $valide;
      
      }
      
       function affichePages($nb,$page,$total) {
              $nbpages=ceil($total/$nb);
              $numeroPages = 1;
              $limite  = 0;
              echo '<table border = "0" ><tr>'."\n";
              while($numeroPages <= $nbpages) {
                  if ($numeroPages <=4 or $numeroPages >= $nbpages-4) {
                         echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
                  }
                 $limite = $limite + $nb;
                 $numeroPages = $numeroPages + 1;
              }
              echo '</tr></table>'."\n";
      }
      
      // page precedante et page suinte
      $limitesuivante = $limite + $nombre;
      $limiteprecedente = $limite - $nombre;
      ?> 

      et merci beaucoup.
      0
      1. Contributeur
        ah bon, tu souhaites avoir des points de suspension sur lesquels on peut cliquer pour trouver les pages manquantes. pourquoi n'as-tu pas expliqué cela au départ?
        par ailleurs, je te suggère de commencer par des exercices plus simples, qui vont te permettre de progresser, avant de faire des exercices plus compliqués.
        0
    4. Bonjour monsieur,et je vous remercie pour votre aide .
      0