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 :

bug de condition dans pagination [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut bug de condition dans pagination
    Bonsoir je cherche désespérément à faire fonctionné correctement ma class de pagination.
    Le probléme avec celle-ci est que certaine condition ne sont pas remplie.
    En faites 2 bug persiste :
    1. la flèche suivant indique toujours page 2
    2. le numéro de la page courante n'est pas en surbrillance (selected)

    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
    class magixPagination{
    		/**
    		 * @calculate page offset
    		 *
    		 * @param int $limit
    		 * @param object $page
    		 * @return int
    		 */
    	  function pageOffset($limit,$page){
    	  	//return $limit * ($page-1);
    	  	return ($page - 1) * $limit;
    	  }
    	    /**
    		 * @calculate paging information
    		 *
    		 * @access
    		 *
    		 * @param void $request
    		 *
    		 * @param int $limit
    		 *
    		 * @param object $page
    		 *
    		 * @return object
    		 *
    		**/
    	  function pagerData($request,$as,$limit,$page){
    	  	$num = '';
    	  	foreach ($request as $t) $num_pages = $t[$as];
    	  	$num_pages = ceil($num_pages/$limit);
    	  	$page = max($page, 1);
        	$page = min($page, $num_pages);
    		if($page > $limit || $page <= 0) {
    			$page = 1;
    		}
    		$offset = $page;
    		if($offset > $num_pages)
    		{
    		  $offset = $num_pages;
    		}
    	    $offset = $this->pageOffset($limit,$page);
    	    if($page != 1)
    		    {
    		        $num .= '<li><a href="'.magixHtml::getUrl().'/index.php?idnav_admin=2&amp;page='.($page - 1).'">&lt;</a></li>';
    		    }
    	    if($num_pages>1){
    			for($i=1; $i<=$num_pages; $i++){
    				if($i==$offset){
    				   $num .= '<li class="selected">'.$i.'</li>'; 
    				}else{
    				   $num .= '<li> <a href="'.magixHtml::getUrl().'/index.php?idnav_admin=2&amp;page='.$i.'">'.$i.'</a> </li>';  
    				}
    			}
    		}
    		if ($page < $num_pages)  {
    		    $num .= '<li><a href="'.magixHtml::getUrl().'/index.php?idnav_admin=2&amp;page='.($page + 1).'">&gt;</a></li>';
    		}
    		return $num;
    	  }
     
    } /*** end of class ***/
    ?>
    Je ne comprend pas trop pourquoi a vrai dire, sinon la pagination s'exécute bien
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  2. #2
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $page = max($page, 1);
        	$page = min($page, $num_pages);
    		if($page > $limit || $page <= 0) {
    			$page = 1;
    		}

    Pour moi, ton bug vient de là, essaie un débuggage pas à pas ou au moins un affichage de tes variables pour avoir un suivi de leur valeur.

    Au passage, revois ton indentation, elle laisse à désirer parfois et du coup pour trouver tes bugs, c'est plus dur.
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Je tente de débugger mais le résultat est pour le moins surprenant en affichant un echo sur chaque variable $num.
    Je ne sais pas comment m'y prendre pour avoir ce que je veux
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  4. #4
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Rien que sur le bloc suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $page = max($page, 1);
        	$page = min($page, $num_pages);
    		if($page > $limit || $page <= 0) {
    			$page = 1;
    		}
    Tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo 'Page : '.$page.'<br>Num_Pages : '.$num_pages.'<br>Limit : '.$limit.'##########';
    $page = max($page, 1);
    echo 'Page : '.$page.'<br>Num_Pages : '.$num_pages.'<br>Limit : '.$limit.'##########';
        	$page = min($page, $num_pages);
    echo 'Page : '.$page.'<br>Num_Pages : '.$num_pages.'<br>Limit : '.$limit.'##########';
    		if($page > $limit || $page <= 0) {
    			$page = 1;
    		}
    echo 'Page : '.$page.'<br>Num_Pages : '.$num_pages.'<br>Limit : '.$limit.'##########';
    C'est un peu bourrin, mais ça te permet de savoir ce que valent tes variables et donc de faire un suivi pas à pas.
    Perso je l'appliquerais sur toutes les variables du script au fur et à mesure de leur apparition mais là la flemme de te l'écrire à cette heure
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila le résultat :
    Page : 1
    Num_Pages : 4
    Limit : 2##########Page : 1
    Num_Pages : 4
    Limit : 2##########Page : 1
    Num_Pages : 4
    Limit : 2##########Page : 1
    Num_Pages : 4
    Limit : 2##########
    Quand je suis sur la page 1 il indique bien page 1, quand je suis sur la 2 il indique bien la deux mais une fois sur la troisième il indique la 1 pourtant les éléments sont bien ceux de la troisième ???
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  6. #6
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Tu peux mettre dans l'affichage tes paramètres de fonction aussi stp?
    Et au passage, faire une copie ici des résultats pour l'exécution dans les pages 1, 2 et 3 stp?

    Au passage, rajoute un <BR> après les dièses, j'ai oublié de le faire tout à l'heure et ça améliorerait la lisibilité des éléments
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    page 1
    request: Array
    as: total
    limit: 2
    page: 1
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    page 2
    request: Array
    as: total
    limit: 2
    page: 2
    Page : 2
    Num_Pages : 4
    Limit : 2##########
    Page : 2
    Num_Pages : 4
    Limit : 2##########
    Page : 2
    Num_Pages : 4
    Limit : 2##########
    Page : 2
    Num_Pages : 4
    Limit : 2##########
    page 3
    request: Array
    as: total
    limit: 2
    page: 3
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    J'ai passer tous les paramétres :
    request : tableau venant de mysql
    as : variable total
    limit : limite du nombre
    page : étant le get page
    On vois bien dans la page 3 la différence entre le parametre que j'affiche et l'autre page qui sort je ne sais d'ou
    Si j'ajoute un echo sur min et max sa donne sa sur la page 3 :
    request: Array
    as: total
    limit: 2
    page: 3
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    1Page : 1
    Num_Pages : 4
    Limit : 2##########
    1Page : 1
    Num_Pages : 4
    Limit : 2##########
    Page : 1
    Num_Pages : 4
    Limit : 2##########
    On dirai un conflit avec la variable $page, peut être aurai je du séparer la variable page du get page dans deux différentes
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  8. #8
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bon apparemment c'étais bien ce que je pensais, un conflit de variable tout simplement.
    j'ai remis de l'ordre dans le déroulement du script, j'ai tout ce que je voulais.
    Il me reste un point pour l'url par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num .= '<li> <a href="'.$_SERVER['PHP_SELF'].'?idnav_admin='.$_GET['idnav_admin'].'&amp;page='.$i.'">'.$i.'</a></li>';
    je doit le remplacer pour avoir un système autonome sans aucun lien en dur.
    donc remplacer ?idnav_admin='.$_GET['idnav_admin']
    j'ai essayer avec $_SERVER['REQUEST_URI'] mais il me retourne forcément le chemin complet avec la variable page ce qui n'est pas le résultat attendu.
    Exemple :
    index.php?idnav_admin=2&page=1
    Ajoutera le get a la suite au lieu de remplacer le 1 par le chiffre attendu
    J'ai essayer un substr avec $_GET['page'] mais comme je m'en doutais ce n'est pas correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substr($_SERVER['REQUEST_URI'],0,strlen($page))
    Une idée ?
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hu ? je comprends pas bien ce que tu veux faire là oO

    (surtout ton dernier substr() ^^)

  10. #10
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    non j'ai trouvé merci.
    Par contre je cherche maintenant à faire une pagination sur les fichiers donc par exemple j'ai 30 photos, je veux afficher seulement 10 photos par page.
    Mais je n'utilise pas mysql, juste un parcours de dossier alors ma question comment s'y prendre pour limité le nombre de photos sans l'utilisation de requete.
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  11. #11
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    En faisant croire à la méthode que tu fais une requête mais en réalité, c'est la chaîne d'interrogation d'un système de fichiers que tu auras implémenté.

    En gros tu fais un simulacre de gestionnaire de base de données qui en réalité gère tes fichiers et ainsi à travers une chaîne qui ressemble à une requête SQL, tu interroges en réalité des fichiers.
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

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

Discussions similaires

  1. [C#] Repeater - Condition dans la structure
    Par stailer dans le forum ASP.NET
    Réponses: 4
    Dernier message: 25/04/2005, 14h54
  2. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13
  3. Condition dans une requête
    Par fdloisel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2004, 16h55

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