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 :

Pagination dans un tableau


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut Pagination dans un tableau
    Bonjour a tous,
    je suis en train d'essayer de faire mon site en php(et je débute..), mais j'ai un problème avec une pagination dans un tableau..
    Pour faire simple, sur l'index, j'ai un tableau en 2 colonnes. Dans chacune de mes colonnes, j'ai les résumés de news de deux catégories différentes.
    Je voudrais faire une pagination pour chaque colonnes de façon a ce que si je vais sur la page 2 de la colonne 1, je reste sur la page 1 de l'autre..
    Voici le code que j'ai essayer, mais qui ne fonctionne pas comme je le voudrais:

    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
     
    <table width="500" border="0" cellspacing="20">
      <tr>  
        <td align="center">Categotie 1</td>
        <td align="center">Categorie 2</td>
      </tr>
     
      <tr>
        <td>
     
        <!-- Categorie 1 -->
     
    <?php
    require "config.php";
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database);
     
    $sql = ('SELECT COUNT(id) as NbArt FROM prods');
    		$req = mysql_query($sql) or die('Erreur SQL!<br />'.$sql.'<br />'.mysql_error());;
    		$data=mysql_fetch_assoc($req);
     
    		$NbArt = $data['NbArt'];
    		$perPage = 3;
    		$nbPage = ceil($NbArt/$perPage);
     
    		if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
    			$cPage = $_GET['p'];
    		}
    		else{
    			$cPage =1;
    		}
     
     
     
    {
        $sql = "SELECT * FROM prods ORDER BY date DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
        $req = mysql_query($sql) or die(mysql_error());
        while($data = mysql_fetch_assoc($req)){
            ?>
            <h2><a href="../drpico.free.fr/news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
            <em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
            <p><?php echo stripslashes($data['description']); ?></p>
            <?php
        }
        }
    ?>
    <div align=center>
    <?php
    	for($i=1;$i<=$nbPage;$i++){
    			if($nbPage<=1){
    			echo "";
    			}
    			elseif($i==$cPage){
    				echo " $i ";
    			}
    			else{
    				echo " <a href=\"index.php?p=$i\">$i</a> ";
    			}
    		}
    ?>
     
        </td>
     
        <td>
     
        	<!-- Categotie 2 --> 
     
    <?php
    require "config.php";
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database);
     
    $sql = ('SELECT COUNT(id) as NbArt FROM news');
    		$req = mysql_query($sql) or die('Erreur SQL!<br />'.$sql.'<br />'.mysql_error());;
    		$data=mysql_fetch_assoc($req);
     
    		$NbArt = $data['NbArt'];
    		$perPage = 3;
    		$nbPage = ceil($NbArt/$perPage);
     
    		if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
    			$cPage = $_GET['p'];
    		}
    		else{
    			$cPage =1;
    		}
     
     
     
    {
        $sql = "SELECT * FROM news ORDER BY date DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
        $req = mysql_query($sql) or die(mysql_error());
        while($data = mysql_fetch_assoc($req)){
            ?>
            <h2><a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
            <em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
            <p><?php echo stripslashes($data['description']); ?></p>
            <?php
        }
        }
    ?>
    <div align=center>
    <?php
    	for($i=1;$i<=$nbPage;$i++){
    			if($nbPage<=1){
    			echo "";
    			}
    			elseif($i==$cPage){
    				echo " $i ";
    			}
    			else{
    				echo " <a href=\"index.php?p=$i\">$i</a> ";
    			}
    		}
    ?>
        </td>
      </tr>
    </table>
    Avec ce code, si je passe a la page 2 d'une catégorie, je passe sur la page 2 des deux catégories..
    Auriez vous une idée, une piste pour me faire avancer??
    Merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    la solution est de faire 2 systèmes séparés de pagination.

    Pour l'instant, tu fais un système basé sur "Categorie 1" et appliqué en même temps à "Categorie 2".

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Tout bêtement..
    Du coup plutôt quelque choses 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
    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
     
    <table width="500" border="0" cellspacing="20">
      <tr>  
        <td align="center">Categotie 1</td>
        <td align="center">Categorie 2</td>
      </tr>
     
      <tr>
        <td>
     
        <!-- Categorie 1 -->
     
    <?php
    require "config.php";
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database);
     
     
    $page = 'Categorie1';
     
     
    $sql = ('SELECT COUNT(id) as NbProd FROM prods');
     
    		$req = mysql_query($sql) or die('Erreur SQL!<br />'.$sql.'<br />'.mysql_error());;
    		$data=mysql_fetch_assoc($req);
     
    		$NbProd = $data['NbProd'];
    		$perPage = 3;
    		$nbPage = ceil($NbProd/$perPage);
     
    		if(isset($_GET['prod']) && $_GET['prod']>0 && $_GET['prod']<=$nbPage){
    			$cPage = $_GET['prod'];
    		}
    		else{
    			$cPage =1;
    		}
     
     
     
    {
        $sql = "SELECT * FROM prods ORDER BY date DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
        $req = mysql_query($sql) or die(mysql_error());
        while($data = mysql_fetch_assoc($req)){
            ?>
            <h2><a href="../drpico.free.fr/news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
            <em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
            <p><?php echo stripslashes($data['description']); ?></p>
            <?php
        }
        }
    ?>   
        </td>
     
        <td>
     
        	<!-- Categotie 2 --> 
     
    <?php
    require "config.php";
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database);
     
    $page = 'Categotie2';
     
    $sql = ('SELECT COUNT(id) as NbArt FROM news');
    		$req = mysql_query($sql) or die('Erreur SQL!<br />'.$sql.'<br />'.mysql_error());;
    		$data=mysql_fetch_assoc($req);
     
    		$NbArt = $data['NbArt'];
    		$perPage = 3;
    		$nbPage = ceil($NbArt/$perPage);
     
    		if(isset($_GET['news']) && $_GET['news']>0 && $_GET['news']<=$nbPage){
    			$cPage = $_GET['news'];
    		}
    		else{
    			$cPage =1;
    		}
     
     
     
    {
        $sql = "SELECT * FROM news ORDER BY date DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
        $req = mysql_query($sql) or die(mysql_error());
        while($data = mysql_fetch_assoc($req)){
            ?>
            <h2><a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
            <em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
            <p><?php echo stripslashes($data['description']); ?></p>
            <?php
        }
        }
    ?>
        </td>
      </tr>
      <tr>
      	<td>
        <div align=center>
    <?php
     
    $page = 'Categorie1';
     
    	for($i=1;$i<=$nbPage;$i++){
    			if($nbPage<=1){
    			echo "";
    			}
    			elseif($i==$cPage){
    				echo " $i ";
    			}
    			else{
    				echo " <a href=\"index.php?prod=$i\">$i</a> ";
    			}
    		}
    ?>
    </div>
    	</td>
        <td>
        <div align=center>
    <?php
     
    $page = 'Categorie2';
     
    	for($i=1;$i<=$nbPage;$i++){
    			if($nbPage<=1){
    			echo "";
    			}
    			elseif($i==$cPage){
    				echo " $i ";
    			}
    			else{
    				echo " <a href=\"index.php?news=$i\">$i</a> ";
    			}
    		}
    ?>
    </div>
    	</td>
       </tr>
    </table>
    Cependant, un problème persiste!
    Si je vais sur la page 2 de la catégorie 1, puis sur la page 2 de la catégorie 2, la catégorie 1 retourne en première page.. Y a t-il une solution pour empêcher cela?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Hello,
    je vois ca comme ca :
    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
    <?php
    // config + connexion a la bd
    require "config.php";
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database);
    // -----------
    // CATEGORIE 1 : prods
    // -----------
    	// cat1 requete : nombre total
    	$cat1_sql = "SELECT COUNT(id) AS cat1_NbArt FROM prods;";
    	$cat1_req = mysql_query($cat1_sql) or die('Erreur SQL!<br />'.$cat1_sql.'<br />'.mysql_error());;
    	$cat1_data = mysql_fetch_assoc($cat1_req);
    	$cat1_NbArt = $cat1_data['cat1_NbArt'];
    	$cat1_perPage = 3; // nombre par page
    	$cat1_nbPage = ceil($cat1_NbArt/$cat1_perPage);
    	// cat1 : recuperation num de page
    	if(isset($_GET['cat1_p']) && $_GET['cat1_p']>0 && $_GET['cat1_p']<=$cat1_nbPage){
    		$cat1_cPage = $_GET['cat1_p'];
    	} else {
    		$cat1_cPage = 1; // page 1 par defaut
    	}
    // -----------
    // CATEGORIE 2 : news
    // -----------
    	// cat2 requete : nombre total
    	$cat2_sql = "SELECT COUNT(id) AS cat2_NbArt FROM news;";
    	$cat2_req = mysql_query($cat2_sql) or die('Erreur SQL!<br />'.$cat2_sql.'<br />'.mysql_error());;
    	$cat2_data = mysql_fetch_assoc($cat2_req);
    	$cat2_NbArt = $cat2_data['cat2_NbArt'];
    	$cat2_perPage = 3; // nombre par page
    	$cat2_nbPage = ceil($cat2_NbArt/$cat2_perPage);
    	// cat2 : recuperation num de page
    	if(isset($_GET['cat2_p']) && $_GET['cat2_p']>0 && $_GET['cat2_p']<=$cat2_nbPage){
    		$cat2_cPage = $_GET['cat2_p'];
    	} else {
    		$cat2_cPage = 1; // page 1 par defaut
    	}
    // -----------
    ?>
    <html>
    <head>
    	<title>Test</title>
    </head>
    <body>
     
    <table width="500" border="0" cellspacing="20">
    <!-- table : entete -->
    <thead>
    	<tr>  
    		<td align="center">Categotie 1</td>
    		<td align="center">Categorie 2</td>
    	</tr>
    </thead>
    <!-- table : corps -->
    <tbody>
    	<tr>
     
    		<!-- Categorie 1 -->
    		<td>
    <?php	// CATEGORIE 1 : affichage
    		// -----------
    		$cat1_sql = "SELECT * FROM prods ORDER BY date DESC LIMIT ".(($cat1_cPage-1)*$cat1_perPage).",".$cat1_perPage.";";
    		$cat1_req = mysql_query($cat1_sql) or die(mysql_error());
    		while($data = mysql_fetch_assoc($cat1_req))
    		{
    ?>
    			<div id="cat1_<?php echo $data['id']; ?>">
    				<h2><a href="../drpico.free.fr/news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
    				<em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
    				<p><?php echo stripslashes($data['description']); ?></p>
    			</div>
    <?php
    		} // fin while
    ?>
    			<!-- pagination categorie 1 -->
    			<div id="cat1_pagination">
    <?php		// pagination categorie 1
    			for($i=1;$i<=$cat1_nbPage;$i++) {
    				if($nbPage<=1){
    					echo '';
    				} elseif($i==$cat1_cPage){
    					echo ' '.$i.' ';
    				} else {
    					// (attention ici : ligne où les 2 catégories interfèrent)
    					// on transmet ... les 2 numéros de page
    					echo ' <a href="index.php?cat1_p='.$i.'&amp;cat2_p='.$cat2_cPage.'">'.$i.'</a> ';
    				}
    			}
    ?>
    			</div>
    		</td>
     
    		<!-- Categorie 2 --> 
    		<td>
    <?php	// CATEGORIE 2 : affichage
    		// -----------
    		$cat2_sql = "SELECT * FROM news ORDER BY date DESC LIMIT ".(($cat2_cPage-1)*$cat2_perPage).",".$cat2_perPage.";";
    		$cat2_req = mysql_query($cat2_sql) or die(mysql_error());
    		while($data = mysql_fetch_assoc($cat2_req))
    		{
    ?>
    			<div id="cat2_<?php echo $data['id']; ?>">
    				<h2><a href="news.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h2>
    				<em><?php echo date("d/m/Y G:i", strtotime($data['date'])); ?></em>
    				<p><?php echo stripslashes($data['description']); ?></p>
     			</div>
    <?php
    		} // fin while
    ?>
    			<!-- pagination categorie 2 -->
    			<div id="cat2_pagination">
    <?php		// pagination categorie 2
    			for($j=1;$j<=$cat2_nbPage;$j++) {
    				if($nbPage<=1){
    					echo '';
    				} elseif($j==$cat2_cPage){
    					echo ' '.$j.' ';
    				} else {
    					// (attention ici : ligne où les 2 catégories interfèrent)
    					// on transmet ... les 2 numéros de page
    					echo ' <a href="index.php?cat1_p='.$cat1_cPage.'&amp;cat2_p='.$j.'">'.$j.'</a> ';
    				}
    			}
    ?>
    			</div>
    		</td>
     
    	</tr>
    </tbody>
    </table>
     
    </body>
    </html>
    Les 2 catégories sont traitées complètement indépendamment,

    ... SAUF au niveau de la pagination, où on transmet ... les 2 numéros de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    colonne cat 1 :
    <a href="index.php?cat1_p=xxx&amp;cat2_p=yyy">xxx</a>
    ou colonne cat 2 :
    <a href="index.php?cat1_p=xxx&amp;cat2_p=yyy">yyy</a>
    Dernière modification par Invité ; 04/08/2011 à 11h57.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Énorme!
    Merci bien! En plus c'est super lisible!

    Par contre, en testant le code, j'ai une erreur ligne 13 et 19 :
    "Notice: Undefined variable: data"
    Pourtant les variables sont bien déclarées aux ligne 10 et 26. Etranger non?

    Et en commentaire tu a ajouter "attention ici !" pour les paginations, mais attention à quoi?

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai juste oublié de faire quelques remplacements de noms de variables ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -> cf ligne 12 : $cat1_data = mysql_fetch_assoc($cat1_req);
    -> remplacer (ligne 13) 
    	$cat1_NbArt = $data['cat1_NbArt'];
    par 
    	$cat1_NbArt = $cat1_data['cat1_NbArt'];
    	
    -> cf ligne 28 : $cat2_data = mysql_fetch_assoc($cat2_req);
    -> remplacer (ligne 29) 
    	$cat2_NbArt = $data['cat1_NbArt'];
    par 
    	$cat2_NbArt = $cat2_data['cat1_NbArt'];
    Citation Envoyé par Dr. Pico Voir le message
    en commentaire tu a ajouter "attention ici !" pour les paginations, mais attention à quoi?
    -> voir message précédent : ("attention ici !" car ce sont les 2 seuls lignes où les 2 catégories interfèrent)
    Les 2 catégories sont traitées complètement indépendamment,
    ... SAUF au niveau de la pagination, où on transmet ... les 2 numéros de page ...
    J'ai pris l'habitude de mettre des commentaires dans mes codes :
    1/ sur le forum (ou dans mes tutos) : ca aide à la compréhension pour les autres (pédagogie)
    2/ ... mais aussi dans MES fichiers, pour moi : si je dois reprendre/corriger le code 6 mois ou 1 an plus tard ...
    3/ ou encore quand on transmet du code à un autre ... (pour lui éviter de galérer)
    Dernière modification par Invité ; 04/08/2011 à 11h57.

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. [MySQL] affichage pour pagination depuis un requête dans un tableau
    Par berti dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2008, 10h44
  3. [MySQL] Pagination : faire une boucle dans un tableau ?
    Par benjam89 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/09/2007, 20h10
  4. Réponses: 4
    Dernier message: 10/10/2003, 18h04
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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