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 :

Exemple de Pagination


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut Exemple de Pagination
    Bonjour,

    Je souhaite mettre en place un système de pagination pour afficher les résultats de requêtes qui retournent beaucoup de lignes.
    Donc j'ai téléchargé l'exemple donné ici : http://php.developpez.com/telecharge...tat-de-requete

    Mais quand je le teste, il affiche les 5 mêmes résultats, quelle que soit la page que je sélectionne.

    L'exemple est-il buggué ou ai-je mal fais quelque chose ?
    J'en profite pour vous demander si vous avez d'autres exemples de pagination simple peut-être plus récents ?

    Merci à vous.

    Tabb

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/
    Citation Envoyé par TabbHonmin Voir le message
    ...L'exemple est-il buggué ?...
    Oui, et c'est indiqué dans les commentaires :
    Ligne 35, dans le calcul de l'offset du la clause LIMIT il y a une belle erreur:
    la formule donnée est ($page * $nb) or c'est ( ($page-1) * $nb).

    2/ "php pagination"



    L'important est de comprendre le principe.

    Voici une version en PDO, tirée de mon Système de Gestion-Affichage de Nouvelles

    Fichier modules/mod_news/news_fonctions.php :
    Code php : 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
    <?php
    // ---------------------------------------------------
    // 2/ FONCTION : LISTING des NEWS (avec résumé du contenu)
    // ---------------------------------------------------
    function news_affiche_liste_colonne($numPage)
    {
    	if(is_numeric($numPage) && $numPage>0)
    	{
    		// -------------------------
    		global $pdo;
    		// -------------------------
    		// requete : toutes les News (CONFIG : Nombre Maxi à afficher -> NEWS_NBRE_MAXITOTAL)
    		$news_total_query 		= "SELECT * FROM ".T_NEWS_TABLE." ".
    								" WHERE news_publier = 1 ".		// uniquement les news publiées
    								" ORDER BY news_date DESC ".
    								" LIMIT 0, :newsNbreMaxiTotal ".
    								";";
    	  try {
    		$pdo_select 			= $pdo->prepare($news_total_query);
    		$pdo_select->bindValue(':newsNbreMaxiTotal', 	NEWS_NBRE_MAXITOTAL,		PDO::PARAM_INT);
    		$pdo_select->execute();
    		$news_total_nombre 		= $pdo_select->rowCount();
    	  } catch (PDOException $e) { echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
    		// -------------------------
    		// PAGINATION
    		// On calcule le nombre de pages
    		$nbreTotalPages 		= ceil($news_total_nombre / NEWS_NBRE_PARPAGE);
    		// On calcule le numero du premier message qu'on prend pour le LIMIT de MySQL
    		$numDebut 				= ($numPage - 1) * NEWS_NBRE_PARPAGE;
    		// -------------------------
    		// News à afficher sur la page
    		$news_query 			= "SELECT * FROM ".T_NEWS_TABLE." ".
    								" WHERE news_publier = 1 ".		// uniquement les news publiées
    								" ORDER BY news_date DESC ".
    								" LIMIT :numDebut,:newsNbreParPage ".
    								";";
    	  try {
    		$pdo_select 			= $pdo->prepare($news_query);
    		$pdo_select->bindValue(':numDebut', 		$numDebut,			PDO::PARAM_INT);
    		$pdo_select->bindValue(':newsNbreParPage', 	NEWS_NBRE_PARPAGE,	PDO::PARAM_INT);
    		$pdo_select->execute();
    		$news_nombre 			= $pdo_select->rowCount();
    		$news_rowAll			= $pdo_select->fetchAll();
    	  } catch (PDOException $e) { echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
    		// -------------------------
    		// Affichage de la PAGINATION
    		news_pagination_pages($numPage, $nbreTotalPages); 
    ?>
    		<div id="containerListing">
    <?php	// -------------------------
    		// Affichage des News
    		if($news_nombre>0) {
    			foreach ($news_rowAll as $news_row)
    			{
    				// -------------------------
    				$newsId 			= intval($news_row['news_id']);
    				// On recupere les infos dans la BD
    				require(__DIR__ . '/news_data_fromBD.php');
    				// -------------------------
    				// Affichage de la news
    				news_affiche_fiche_resume_colonne($newsId);
    			}
    		}
    ?>
    		</div>
    <?php
    		// -------------------------
    		// Affichage de la PAGINATION
    		news_pagination_pages($numPage, $nbreTotalPages);
    	}
    };
     
    // --------------------------------------------------------------
    // FONCTION : PAGINATION (listing des News)
    // --------------------------------------------------------------
    function news_pagination_pages($numPage, $nbreTotalPages)
    {
    	// -------------
    	$numLimit		= 5; 	// Limite : nombre de pages avant/après la page courante
    	$sep			= '';	// Séparateur '', '-', '|', '/' : entre les numéros de pages
    	// -------------
    	$args 			= preg_replace('#(pg=[0-9]+&?)#', '', $_SERVER['QUERY_STRING']);
    	$args 			= (!empty($args))?	'&'.$args : '';
    	// -------------
    	// PAGINATION
    	if($nbreTotalPages > 1) 
    	{
    ?>
    		<div class="newsPagination">
    <?php	echo $sep;
    	  for ($i=1; $i<=$nbreTotalPages; $i++)
    	  {
    		// 1ère page
    		if($i==1 && $numPage>($numLimit+1)) 
    		{
    			echo ' <a href="?pg='.$i.$args.'" title="Page '.$i.'">'.$i.'</a> '.$sep.'...'.$sep;
    		}
    		// page courante + $numLimit pages avant et après
    		if(($numPage-1-$numLimit)<$i && $i<($numPage+1+$numLimit))
    		{
    		  if($i==$numPage) { // page courante
    			echo ' <b>Page '.$i.'</b> '.$sep;
    		  } else {
    			echo ' <a href="?pg='.$i.$args.'" title="Page '.$i.'">'.$i.'</a> '.$sep;
    		  }
    		}
    		// dernière page
    		if($i==$nbreTotalPages && $numPage<($nbreTotalPages-$numLimit)) 
    		{ 
    			echo '...'.$sep.' <a href="?pg='.$i.$args.'" title="Page '.$i.'">'.$i.'</a>';
    		}
    	  }
    ?>
    		</div>
    <?php	} 	// (fin if nbreTotalPages)
    };
     
    // --------------------------------------------------------------
    Dernière modification par Invité ; 08/05/2016 à 07h33.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Developpeur amateur
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur amateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 26
    Points
    26
    Par défaut
    Pour le premier exemple, j'avais vu ce commentaire et en testant avec la correction proposée, ça fonctionne encore moins bien de mon côté.

    Sinon je recherche toujours avant de poster, sinon je posterai toutes les 5 minutes
    Mais quand je ne connais pas une fonctionnalité j'aime bien creuser pour trouver plusieurs solutions et choisir celle qui me va le mieux.

    Merci pour ton exemple PDO, je teste ça ce soir.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/09/2017, 17h55
  2. Exemple de JavaWorld Paginer en JSF
    Par koushou dans le forum JSF
    Réponses: 0
    Dernier message: 27/05/2009, 13h20
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07
  4. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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