IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] pagination d'un résultat d'une requête [Fait]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Points : 79
    Points
    79
    Par défaut [SQL] pagination d'un résultat d'une requête
    Bonjour,
    j'utilise un code recopiè sur un site pour faire de la pagination.Le souci c'est que les liens me revoient toujours à la page courante.Et cette page n'affiche pas le nombre d'enregistrement souhaité(tout le résultat est affiché).Je me demande si c'est parceque dans ma requête je fais une jointure ?
    Voilà le code copié en question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    // Pagination générique d'un listing 
     
    function pagine( 
       &$sql      // Elément commun de requête : "FROM..." auquel sera ajouté le "LIMIT..." 
       ,$mpp      // Nombre max de lignes par page 
       ,$query      // Elément de querystring indiquant le n° de page 
       ,$url      // URL de la page 
       ,$long=5   // Nombre max de pages avant et après la page courante 
       ) { 
       // Pour construire les liens, regarde si $url contient déjà un ? 
       $t = (strpos($url,"?"))?"&":"?"; 
       // Nombre total d'enregistrements retournés 
       $res = mysql_query("SELECT count(*) ".$sql); 
       $nbres = mysql_result($res,0,0); 
       // Calcul du nombre de pages 
       $nbpage = ceil($nbres/$mpp); 
       // La page courante est 
       $p=@$_GET[$query]; if(!$p) $p=1; 
       if($p>$nbpage) $p = $nbpage; 
       // Longueur de la liste de pages 
       $deb = max(1,$p-$long); 
       $fin = min($nbpage,$p+$long); 
       // Construction de la liste de pages 
       $pagine = ""; 
       if($nbpage>1) { 
          for($i=$deb;$i<=$fin;$i++) { 
             // Page courante ? 
             if($i==$p) $pagine.="<font color=red><strong>&nbsp;".$i."&nbsp;</strong></font>"; 
             // Page 1 > lien sans query 
             elseif($i==1) $pagine.="<A href='".$url."'>&nbsp;".$i."&nbsp;</A>"; 
             // Autre page -> lien avec query 
             else $pagine.="<A href='".$url.$t.$query."=".$i."'>&nbsp;".$i."&nbsp;</A>"; 
          } 
          if($pagine) $pagine = "&nbsp;Page".$pagine; 
          // Premier, précédent 
          if($pagine&&($p>1)) { 
             if($p==2) $pagine ="<A href='".$url."'>&nbsp;&lt;&lt;&nbsp;</A>".$pagine; 
             else $pagine ="<A href='".$url.$t.$query."=".($p-1)."'>&nbsp;&lt;&lt;&nbsp;</A>".$pagine; 
             if($p>2) $pagine ="<A href='".$url."'>&nbsp;|&lt;&nbsp;</A>".$pagine; 
          } 
          // Suivant, dernier 
          if($pagine&&($p<$nbpage)) { 
             $pagine.="<A href='".$url.$t.$query."=".($p+1)."'>&nbsp;&gt;&gt;&nbsp;</A>"; 
             if($p<$nbpage-1) $pagine.="<A href='".$url.$t.$query."=".($nbpage)."'>&nbsp;&gt;|&nbsp;</A>"; 
          } 
          // Modification de la requête 
          $sql .= " LIMIT ".(($p-1)*$mpp).",".$mpp; 
       } 
       return $pagine; 
    } 
     
    // Exemple d'appel 
     
    $SQL = "FROM matable WHERE champ1='critere' ORDER BY champ2 DESC"; 
    $pagine = pagine($SQL,20,"p","index.php"); 
    $res = mysql_query("SELECT * ".$SQL); 
     
    echo "<center><table>"; $i=0; 
     
    while($val=mysql_fetch_array($res)) { $i++; 
     
       echo "<tr class=ligne".($i%2)."> 
          <td>".$val["champ1"]."</td> 
          <td>".$val["champ2"]."</td> 
       </tr>"; 
    } 
     
    echo "</table><br />".$pagine."</center><br /><br />"; 
     
    ?>
    Je vous remercie d'avance.

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonjour,

    Il y a un excellent code source ici : http://php.developpez.com/sources/?p...sql#pagination

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Déterminer si le résultat d'une requête est vide ou non
    Par khamett dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/01/2008, 21h53
  2. Une Fonction SQL qui retourne le résultat d'une requête
    Par kamacho25 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/09/2007, 10h44
  3. [SQL] Recherche dans le résultat d'une requête
    Par Ekik dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/03/2007, 10h32
  4. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  5. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo