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 :

Afficher beaucoup d'enregistrement dans une pagination


Sujet :

Langage PHP

  1. #1
    Membre émérite
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Par défaut Afficher beaucoup d'enregistrement dans une pagination
    Bonjour à tous

    J'explique ma situation
    je fais une recherche dans une table de dossier la requete est dynamiquement construite en fonction du type de recherche et du mots clé...

    Ca marche #1

    Je fais afficher mes résultats par groupe de 20 (merci au tuto qui m'on permis de faire ca)
    Dans le bas j'ai des liens sur page 1,2,3,4....

    Le probleme est que si la recherche n'est pas spécifique et que ca me retourne par exemple 400 résultats....ca pagine...mais ca ne finis plus...ca se rends jusqu'a la page 20....

    Alors ainsi de suite...600 résultat...30 pages... ca fait pas beau de voir les chiffre de 1 à 30 dans le bas

    Ce que je voudrait faire c'est de limiter a 10 le nombres de pages à la fois....ainsi à la 4e page je verrais... << 4,5,6,7,8,9,10,11,12,13 >>

    J'ai un probleme d'algorythme...est ce que vous pouvez m'aider ladessus

    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
     
    //$max_pg = le nombre de page maximum...en partant de 1 donc je fais -1 pour partir de 0
    //$page = la page que je suis rendu actuellement dans l;'affichage
    //$nb = le nombre de résultats pour l'affichage...20 pour mon cas
     
     
    echo "<p><font size=\"-1\">Pages ".$page." sur ".($max_pg-1)."</font>&nbsp;";
    echo ($page !=0 ) ? '<a href="?continu=1&search=dossier&page='.($page-1).'&nb='.$nb.'#res">&lt;&lt;</a>&nbsp;' : '<a> &lt;&lt;</a>&nbsp;'; 
    for($i = 0 ; $i < $max_pg ; $i++) {
    	if($i == $page){
    		echo ' <a>'.$i.'</a>';
    	}
    	else{
    		echo ' <a href="?continu=1&search=dossier&page='.$i.'&nb='.$nb.'#res">'.$i.'</a>';
    	}
    }
    echo ($page != $max_pg-1 ) ? '&nbsp;&nbsp;&nbsp;<a href="?continu=1&search=dossier&page='.($page+1).'&nb='.$nb.'#res">&gt;&gt;</a>' : '&nbsp;&nbsp;&nbsp;<a>&gt;&gt;</a>';
    Donc je me demandais où je devrais faire la validation...c'est surment pour la boucle et les variable de départ et de fin
    mais faut que ce soit dynamique et non fix..c'est ce qui me cause probleme...je ne peux pas faire $page + 10 car il se peut qu'il n'y ait pas 10 page de résultats....ainsi est ce que je peux mettre une condition s'il y a plus de 10...fait afficher les 10 sinon affiche toute ?

    merci pour vos suggestions

  2. #2
    Membre émérite
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Par défaut
    Alors voici mon évolution

    y a-t-il des moyens plus simple...
    j'ai l'impression de trouver ici une solution qui contourne le probleme

    Est-ce la bonne?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $varDepart = 0;
    $varFin = 0;
    if($max_pg > 10){
    	$varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
    	$varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
    }
    else{
    	$varDepart = 0;
    	$varFin = $max_pg;
    }
     
    ....
    //le reste est dans le premier post
    commentaires?

  3. #3
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if($max_pg > 10){
    	$varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
    	$varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
    }
    Si je fais le calcul avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $max_pg = 30;
    $page = 25;
    , je me retrouve avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $varDepart = $varFin = 20;
    Est-ce normal ? Je ne pense pas.

    Je te propose ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fenetre = 10;
    $varDepart = max( $page - $fenetre / 2 , 0);
    $varFin    = min( $page + $fenetre / 2 , $max_pg);
    (Faudra rajouter un traitement pour avoir toujours 10 valeurs affichées, même quand $page est proche d'une extremité)


    Sinon je te suggère de mettre un lien vers la première page et eventuelement vers la dernière.
    Tu peux aussi avoir le mécanisme suivant :
    1 2 ... 12 13 14 15 16 ... 29 30

  4. #4
    Membre émérite
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Par défaut
    ok j'ai essayé avec ta manière ca fonctionne également et ca semble moins complexe merci

    Mais bon ton calcul est faux je crois si max_pg=30 et $page =25, a ce moment la variable de départ et celle de fin ne sont pas de la meme valeur

    $varDepart = ($max_pg-10 >= $page) ? $page : $max_pg - 10;
    $varDepart = (30-10 >= 25)? $page : 30-10 = 20

    $varFin = ($max_pg >= $page+10) ? $page + 10 : $max_pg;
    $varFin = (30 >= 25+10) ? $page+10 : 30 = 30

    ainsi, $varDepart != $varFin

    Mais bon pour cet affichage ca somble fonctionner sauf que la je me suis rendu compte que ya un probleme qui se situe au niveau de la requete que je fais et le nombre d'enregistrement qui est assez élevé

    je test ma requete de recherche en phpMyAdmin et ca prend 3 à 6 sec de temps d'execution afin de me retourner mes valeurs...présentement il y a 15000 enregistrements sur une table...Je crois que je vais posté une nouvelle interrogation dans sgbd pour l'optimisation de requete

    Merci pour ton aide sur la pagination par contre

    bonne journée

  5. #5
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    En effet mon calcul était faux

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2009, 00h44
  2. Réponses: 1
    Dernier message: 29/06/2009, 12h07
  3. Réponses: 3
    Dernier message: 01/09/2008, 18h34
  4. copie d'un enregistrement dans une deuxième table
    Par developpeur_mehdi dans le forum Bases de données
    Réponses: 5
    Dernier message: 03/03/2004, 12h51
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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