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

  1. #21
    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
    Ton code utilise plus haut c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="?page='.($page+1).'&cat='.$cat.'">></a>
    Ici lors d'un clic il sera renvoyé en GET un paramètre avec comme nom : page
    Puis un autre avec comme nom : cat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_GET['id'])){ //vérifier la présence de l'id en get
      if($_GET['id'] === $row['id']){ //vérifier si identique
     
      }
    }
    Ci-dessus tu exploites comme nom id.
    Ce n'est pas id qu'il faudrait utiliser mais cat (qui va contenir l'ID de la catégorie).

    Dans mes explications j'utilisais ID pour juste faire comprendre.


    Ceci dit, la traduction de tout cela donne normalement ceci :
    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)) {
        // Etape 1
        if (!isset($_SESSION['pagination'][$row['id']])) {
            // Initialisation de la page par défaut de chaque catégorie (1 seule fois)
            $_SESSION['pagination'][$row['id']] = 1;
        }
        // Etape 2
        if (isset($_GET['cat'], $_GET['page']) && (int)$_GET['cat'] === (int)$row['id']) {
            $page = (int)$_GET['page'];
            $_SESSION['pagination'][$row['id']] = (int)$page;
        }
        else {
            $page = (int)$_SESSION['pagination'][$row['id']];
        }
        //
        $cat_id = (int)$row['id'];
        // ... etc ...
    }
    Tout ceci en espérant pas me tromper.

  2. #22
    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.

    Voici mon résultat qui fonctionne bien.

    Je peux changé de page pour chaque catégorie individuellement dans le même fichier. C'est génial. Merci RunCodePhp.

    La seule chose qui resterait, c'est de paginer l'ensemble des catégories. J'ai tenté de le faire avec les notions que j'ai apprises, ça pas été un succès.

    Mon code avant pagination sur l'ensemble :

    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
    72
    73
    74
    75
    <?php 
    session_start();
     
    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="#bcc">'.$row['categorie'].'</td>';
    			if (!isset($_SESSION['pagination'][$row['id']])){
    				$_SESSION['pagination'][$row['id']] = 1;
    			}
    			if (isset($_GET['cat'], $_GET['page']) && (int)$_GET['cat'] === (int)$row['id']){
    				$page = (int)$_GET['page'];
    				$_SESSION['pagination'][$row['id']] = (int)$page;
    			}
    			else{
    				$page = (int)$_SESSION['pagination'][$row['id']];
    			}
    			$cat_id = (int)$row['id'];
     
    			$pagination = 1;
    			$limit_start = ($page - 1) * $pagination;
     
    			$asql="
    				SELECT article.id, article.article, article.categorie_id, categorie.id
    				FROM article
    				INNER JOIN categorie ON article.categorie_id = categorie.id
    				WHERE	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 <= $nb_total){
     
    					if ($page > 1)
    							echo ' <a href="?page='.($page-1).'&cat='.$cat_id.'"><</a> ';
    						else
    							echo ' < ';
    						echo '<strong>'.$page.'</strong> of '.$nb_pages;
    					if ($page < $nb_pages)
    							echo ' <a href="?page='.($page+1).'&cat='.$cat_id.'">></a> ';
    						else
    							echo ' > ';
    				}
     
    		echo '<hr></td></tr>';
     
    	}
     
    echo '</table>';
     
    mysqli_close($conn);
    ?>
    J'ai revenu sur mon code qui marchait.

  3. #23
    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
    Je crois avoir perdu un peu le fil

    Est-ce quelque chose comme ça :
    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
    CATEGORIE 1
    - article 1
    - article 2
     
    CATEGORIE 2
    - article 1
    - article 2
    - article 3
    - article 4
     
    CATEGORIE 3
    - article 1
    - article 2
    - article 3
     
    (Pagination des catégories)  cat1 - cat2 - cat3
    Au felling comme ça, je dirais qu'il faudrait stocker les catégories dans un tableau à chaque tour de boucle pour, comme dans l'exemple ci-dessus, les ré-exploiter pour à nouveau les afficher en boucle.
    La catégorie sélectionnée (ou par défaut), on l'a, elle est soit dans $_GET['cat'], ou alors c'est la 1ère (par défaut).
    Aucun problème pour mettre en avant la catégorie sélection (genre couleur de fond).

    Je ne crois pas qu'on puisse parler de "pagination", c'est juste un ré-affichage des catégories.



    A moins qu'il y ait beaucoup de catégories, et que tu souhaites en n'afficher que 5 maxi au total par exemple.
    Faut voir.
    (Donnes plus d'explications, bien souvent il faut un poil deviner se que tu recherche à faire )

  4. #24
    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
    C'est exactement ça.

    En faite, les catégories sont créé à la volé dans une base de données.
    Donc au fur et à mesure.

    Dans la catégorie1, j'entre mes données si j'en mets 10, bien, je vais avoir 10 articles.

    C'est la même chose pour les catégories. Si un article ne fait pas dans une catégorie existante, bien, j'en créé une. Ce qui fait je me ramasse avec plusieurs catégories qui va falloir paginer.

    catégorie1
    - article1
    - article2

    catégorie2
    - article1
    - article2

    ----------------

    < 1 de 100 >

    oui, il se peut que j'aie jusqu'à un nombre indéfini de catégories. Donc, faut que je prévoie que ça entre pas dans la page en cour.

    Il me manque que ça pour compléter.

    Vu la complexité de la pagination, je ne chiffre pas dans la barre les pages comme ceci :

    < 1 2 3 4 ... 33 34 35 >

    ça serait plus pratique mais ça alourdirait le code. Quoique apprendre à le faire serait une bonne idée.

    Mais le principal est de réaliser la pagination simple comme on a fait à date. c'est à dire < 2 de 100 > Le 100 est dynamique dans le sens qui va au nombre de catégorie dans la base ainsi créée.

  5. #25
    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
    Ok, c'est bien ce que je pensais.

    J'ai pas vraiment l'esprit du comment le faire, mais c'est certain, c'est très simple (ou plus simple que tu ne le penses vu que tu bloques un peu).

    Tout part de cette catégorie par défaut (la 1ère normalement), ou de $_GET['cat'] si une catégorie est sélection.
    Il te faut aussi te baser sur le nombre total de catégorie.
    C'est la base.

    A la suite de ça, il te faudra définir d'autres valeurs de références.
    Comme :
    - le nombre max de catégories à afficher au début (pour : ... cat20 - cat21, cat22) ici 3 catégories
    - le nombre max de catégories à afficher la fin (pour : ... cat97 - cat98, cat99) ici 3 catégories aussi.
    ... peut être d'autres, faut voir.

    Après, tout est une question de calcul selon le nombre total et de la catégorie par défaut/sélectionnée.


    Tu peux le simuler en faisant ça de manière indépendant (page de test), suffit de créer un tableau de 100 valeurs en boucles, tantôt moins, histoire de voir comment ça réagit.
    C'est souvent plus simple, plus rapide que de faire des requêtes SQL.

  6. #26
    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
    J'ai fait une pagination mais quand je clique, ça réinitialise tout.
    C'est la même chose qu'au début quand on avait commencé avec la pagination des articles et qu'on devait tenir compte des catégories.

    J'ai fait plusieurs interlignes pour séparer le code.

    ce que ça donne :

    Le contenu:
    VOITURES
    - Minoune
    < 1 of 2 >
    ORDINATEURS
    - dell
    < 1 of 3 >

    Catégories :
    < 1 of 2>

    et le url que ça donne avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/cat_12211/?page=2&cat=1
    J'ai cliqué sur voiture à page suivante.

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    <?php 
    session_start();
     
    include 'config_open_db.php';
     
     
     
     
    // pagination pour toutes les catégories précédent et suivant
    // ne fait pas parti du while catégories versus articles
    // utilise la limit de while catégories versus articles
    if( isset($_GET['pagec']) && (int)($_GET['pagec']) ){
    	    $pagec = $_GET['pagec'];
    	    $cat = $_GET['cat'];
    	    $page = $_GET['page'];
    	}
    	else{
    	    $pagec = 1;
          $paginationc = 2;
          $limit_startc = ($pagec - 1) * $paginationc;
      }
     
     
     
     
    $sql="SELECT * FROM categorie LIMIT $limit_startc, $paginationc";
     
    $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="#bcc">'.$row['categorie'].'</td>';
    			if (!isset($_SESSION['pagination'][$row['id']])){
    				$_SESSION['pagination'][$row['id']] = 1;
    			}
    			if (isset($_GET['cat'], $_GET['page']) && (int)$_GET['cat'] === (int)$row['id']){
    				$page = (int)$_GET['page'];
    				$_SESSION['pagination'][$row['id']] = (int)$page;
    			}
    			else{
    				$page = (int)$_SESSION['pagination'][$row['id']];
    			}
    			$cat_id = (int)$row['id'];
     
    			$pagination = 1;
    			$limit_start = ($page - 1) * $pagination;
     
    			$asql="
    				SELECT article.id, article.article, article.categorie_id, categorie.id
    				FROM article
    				INNER JOIN categorie ON article.categorie_id = categorie.id
    				WHERE	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 <= $nb_total){
     
    					if ($page > 1)
    							echo ' <a href="?page='.($page-1).'&cat='.$cat_id.'"><</a> ';
    						else
    							echo ' < ';
    						echo '<strong>'.$page.'</strong> of '.$nb_pages;
    					if ($page < $nb_pages)
    							echo ' <a href="?page='.($page+1).'&cat='.$cat_id.'">></a> ';
    						else
    							echo ' > ';
    				}
     
    		echo '<hr></td></tr>';
     
    	}
     
    		echo '<hr></td></tr>';
     
     
     
     
    // pagination pour toutes les catégories précédent et suivant
    // ne fait pas parti du while catégories versus articles
    $nb_totalc = mysqli_query($conn,'SELECT COUNT(*) AS nb_totalc FROM categorie');
    $nb_totalc = mysqli_fetch_array($nb_totalc);
    $nb_totalc = $nb_totalc['nb_totalc'];
     
    $nb_pagesc = ceil($nb_totalc / $paginationc);
    echo '<br>';
    if ($pagec > 1)
            echo "<a href=\"?pagec=".($pagec-1)."\"><</a>";
        else
            echo " < ";
    						echo '<strong>'.$pagec.'</strong> of '.$nb_pagesc;
        if ($pagec < $nb_pagesc)
            echo "<a href=\"?pagec=".($pagec+1)."\">></a>";
        else
            echo " > ";
     
     
     
     
     
    echo '</table>';
     
    mysqli_close($conn);
    ?>

  7. #27
    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
    Mission accomplie !

    Résultat qui fait tout: C'est à dire paginer les articles de chaque catégorie et paginer l'ensemble des catégories.

    catégorie1
    -article
    -article

    < 1 of 2 > pagination des articles

    catégorie2
    -article
    -article

    < 1 of 2 > pagination des articles

    < 1 of 2 > ici c'est la pagination des catégories.

    Le tout est conservé quand je change de page
    que ce soit des catégories ou des articles.

    Si je voudrais continuer. ça serait d'ajouter les
    numéros de page comme ceci au niveau des
    catégories

    < 1 2 3 4 5 ... 22 23 24 25 26 > seulement sur les catégories

    Merci de m'avoir initié RunCodePhp et soutenu. J'apprécie!

    Le code finale :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    <?php 
    session_start();
     
    include 'config_open_db.php';
     
     
     
     
    // pagination pour toutes les catégories précédent et suivant
    // ne fait pas parti du while catégories versus articles
    // utilise la limit de while catégories versus articles
    if( isset($_GET['pagec']) && (int)($_GET['pagec']) )
    	    $pagec = $_GET['pagec'];
    	else
    	    $pagec = 1;
    	$paginationc = 2;
    	$limit_startc = ($pagec - 1) * $paginationc;
     
     
     
     
     
    $sql="SELECT * FROM categorie LIMIT $limit_startc, $paginationc";
     
    $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="#bcc">'.$row['categorie'].'</td>';
    			if (!isset($_SESSION['pagination'][$row['id']])){
    				$_SESSION['pagination'][$row['id']] = 1;
    			}
    			if (isset($_GET['cat'], $_GET['page']) && (int)$_GET['cat'] === (int)$row['id']){
    				$page = (int)$_GET['page'];
    				$_SESSION['pagination'][$row['id']] = (int)$page;
    			}
    			else{
    				$page = (int)$_SESSION['pagination'][$row['id']];
    			}
    			$cat_id = (int)$row['id'];
     
    			$pagination = 1;
    			$limit_start = ($page - 1) * $pagination;
     
    			$asql="
    				SELECT article.id, article.article, article.categorie_id, categorie.id
    				FROM article
    				INNER JOIN categorie ON article.categorie_id = categorie.id
    				WHERE	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 <= $nb_total){
     
    					if ($page > 1)
    							echo ' <a href="?page='.($page-1).'&cat='.$cat_id.'&pagec='.$pagec.'"><</a> ';
    						else
    							echo ' < ';
    						echo '<strong>'.$page.'</strong> of '.$nb_pages;
    					if ($page < $nb_pages)
    							echo ' <a href="?page='.($page+1).'&cat='.$cat_id.'&pagec='.$pagec.'">></a> ';
    						else
    							echo ' > ';
    				}
     
    		echo '<hr></td></tr>';
     
    	}
     
    		echo '<hr></td></tr>';
     
     
     
     
    // pagination pour toutes les catégories précédent et suivant
    // ne fait pas parti du while catégories versus articles
    $nb_totalc = mysqli_query($conn,'SELECT COUNT(*) AS nb_totalc FROM categorie');
    $nb_totalc = mysqli_fetch_array($nb_totalc);
    $nb_totalc = $nb_totalc['nb_totalc'];
     
    $nb_pagesc = ceil($nb_totalc / $paginationc);
    echo '<br>';
    if ($pagec > 1)
            echo "<a href=\"?pagec=".($pagec-1)."\"><</a>";
        else
            echo " < ";
    						echo '<strong>'.$pagec.'</strong> of '.$nb_pagesc;
        if ($pagec < $nb_pagesc)
            echo "<a href=\"?pagec=".($pagec+1)."\">></a>";
        else
            echo " > ";
     
     
     
     
     
    echo '</table>';
     
    mysqli_close($conn);
    ?>

  8. #28
    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.

    J'ai pû ajouter les numéros de pages, mais il me reste plus qu'à ajouter une limite pour n'avoir qu'un certain nombre de page avant et après.

    Pas pratique si j'ai trop de page à afficher.

    < 123 ... 11 12 13 >

    C'est là que je suis un peu bloqué dans les ...

    Pour les <> je peux me servir de ce que j'ai dans mon code.

    mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    echo '<p align="center">Page : '; 
    for($i=1; $i<=$nb_pagesc; $i++) 
    {
     
         if($i==$pagec) 
         {
             echo '<span class="now">'.$i.'</span>'; 
         }	
         else //Sinon...
         {
              echo ' <a href="?pagec='.$i.'">'.$i.'</a> ';
         }
    }
    echo '</p>';
    Je pense bien que mon code va être pas mal complet. :-)
    Images attachées Images attachées  

  9. #29
    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 résultat finale accompli
    Bonjour.

    Bon enfin!

    J'en suis venu à bout de ce que je voulais. Il me reste qu'à l'adapter à ce que je veux maintenant. Tout ça dans une seule page. Je laisse le code entier afin de le partager. L'aide de RunCodePhp m'a été indispensable et je lui dit merci. J'ai appris beaucoup depuis.

    Je mets en résolution mais si quelqu'un désire apporter des améliorations, ça sera un plus.

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    <?php session_start(); ?>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title></title>
    <style>
      body { background-color:pink;font-size:20px }
      td { text-align:center;width:50% }
      .cat { width:200px;height:50px;color:white;background:black }
      li { background-color:yellow;color:black }
      li:hover { background-color:red }
      a.l:link, .l:visited, .l:active { background-color:white;color:black;border-radius:11px;text-decoration:none;margin:3px;padding:5px }
      a.l:hover { background-color:black;color:white;padding:5px }
      .now { background-color:black;color:white;border-radius:11px;padding:5px }
    </style>
    </head>
    <body>
     
    <?php
    include 'config_open_db.php';
     
    // categories
    if( isset($_GET['pagec']) && (int)($_GET['pagec']) )
    	    $pagec = $_GET['pagec'];
    	else
    	    $pagec = 1;
    	$paginationc = 3;
    	$limit_startc = ($pagec - 1) * $paginationc;
     
    $sql="SELECT * FROM categorie LIMIT $limit_startc, $paginationc";
     
    $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 class="cat">'.$row['categorie'].'</td>';
    			if (!isset($_SESSION['pagination'][$row['id']])){
    				$_SESSION['pagination'][$row['id']] = 1;
    			}
    			if (isset($_GET['cat'], $_GET['page']) && (int)$_GET['cat'] === (int)$row['id']){
    				$page = (int)$_GET['page'];
    				$_SESSION['pagination'][$row['id']] = (int)$page;
    			}
    			else{
    				$page = (int)$_SESSION['pagination'][$row['id']];
    			}
    			$cat_id = (int)$row['id'];
     
    			$pagination = 1;
    			$limit_start = ($page - 1) * $pagination;
     
    			$asql="
    				SELECT article.id, article.article, article.categorie_id, categorie.id
    				FROM article
    				INNER JOIN categorie ON article.categorie_id = categorie.id
    				WHERE	categorie.id = ".$row['id']."
    				LIMIT $limit_start, $pagination
    			";
    			$ars=mysqli_query($conn,$asql);
    			if(!$ars) die("Probleme : ". mysqli_error($conn));
     
          echo '<ul>';
    			while($arow=mysqli_fetch_array($ars)){
    				echo '<tr><td><a href="#"><li>'.$arow['article'].'</li></a></td><tr>';
    			}
          echo '</ul>';
     
    			echo '</tr><tr><td>';
     
          // articles
    			$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 <= $nb_total){
     
              if($nb_pages != 1){
                echo '<p align="center">';
     
                echo ' <a class="l" href="?page=1&cat='.$cat_id.'&pagec='.$pagec.'">F</a> ';
     
                if ($page > 1){
                  echo '<a class="l" href="?page='.($page-1).'&cat='.$cat_id.'&pagec='.$pagec.'"><</a> ';
                }
                else{
                  echo ' <span class="now"><</span> ';
                }
     
    						$range = 1;
    						for ($i = ($page - $range); $i < (($page + $range) + 1); $i++){
    							if (($i > 0) && ($i <= $nb_pages)){
    								if ($i == $page){
    									echo '<span class="now">'.$i.'</span>';
    								} 
    								else{
    									echo ' <a class="l" href="?page='.$i.'.&cat='.$cat_id.'&pagec='.$pagec.'">'.$i.'</a> ';
    								}
    							}
    						}
     
                if($page < $nb_pages){
                    echo '<a class="l" href="?page='.($page+1).'&cat='.$cat_id.'&pagec='.$pagec.'">></a> ';
                }
                else{
                  echo ' <span class="now">></span> ';
                }
     
                echo ' <a class="l" href="?page='.$nb_pages.'&cat='.$cat_id.'&pagec='.$pagec.'">L</a> ';
     
                echo '</p>';
     
              }
            }
     
    		echo '</td></tr>';
     
    	}
     
    		echo '<tr><td>';
     
    // categories
    $nb_totalc = mysqli_query($conn,'SELECT COUNT(*) AS nb_totalc FROM categorie');
    $nb_totalc = mysqli_fetch_array($nb_totalc);
    $nb_totalc = $nb_totalc['nb_totalc'];
     
    $nb_pagesc = ceil($nb_totalc / $paginationc);
    echo '<hr>';
     
    if($nb_pagesc != 1){
    	echo '<p align="center">';
     
      echo ' <a class="l" href="?pagec=1">F</a> ';
     
    	if ($pagec > 1){
        echo '<a class="l" href="?pagec='.($pagec-1).'"><</a> ';
    	}
    	else{
        echo ' <span class="now"><</span> ';
    	}
     
      $rangec = 6;
      for ($ic = ($pagec - $rangec); $ic < (($pagec + $rangec) + 1); $ic++){
        if (($ic > 0) && ($ic <= $nb_pagesc)){
          if ($ic == $pagec){
            echo '<span class="now">'.$ic.'</span>';
          } 
          else{
            echo ' <a class="l" href="?pagec='.$ic.'">'.$ic.'</a> ';
          }
        }
      }
     
    	if($pagec < $nb_pagesc){
    			echo '<a class="l" href="?pagec='.($pagec+1).'">></a>';
    	}
    	else{
            echo ' <span class="now">></span> ';
    	}
     
      echo ' <a class="l" href="?pagec='.$nb_pagesc.'">L</a> ';
     
      echo '</p>';
     
    }
     
        echo '</td></tr>';
     
    echo '</table>';
     
    mysqli_close($conn);
    ?>
    </body>
    </html>
    Images attachées Images attachées  

  10. #30
    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
    C'est tout bon on dirait

    si quelqu'un désire apporter des améliorations, ça sera un plus.
    Le plus qui serait bon a apporter, n'est pas lier à tout cette pagination, mais dans la manière de structure cette page (de toutes tes pages même), c'est à dire de séparer la partie traitement et la partie interface (tout le code HTML).

    C'est théoriquement un moyen de rendre les choses plus souples, plus malléables, surtout si du relooking est effectué fréquemment par exemple.
    Mais un point très important et même essentiel de comprendre, c'est qu'un site Web a une relation très forte entre client/serveur, qui eux sont géographiquement (physiquement) pas à coté, il peu avoir de très grande distance (France/La Réunion par exemple).

    Ce que je je veux dire par là que le code Php est lui interprété par le serveur, les code HTML, Css, Javascript eux seront interprétés (longtemps après) par le client/navigateur.
    Donc calquer le déroulement ton code Php selon celui du Html est tout simple une erreur de perception, une erreur de conception.

    D'ailleurs, tu as surement volontairement placé le session_start() au tout début, c'est à dire avant le moindre code HTML (avant le doctype).


    Les remaniements seront assez important en prenant cette voie de séparer les choses, mais on y gagne tôt ou tard en procédant ainsi.
    Pour te le démontrer, essai par exemple de t'imposer de mettre le nom de la catégorie sélectionnée ou par défaut dans la balise <title></title>, de même que le n° de page (pagec), et de l'autre page (page).
    Comment ferais tu cela ?


    Autre petite parenthèse au passage.
    Le contenu de cette balise <title> est l'un des éléments les plus importants car c'est en partie sur ce contenu que les moteurs de recherche se base pour indexer les page Web, de les classer selon la pertinence des mots utilisés.

    Grosso modo (vraiment très grossièrement) il faudrait prévoir un déroulement comme ceci :
    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
    <?php
    // PARTIE TRAITEMENTS
    session_start();
    include 'config_open_db.php';
     
    // On stock/traite toutes les données
    if( isset($_GET['pagec']) && (int)($_GET['pagec']) )
     
    ... etc ...
     
    // Les catégories
    $cpt_c = 0;
    while ($row = mysqli_fetch_array($rs)) {
        $categories[$cpt] = array(
            'id' => $row['id'],
            'categorie' => $row['categorie']
        );
     
        // Les articles
        $cpt_a = 0;
        while ($arow = mysqli_fetch_array($ars)) {
            $categories[$cpt_c]['articles'][$cpt_a] = array(
                'id' => $arow['id'],
                'article' => $arow['article']
            );
            //
            $cpt_a++;
        }
        //
        $cpt_c++;
    }
     
    // PARTIE INTERFACE
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <title></title>
    </head>
    <body>
     
    ... etc ...
     
    <?php
    foreach ($categories as $cats) {
        ... etc ...
        if (isset($cats['articles']) && is_array($cats['articles'])) {
            foreach ($cats['articles'] as $articles) {
                ... etc ...
            }
        }
    }
    ?>
    </body>
    </html>
    L'idée est donc de tout stocker dans un tableau, du moins les catégories (1ère dimension) et les articles associés (3ème dimensions).
    Certes, l'inconvénient est de faire 2 fois la même chose :
    - des boucles/requêtes SQL pour tout stocker
    - re-boucler à nouveau coté interface

    Le gros avantage, c'est du fait de tout faire d'abord en amont permettra d'exploiter n'importe quelle données initialisée/stockée autant de fois que cela sera nécessaire et n'importe où, dans la partie interface entre autre.

    On pourra alors sans mal de mettre le nom de la catégorie dans la balise TITLE, dans un menu à gauche ou/et à droite, dans le pied de page, etc ...



    C'est juste une idée, une suggestion

  11. #31
    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
    séparer la partie traitement et la partie interface (tout le code HTML)
    Je vais devoir aussi aller dans ce sens pour que mes choses soit plus organisées. A force de coder.

    J'ai fait ce code que je nomme version 1. Une version 1.1 qui sera l'amélioration du code mais je vais faire un autre poste pour ne pas surcharger le sujet. L'idée princpiale du sujet était de réaliser ce qu'on a fait.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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