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 :

Class pagination avec problème d'affichage [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut Class pagination avec problème d'affichage
    Bonjour,
    j'ai récupéré une class de pagination, mais elle a un comportement bizzare que je n'arrive pas à rectifier.
    J'indique bien qu'il doit m'en afficher que 3, ce qui marche pour les premières pages, mais après il augmente le nombre. Je pense que cela vient du limit mais pourquoi ...?
    Je joint le script, le résultat en images.
    Voici le script :
    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
     
    <?php
    class pagination{
    	public function __construct()	{
    	}
    	public function calculate_pages($total_rows, $rows_per_page, $page_num)	{
    		$arr = array();
    		// calculate last page
    		$last_page =ceil($total_rows / $rows_per_page);
    		// make sure we are within limits
    		$page_num = (int) $page_num;
    		if ($page_num < 1)		{
    		   $page_num = 1;
    		} 
    		elseif ($page_num > $last_page)		{
    		   $page_num = $last_page;
    		}
    		$upto =($page_num - 1)*$rows_per_page;
    		$arr['limit'] ='LIMIT '.$upto.',' .$rows_per_page;
    		$arr['current'] =$page_num;
    		if ($page_num === 1){
    			$arr['previous'] = $page_num;
    		}
    		else{
    			$arr['previous'] = $page_num - 1;
    		}
    		if ($page_num === $last_page){
    			$arr['next'] = $last_page;
    		}
    		else{
    			$arr['next'] = $page_num + 1;
    		}
    		$arr['last'] = $last_page;
    		$arr['info'] ='Page ('.$page_num.' of '.$last_page.')';
    		$arr['pages'] =$this->get_surrounding_pages($page_num, $last_page, $arr['next']);
    		return $arr;
    	}
    	function get_surrounding_pages($page_num, $last_page, $next){
    		$arr = array();
    		$show = 3; // how many boxes
    		// at first
    		if ($page_num === 1)	{
    			// case of 1 page only
    			if ($next === $page_num){
    				return array(1);
    			}
    			for ($i = 0; $i < $show; $i++)	{
    				if ($i === $last_page){
    					break;
    				}
    				array_push($arr, $i + 1);
    			}
    			return $arr;
    		}
    		// at last
    		if ($page_num === $last_page)	{
    			$start = $last_page - $show;
    			if ($start < 1){
    				$start = 0;
    			}
    			for ($i = $start; $i < $last_page; $i++){
    				array_push($arr, $i + 1);
    			}
    			return $arr;
    		}
    		// at middle
    		$start = $page_num - $show;
    		if ($start < 1){
    			$start = 0;
    		}
    		for ($i = $start; $i < $page_num; $i++)	{
    			array_push($arr, $i + 1);
    		}
    		for ($i = ($page_num + 1); $i < ($page_num + $show); $i++)	{
    			if ($i === ($last_page + 1)){
    				break;
    			}
    			array_push($arr, $i);
    		}
    		return $arr;
    	}
    }
    $g_page=(isset($_GET['p']))? $_GET['p'] : 1;
    $inst=new pagination();
    $arr = $inst->calculate_pages(170, 5, $g_page);
     
    echo '<a href="pagination.php?p=1"><< First</a> ';
    foreach ($arr['pages'] as $k=>$v){
    	IF ((int)$arr['current']=== $v){
    		echo '<b>'.$v.'</b> |';
     
    	}
    	else{
    		//echo 'non';
    		echo '<a href="pagination.php?p='.$v.'">'.$v.'</a> |';
    	}
    }
    echo '<a href="pagination.php?p='.$arr['last'].'">Last >></a>';
    ?>
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté Avatar de Retrokiller069
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 217
    Par défaut
    Bonjour,

    on dirait qu'il y a un problème à la ligne 27 (pour ta deuxième image). On constate qu'il arrive à faire une page suivante alors qu'il se place sur le dernier élément.

    Pourrais tu regarder sur ce problème d'égalité? Test peut être "==" au lieu de "===", je sais que "==" est plus tolérant que l'autre et c'est peut être pour ca que ton affiche se plante...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Citation Envoyé par Retrokiller069 Voir le message
    Bonjour,

    on dirait qu'il y a un problème à la ligne 27 (pour ta deuxième image). On constate qu'il arrive à faire une page suivante alors qu'il se place sur le dernier élément.

    Pourrais tu regarder sur ce problème d'égalité? Test peut être "==" au lieu de "===", je sais que "==" est plus tolérant que l'autre et c'est peut être pour ca que ton affiche se plante...
    Malheureusement j'ai toujours le problème. Non seulement il affiche des pages qu'il ne devrait pas et en plus il affiche plus de lien qu'il ne devrait car j'ai indiqué qu'il devrait en afficher 3.

  4. #4
    Membre expérimenté Avatar de Retrokiller069
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 217
    Par défaut
    Bon ben j'ai test et c'est bon. En fait c'est bien les "===" qui posaient problèmes. Si tu les remplaces tous tu verras que ca marche.

    Par contre fait attention, n'utilises pas "<?" mais plutôt "<?php". Je sais que ca peut poser des problèmes parfois.

    Je suis en train de regarder pourquoi il en affiche toujours 5... Pour modifier l'affichage, il faut que tu modifies la ligne 41

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		$show = 3; // how many boxes
    Mets autre chose que 3 et tu verras le résultat

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Par défaut
    Citation Envoyé par Retrokiller069 Voir le message
    Bon ben j'ai test et c'est bon. En fait c'est bien les "===" qui posaient problèmes. Si tu les remplaces tous tu verras que ca marche.

    Par contre fait attention, n'utilises pas "<?" mais plutôt "<?php". Je sais que ca peut poser des problèmes parfois.

    Je suis en train de regarder pourquoi il en affiche toujours 5... Pour modifier l'affichage, il faut que tu modifies la ligne 41

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		$show = 3; // how many boxes
    Mets autre chose que 3 et tu verras le résultat
    En effet cela marche pour le fait de ne pas afficher des pages n'existant pas par contre, il me met bien au début par exemple 6 page (que j'ai défini dans le code) puis après 7,8,9, etc.

    Tu n'as pas le pb ?

  6. #6
    Membre expérimenté Avatar de Retrokiller069
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 217
    Par défaut
    Citation Envoyé par eltyty Voir le message
    En effet cela marche pour le fait de ne pas afficher des pages n'existant pas par contre, il me met bien au début par exemple 6 page (que j'ai défini dans le code) puis après 7,8,9, etc.
    Désolé je ne comprends pas? Pourrais tu envoyer une image stp?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/01/2012, 17h09
  2. Réponses: 3
    Dernier message: 07/07/2008, 23h03
  3. [DisplayTag] Problème d'affichage avec pagination externe
    Par martopioche dans le forum Taglibs
    Réponses: 3
    Dernier message: 03/10/2007, 11h56
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

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