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 :

Tri par formulaire et pagination


Sujet :

Langage PHP

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut Tri par formulaire et pagination
    Bonjour,

    J'ai un code de pagination qui est fonctionnel lorsqu'il n'y a pas de tri (ORDER BY) effectué sur les enregistrements de ma base sql (liste de livres).

    Code pagination (page_principale.php) :

    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
     
     
    /////////////////DEBUT PAGINATION/////////////////////////////////
     
     
    /* Numero de page (1 par défaut) */
    if( isset($_GET['page']) && is_numeric($_GET['page']) )
      $page = $_GET['page'];
    else
      $page = 1;
     
    /* Nombre d'info par page */
    $pagination = 100;
    /* Numéro du 1er enregistrement à lire */
    $limit_start = ($page - 1) * $pagination;
     
     
    $requete_pagination   = "SELECT COUNT(*) AS nb_total FROM livre ";
     
     
    $resultat_pagination = mysql_query($requete_pagination) or die('Erreur SQL !'.$requete_pagination.'<br>'.mysql_error());
     
     
    $nb_total = mysql_fetch_array($resultat_pagination);
    $nb_total = $nb_total['nb_total'];
     
    /* Pagination */
    $nb_pages = ceil($nb_total / $pagination);
     
     
     
    echo '<p>[ Page :';
    /* Boucle sur les pages */
     
    /* Boucle sur les pages */
    	for ($i = 1 ; $i <= $nb_pages ; $i++) {
    		if ($i == $page ) {
    			echo ' '.$i;
     
    		} 
     
    		else {
    			echo ' <a href="?page='.$i.'">'.$i.'</a> ';}
    					}
     
    	echo ' ]</p>';	
     
     
    /////////////////FIN PAGINATION/////////////////////////////////
    Code principal (page_principale.php) :

    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
    $select_livre = 'SELECT L.TITRE AS titre, L.ID_LIVRE AS id_livre,
    YEAR(L.DATE_ACHAT)AS date_achat,YEAR(L.DATE_PUBLICATION)AS date_publication,YEAR(L.DATE_LECTURE)AS date_lecture, L.miniatures AS miniatures,
    ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie,
    L.RESUME AS resume, L.STATUT_LECTURE AS statut_lecture
     
     
    FROM LIVRE L
    INNER JOIN EDITEUR ED		
    ON ED.ID_EDITEUR = L.ID_EDITEUR	
     
    INNER JOIN LIBRAIRIE LIB		
    ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE'; 
     
    $select_livre .=" LIMIT $limit_start, $pagination"; 
     
     
    $resultat_livre = mysql_query($select_livre);
     
    etc
    La pagination fonctionne ainsi.

    Mais, par la suite, j'ai voulu insérer un formulaire pour trier par éditeur, librairie... le résultat de ma requête $select_livre :

    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
    <form action ="page_principale.php " method = "POST">
     
    <p>
    <SELECT name="tri">
    		<OPTION VALUE="editeur">éditeur</OPTION>
    		<OPTION VALUE="librairie">librairie</OPTION>
    		<OPTION VALUE="contributeur">contributeur</OPTION>
    		<OPTION VALUE="categorie">catégorie</OPTION>
    		<OPTION VALUE="genre">genre</OPTION>
    	</SELECT>
     
     
    	<INPUT type="submit" value="Envoyer">
    <p/>
    <form/>
    Et j'ai inséré dans mon code principal, avant la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $select_livre .=" LIMIT $limit_start, $pagination";
    le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $choix_tri= (iSset($_POST['tri']) ? $_POST['tri'] : null);
     
    if( $choix_tri == "editeur") { // tri par éditeur
      $select_livre  .= " ORDER BY EDITEUR ASC";
      }
     
    if( $choix_tri == "librairie") { // tri par librairie
      $select_livre  .= " ORDER BY LIBRAIRIE ASC";
      }
    Après avoir choisi dans le formulaire le choix "éditeur" puis cliqué sur "envoyer", ma page (page 1) se réaffiche bien triée par éditeur. Mais mon système de pagination ne s'adapte pas : si je clique sur la page 2, elle s'affiche bien mais je perds mon tri par éditeur...

    Je suppose qu'il faut intégrer la variable $choix_tri dans le système de pagination (?). Mais je ne sais pas comment m'y prendre. Pouvez-vous m'aider ?
    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour almoha,

    La première idée qui me vienne ce serait de faire passer le critère de tri sélectionné en même temps que le numéro de page souhaité dans les paramètres de ton url.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* Boucle sur les pages */
    	for ($i = 1 ; $i <= $nb_pages ; $i++) {
    		if ($i == $page ) {
    			echo ' '.$i;
     
    		} 
     
    		else {
    			echo ' <a href="?page='.$i.'&amp;tri='.$tri.'">'.$i.'</a> ';}
    					}
     
    	echo ' ]</p>';
    ça peut être une solution

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 388
    Points : 209
    Points
    209
    Par défaut
    Merci pour ta solution, Kwizatz. Elle m'a permis d'avancer dans mon code.

Discussions similaires

  1. [MySQL] Tri par formulaire suite à un filtre des données
    Par almoha dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/09/2010, 14h52
  2. tri par groupe d'options sur formulaire continu
    Par ced911 dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/08/2010, 11h20
  3. [AC-2003] Tri sur formulaire par liste deroulante
    Par mat2424 dans le forum IHM
    Réponses: 5
    Dernier message: 13/12/2009, 09h43
  4. ouvire formulaire avec un tri par date
    Par flo456 dans le forum IHM
    Réponses: 2
    Dernier message: 01/02/2007, 15h55
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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