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

Langage PHP Discussion :

Limiter le nombre de pages de résultats


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut Limiter le nombre de pages de résultats
    Bonjour à tous,

    Le code suivant me permet d'afficher les résultats d'une requête. Il y a 10 résultats par page mais avec le nombre grandissant de résultats je me retrouve avec plus de 400 numéros de page qui s'affichent après les résultats. C'est pas très joli et j'aimerais modifier mon code pour avoir juste 10 numéros de page. Si l'utilisateur clique sur le numéro 2 ça ajoute une page et s'il clique sur la page 5 ca ajoute 5 pages. Mais il y a toujours 10 numéros qui s'affichent pas plus. Vous voyez ou je veux en venir.

    Voici le code dont je me sers :

    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
     
    if(!isset($_GET['page']))
    {
    $page = 1;
    }
    else 
    {
    $page = $_GET['page'];
    }
     
    $max_results = 10;
     
    $from = (($page * $max_results) - $max_results); 
     
     
    $sql = mysql_query("SELECT id_ad,titre, description FROM table1 LIMIT $from, $max_results");
     
     
     
    Les résultats ICI
     
     
     
    $total_results = mysql_result(mysql_query("SELECT COUNT(*) as Num FROM table1"),0);
     
    $total_pages = ceil($total_results / $max_results);
     
    echo "<center><p><strong>";
     
    if($page > 1){
        $prev = ($page - 1);
        echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$prev\">Précédente</a> ";
    }
     
    for($i = 1; $i <= $total_pages; $i++){
        if(($page) == $i){
            echo "$i ";
            } else {
                echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
    }
     
    if($page < $total_pages){
        $next = ($page + 1);
        echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Suivante</a>";
    }
    echo "</strong></p></center>";
    Merci d'avance pour votre aide précieuse. Grace à vous j'apprends un peu plus tous les jours à développer.

  2. #2
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    Essaie ceci pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $limit=10;
    $start = $page-($limit / 2);
    if ($start < 1) {$start = 1; $end=$limit;}
     
    $end = $page+($limit / 2);
    if ($end > $total_pages) {$end = $totalpages; $start = $totalpages - $limit;}
     
    for($i = $start; $i <= $end; $i++){
        if(($page) == $i){
            echo "$i ";
            } else {
                echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
    @+
    cadou
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par cadoudal56 Voir le message
    Essaie ceci pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $limit=10;
    $start = $page-($limit / 2);
    if ($start < 1) {$start = 1; $end=$limit;}
     
    $end = $page+($limit / 2);
    if ($end > $total_pages) {$end = $totalpages; $start = $totalpages - $limit;}
     
    for($i = $start; $i <= $end; $i++){
        if(($page) == $i){
            echo "$i ";
            } else {
                echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
    @+
    cadou

    Merci beaucoup le code fonctionne pour les 1eres pages. Ensuite quand on arrive aux dernières pages une erreur se produit à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($end > $total_pages) {$end = $totalpages; $start = $totalpages - $limit;}
    voici l'erreur Notice: Undefined variable: totalpages

    L'erreur survient au moment ou le nombre de page qui reste est inférieur à la limite.

    De plus est-ce possible de garder les liens "suivant" et "précédent" sans que ca demande trop de travail ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    En fait le code est parfait c'etait une erreur de syntaxe totalpages et total_pages.

    Par contre si c'est possible de garder les liens SUIVANT et PRECEDENT ca serait bien.

    Comment je les intègre?

    Merci d'avance

  5. #5
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    as tu au moins essayé par toi même?
    Par exemple de les remettre en les copiant collant?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    oui j'ai essayé et ca mon probleme c'est que ca ajoutait un suivant et precedent à chaque numero de page

  7. #7
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    Hello,

    Les pages Suivant et Précédent ce n'est pas le plus compliqué....
    Il faut les rajouter avant et après la boucle (pas dans la boucle...)

    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
     
     
    //Nombre de pages a afficher
    $limit=10;
     
    //Definition des pages suivant précedent
    if (($page + 1) < $total_pages) {$next = $page + 1;}
    if (($page - 1) > 0) {$last = $page - 1;}
     
    //Definition du Start
    $start = $page-($limit / 2);
    if ($start < 1) {$start = 1; $end=$limit;}
     
    //Dédinition du End 
    $end = $page+($limit / 2);
    if ($end > $total_pages) {$end = $total_pages; $start = $total_pages - $limit;}
     
    //Affiche page précedente
    if ($last) {echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$last\">Précédent</a> ";}
    else {echo "<a href=\"#\">Précédent</a> ";}
     
    //Boucle pour afficher les pages
    for($i = $start; $i <= $end; $i++){
        if(($page) == $i){
            echo "$i ";
            } else {
                echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$i\">$i</a> ";
        }
     
    //Affiche page suivante
    if ($next) {echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Suivant</a> ";}
    else {echo "<a href=\"#\">Suivant</a> ";}
    Normalement Précédent devrait s'afficher avant la suite et Suivant après.
    Si il n'y a pas de page suivante ou précédente, cela s'affiche quand meme, mais le lien est désactivé (histoire que tu gardes la structure de la mise en page.

    Maintenant on peut agrémenter le script d'un première page et derniere page...

    Pour la première page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    // Affiche premiere page
    echo "<a href=\"".$_SERVER['PHP_SELF']."?page=1\">Premiere page</a> ";
     
    //Affiche page précedente
    if ($last) {echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$last\">Précédent</a> ";}
    else {echo "<a href=\"#\">Précédent</a> ";}
    Pour la dernière page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    //Affiche page suivante
    if ($next) {echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$next\">Suivant</a> ";}
    else {echo "<a href=\"#\">Suivant</a> ";}
     
    //Affiche dernière page
    echo "<a href=\"".$_SERVER['PHP_SELF']."?page=$total_pages\">Dernière page</a> ";
    Et pour finir, tu peux aussi remplacer les pages suivantes et précédentes par des simples fleches et premiere et derniere page par des doubles fleches.

    Maintenant, ce n'est pas le tout d'avoir la solution, il faut surtout bien la comprendre

    @+
    cadou
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  8. #8
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    mais il faut le mettre hors de la boucle et tout ira bien

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    Merci c'est parfait

    j'ai juste ajouté = dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($page - 1) >= 0) {$last = $page - 1;}
    pour ne pas avoir d'erreur quand ils sont sur la page 1

    et ca pour la dernière page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($page + 1) >= $total_pages) {$next = $page;}
    Encore merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/03/2010, 14h36
  2. [CR 2008] limiter le nombre de pages
    Par frochard dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 21/03/2010, 19h57
  3. Limitation du nombre de pages avec le package geometry
    Par Gloupsy dans le forum Débuter
    Réponses: 1
    Dernier message: 29/12/2009, 13h01
  4. [SQL] Je souhaite limiter le nombre de résultat par page
    Par kilian67 dans le forum PHP & Base de données
    Réponses: 38
    Dernier message: 20/08/2007, 17h55
  5. Limiter le nombre des lignes en résultat
    Par Grand sorcier dans le forum Oracle
    Réponses: 1
    Dernier message: 11/07/2006, 14h30

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