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 :

Pagination multiple même fichier [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut Pagination multiple même fichier
    Bonjour les développeurs :-)

    J'ai fais un code PHP pour associer les articles aux catégories et afficher les catégories qui n'ont rien. J'ai ajouter une limite page par page à chaque catégorie pour limiter le nombre d'article par affichage.

    Le problème est que ma pagination est dépendante de toutes les catégories. Et que si j'ai un article dans une catégorie mais que dans un autre, j'en ai plusieurs. La catégorie qui en a moins, il n y aura plus d'affichage.

    Mes deux TABLES:
    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
    CREATE TABLE IF NOT EXISTS `categorie` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `categorie` varchar(222) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    INSERT INTO `categorie` (`id`, `categorie`) VALUES
    (1, 'VOITURES'),
    (2, 'ORDINATEURS'),
    (3, 'NOURRITURE'),
    (4, 'JOUETS');
     
     
     
    CREATE TABLE IF NOT EXISTS `article` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `categorie_id` int(11) NOT NULL,
      `article` varchar(222) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `categorie_id` (`categorie_id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
     
    INSERT INTO `article` (`id`, `categorie_id`, `article`) VALUES
    (1, 2, 'dell'),
    (2, 2, 'hp'),
    (3, 1, 'Minoune'),
    (4, 1, 'carcasse'),
    (5, 3, 'pommes'),
    (6, 2, 'clone');
    Mon code 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    include 'config_open_db.php';
     
    $sql="SELECT * FROM categorie";
     
    $rs=mysqli_query($conn,$sql);
    if(!$rs) die("Probleme : ". mysqli_error($conn));
     
    echo '<table align="center">';
     
    		while($row=mysqli_fetch_array($rs)){
          echo '<tr>';
            echo '<td bgcolor="#ddd">'.$row['categorie'].'</td>';
     
    						if( isset($_GET['page']) && is_numeric($_GET['page']) )
    								$page = $_GET['page'];
    						else
    								$page = 1;
    						$pagination = 1;
    						$limit_start = ($page - 1) * $pagination;
     
    						$asql="
    							SELECT article.id, article.article, article.categorie_id
    							FROM article
    							WHERE article.categorie_id = ".$row['id']."
    							LIMIT $limit_start, $pagination
    						";
    						$ars=mysqli_query($conn,$asql);
    						if(!$ars) die("Probleme : ". mysqli_error($conn));
     
    						while($arow=mysqli_fetch_array($ars)){
    								echo '</tr><td> - '.$arow['article'].'</td><tr>';
    						}
     
              echo '</tr><tr><td>';
     
    						$nb_total = mysqli_query($conn,'SELECT COUNT(*) AS nb_total FROM article WHERE article.categorie_id = '.$row['id']);
    						$nb_total = mysqli_fetch_array($nb_total);
    						$nb_total = $nb_total['nb_total'];
     
    						$nb_pages = ceil($nb_total / $pagination);
    						if ($page > 1)
    										echo ' <a href="?page='.($page-1).'"><</a> ';
    								else
    										echo ' < ';
    								echo '<strong>'.$page.'</strong> of '.$nb_pages;
    								if ($page < $nb_pages)
    										echo ' <a href="?page='.($page+1).'">></a> ';
    								else
    										echo ' > ';
     
    					echo '<hr></td></tr>';
     
    		}
     
    echo '</table>';
     
    mysqli_close($conn);
    ?>
    Le code PHP fonctionne très bien, mes catégories ainsi que les articles s'affichent respectivement.

    C'est le page par page qui est un problème. Si je n'avais qu'une seule catégorie a afficher, je n'aurais pas à poster mais je veux afficher toutes les catégories avec leur contenu.

    Si je change de page dans une catégorie, ça change partout. Et si j'ai rien dans une catégorie, ça va incrémenté de 1 quand même.

    Correct : 1 of 3
    pas correct : 5 of 3

    La pagination est au plus simple possible, juste avec un précédent et un suivant.

    Si quelqu'un a une idée pour ne pas que mes articles que ça incrémente pas quand je clique sur les autres "suivant".

    De l'aide serait apprécié.
    Images attachées Images attachées  

  2. #2
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Bonjour.

    Je veux préciser ici que j'affiche à partir d'un while une série de catégories
    avec leurs articles respectifs.

    Chaque catégorie a sa pagination. Le problème c'est que le pagination est
    basée sur une seule requête celle qui affiche toutes les catégories.

    Les paginations sont sur la même page comme illustrer dans l'image du
    message précédent.

    ça donne ces résultats inattendus :

    4 de 10, si je clique sur suivant, ça va aller à 5 de 10.
    Mais par le fait même ça va aussi changé celui qui a 1 de 1 à 5 de 1
    et ça va faire disparaitre le contenu de celui-ci.

    C'est un problème que je n'arrive pas à régler en cherchant sur le web.

    Je cherche à résoudre le problème avec le moins de code possible et en me
    basant sur ce que j'ai de fait jusqu'alors. Si quelqu'un connait le problème,
    ça serait apprécié et ça peut en aider plus d'un.

    Salutations,
    Dan.

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Lis ce topic : Probleme pagination sur script recherche
    Il y a peu je donnais des explications sur le comment on crée une pagination.
    J'évoquais entre autre 2 manières de faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="SELECT * FROM categorie";
    Tu ne peux pas prendre ceci comme base pour créer cette pagination.
    Cette pagination ne concerne pas l'ensemble des catégories, mais d'1 catégorie, et uniquement une.

    Mais pas seulement, cette pagination concerne des articles, plus exactement des articles d'une catégorie en particulier.
    C'est le nombre total d'articles pour 1 catégorie qui fait que tu sauras le nombre de pages qu'il va avoir selon le nombre d'articles que tu souhaites afficher par page.

    Ce qui veut dire que pour démarrer cette pagination (par défaut par exemple), il faudrait au préalable savoir la catégorie pour obtenir ce nombre total d'articles pour après proposer une navigation page par page dans cette même catégorie.

    Donc soit le choix de la catégorie se fait lors d'une étape précédente, soit intégrer un menu déroulant pour choisir une catégorie.
    Au final il faut avoir 2 choses :
    - Une catégorie (la 1ère par défaut par exemple)
    - Un N° de page (la 1ère normalement).


    Tout ça si j'ai bien compris aussi.

  4. #4
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut
    Bonjour. Merci pour votre réponse.

    J'ai bien réussi à afficher toutes les catégories sur une même page avec leurs contenus.

    J'ai passé en revu :
    Citation Envoyé par RunCodePhp Voir le message
    ainsi que le tutoriel indiqué dedans. J'ai rien vu sur l'affichage de plusieurs paginations sur les catégories affichées. C'est pour une pagination sur l'ensemble de la page comme les livres-d'or.

    Mais lorsque je passe à la page suivante dans une catégorie, ça un effet sur toutes les catégories. Ça je le comprends puisque, j'utilise une requête pour les catégories et à l'intérieur de celles-ci, j'utilise une autre requête pour les articles.

    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
    while($row=mysqli_fetch_array($rs)){
     
    	echo '<tr>';
    		echo '<td>======================='.$row['categorie'].'</td>';
     
    	 $asql="
    		SELECT article.id, article.article,	article.categorie_id
    		FROM article
    		WHERE article.categorie_id = ".$row['id']." 
    	 ";
    	 $ars=mysqli_query($conn,$asql);
    	 if(!$ars) die("Probleme : ". mysqli_error($conn));
     
    	 while($arow=mysqli_fetch_array($ars)){
    		echo '</tr><td> - '.$arow['article'].'</td><tr>';
    	 } // deusieme while
     
    } //premier while
    C'est que le page par page passe par la requête des articles et sur tous les articles à la fois. Si je mets 10 articles par page. Je clique sur suivant sur la catégorie qui a 40 articles étant rendu à la page 3. La catégorie qui en a seulement 10 articles, ça va indiquer je suis à la page 3 de 1.

    Si je clique sur suivant ou précédent, ça va changer toutes les pages de toutes les catégories.

    J'ai essayé des versions en jquery. Pas de succès.

    J'ai essayé une pagination simple PHP/Mysql, ça change les pages mais sur la requête des articles.

    Faudrait que je puisse cliquer sur "suivant" d'une catégories et les pages changeraient que sur cette catégorie.

    Si je décide d'utiliser un menu déroulant, ça marche à merveille. Le problème serait résolu à ce moment là.

    Voila.

  5. #5
    Membre éclairé Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Par défaut Ne peut être résolu juste avec PHP et MYSQL
    Bonjour, voici ma révision:

    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
    <?php
    include 'config_open_db.php';
     
    $sqlc="
    	SELECT c.id as id, c.categorie AS categorie
    	FROM categorie AS c
    ";
    $rsc=mysqli_query($conn,$sqlc);
    while($rowc=mysqli_fetch_array($rsc)){
      echo $rowc['categorie'].'<br>';
     
    		$sqla="
    			SELECT a.id AS aid, a.article AS article, categorie.categorie AS categorie
    			FROM article AS a
    			INNER JOIN categorie ON a.categorie_id = categorie.id
    			WHERE categorie.id = ".$rowc['id']."
    		";
    		$rsa=mysqli_query($conn,$sqla);
    		while($rowa=mysqli_fetch_array($rsa)){
    			echo $rowa['aid'].'<br>';
    		}
     
    }
     
    mysqli_close($conn);
    ?>
    Le résultat (les chiffres représentent le ID des articles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VOITURES
    3
    4
    ORDINATEURS
    1
    2
    6
    NOURRITURE
    5
    JOUETS
    Si je mets la clause LIMIT, ca change le résultat des articles pour toutes les catégories en même temps. Donc, Je ne vois pas comment on peut paginer dans la même fichier plusieurs catégories de manière indépendante.

    En tout cas pas avec PHP et MYSQL seuls. Mon poste restera non résolu.

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Si tu veux faire une pagination dans la même page pour chaque catégorie, il faut faire autant de paginations indépendantes qu'il y aura de catégories.

    C'est à dire quelque chose comme ceci si j'ai bien compris :
    CATEGORIE 1
    - article 1
    - article 2
    [page 1] [page 2] [page 3]

    CATEGORIE 2
    - article 1
    - article 2
    [page 1] [page 2]

    CATEGORIE 3
    - article 1
    - article 2
    [page 1] [page 2] [page 3] [page 4]

    ... etc ...
    Pour cela, il faut que tous les liens contiennent en paramètre la catégorie et la page concernée (sous entendue de la catégorie en court), donc cela aussi bien dans les articles et au niveau des liens des différentes paginations.

    Donc au tout début, il faudra des valeurs par défaut pour tout :
    page 1 - catégorie 1
    page 1 - catégorie 2
    page 1 - catégorie 3
    ... etc ...

    Après cela, au moment (du moins juste avant) de faire chaque pagination, il faudra vérifier si les paramètres existent (page et catégorie).
    Admettons qu'on clic sur la page 2 de la catégorie 2, il y a aura alors une pagination différente uniquement sur celle-ci : On veut les articles de la page 2
    Ce qui sous entend que pour les autres catégories ça sera une pagination par défaut (page 1 et les 1er articles).

    Donc lors de la 1ère boucle on va détecter qu'on souhaite la page 2 pour la catégorie 2.
    Il faudra alors faire une requête qui va rechercher les articles de la page 2 pour cette catégorie 2, puis un LIMIT tenant compte du nombre d'articles par page et du N° de page demandé.
    Si c'est 5 articles par page, ça doit donner : LIMIT 10, 5
    Le principe est là il me semble.

    Le seul point commun qu'il y a pour toutes les catégories, c'est de faire une requête pour savoir le nombre total d'articles qu'il y a pour chaque catégorie (donc en boucle) pour créer la pagination.


    Essai de faire un scénario comme ci-dessus, et essai de voir quelles sont les données que tu as besoin pour faire cette pagination.
    Mais surtout, fait le pour 1 seule catégorie d'abord, et fonctionnel.
    A partir du moment où tu aura 1 qui fonctionne, tu sauras sur quoi se base la pagination.


    A coté de ça, pourquoi fait tu cela sur une même page ?
    N'est-ce pas trop lourd ? (faut prendre conscience que cette page sera recharger à chaque fois, donc les mêmes traitement pour toutes les catégories)
    Aussi, en faisant comme cela, la pagination ne concerne à chaque fois qu'une seule catégorie, et uniquement.


    Si tu veux faire une pagination sur plusieurs (ou toutes) catégories, comme visualiser d'un coup la page 2 de la catégorie1 et la page 3 de la catégorie2, le faire totalement en Php ca va être rude, très rude à mon sens.
    Ici, il vaut mieux opter pour de l'Ajax, pour 2 raisons :
    - plus simple à la mise en oeuvre (à condition de savoir faire de l'Ajax)
    - moins lourd car l'Ajax permet de faire cela en mode asynchrone, c'est à dire sans devoir recharger entièrement la page.

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

Discussions similaires

  1. Chargement multiple d'un même fichier XML
    Par noblind dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 08/02/2011, 11h17
  2. Réponses: 3
    Dernier message: 25/01/2010, 13h49
  3. Macro pour sauvegardes multiples d'un même fichier
    Par gigotdagneau dans le forum Conception
    Réponses: 11
    Dernier message: 26/10/2009, 12h26
  4. Réponses: 5
    Dernier message: 08/12/2004, 20h42
  5. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39

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