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 :

probleme de pagination php / js [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Par défaut probleme de pagination php / js
    Bonjour,

    J'ai un souci de pagination avec mon code. Je voudrais afficher 10 lignes par page mais le résultat que j'obtiens est toujours de 3 lignes par pages.
    Est ce que quelqu'un saurait d'où cela peut venir?

    Voilà le code de la page:

    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
     
    <?php
    class PS_Pagination {
        var $php_self;
        var $rows_per_page = 10; //Nombre de ligne par page
        var $total_rows = 0; //Nb lignes retournées par la requete
        var $links_per_page = 5; //Nombre de liens à afficher par page
        var $append = ""; //Paramètres a ajouter aux liens
        var $sql = "";
        var $debug = true; 
        var $conn = false;
        var $page = 1;
        var $max_pages = 0;
        var $offset = 0;
     
        /**
         * Constructor
         *
         * @param ressource $connection connection mysql
         * @param string $sql requete
         * @param integer $rows_per_page Nb de lignes à retourner par page.10 par défaut
         * @param integer $links_per_page nb liens par page -> Défaut 5
         * @param string $append paramètres à ajouter aux liens
         */
     
        function PS_Pagination($connection, $sql, $rows_per_page = 10, $links_per_page = 5, $append = "") {
            $this->conn = $connection;
            $this->sql = $sql;
            $this->rows_per_page = (int)$rows_per_page;
            if (intval($links_per_page ) > 0) {
                $this->links_per_page = (int)$links_per_page;
            } else {
                $this->links_per_page = 5;
            }
            $this->append = $append;
            $this->php_self = htmlspecialchars($_SERVER['PHP_SELF'] );
            if (isset($_GET['page'] )) {
                $this->page = intval($_GET['page'] );
            }
        }
     
        /**
         * Execute la requete et initialise les variables
         *
         * @access public
         * @return resource
         */
        function paginate() {
            //retourne le nb total de ligne
            $all_rs = $this->conn->prepare( $this->sql );
            $all_rs->execute();
     
            if (! $all_rs) {
                if ($this->debug)
                    echo "Erreur sur la requête sql.<br /><br />Erreur " . mysql_error();
                    return false;
            }
            $this->total_rows = $all_rs->rowCount();
     
            //Retourne FALSE si pas de résultat
            if ($this->total_rows == 0) {
                if ($this->debug)
                    echo "Pas de données.";
                    return FALSE;
            }
     
            //Nb de pages max.
            $this->max_pages = ceil($this->total_rows / $this->rows_per_page );
            if ($this->links_per_page > $this->max_pages) {
                $this->links_per_page = $this->max_pages;
            }
     
            //Si num de page invalide -> redirige vers page 1
            if ($this->page > $this->max_pages || $this->page <= 0) {
                $this->page = 1;
            }
     
            //Calcul OFFSET        
            $this->offset = ($this->page - 1) * $this->rows_per_page;
            //retour result set
            $query = $this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}";
            //$query = $this->sql . " LIMIT {$this->offset}, 10";
            //debug query
            echo $query;
            $rs = $this->conn->prepare( $query );
            $rs->execute();
     
            if (! $rs) {
                if ($this->debug)
                    echo " probleme avec la requete de pagination.<br /><br />Error: " . mysql_error();
                    return false;
            }
            return $rs;
        }
    Code de l'affichage:

    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
     
     
    <?php
    header('Content-type: text/html; charset=iso-8859-1');
     
     
    //fetch.php
    //include
    include 'db_connect.php';
    include 'pagination.php';
     
    $sql = "SELECT
        `bugs_activity`.`bug_id` AS `bug_id`,
        `products`.`name` AS `client`,
        `bugs`.`cf_platforme` AS `plateforme`,
        `bugs_activity`.`bug_when` AS `bug_when`,
        `bugs`.`product_id` AS `product_id`,
        `bug_severity`.`id` AS `severity_id`,
        `bugs`.`bug_severity` AS `severité`,
         COUNT(*) AS count
    FROM
         `bugs_activity`,
         `bug_severity`,
         `bugs`,
         `products`
    WHERE
         `bugs`.`product_id` = `products`.`id`
         AND  `bug_severity`.`value` = `bugs`.`bug_severity`
         AND `bugs`.`bug_id` = `bugs_activity`.`bug_id`
         AND `bugs_activity`.`bug_when` IS NOT NULL
         AND `bugs_activity`.`added` = 'REOPENED'
         AND `bugs_activity`.`bug_when` BETWEEN '2018-03-01' and '2018-05-30'
         GROUP BY `bugs_activity`.`bug_id`
         ORDER BY `bugs_activity`.`bug_id`, `bugs_activity`.`bug_when` ASC";
     
    $pager = new PS_Pagination($conn, $sql, 3, 4, null);
     
    $rs = $pager->paginate();
     
    //calcul du nb de lignes que retourne la requete
    $num = $rs->rowCount();
     
    if($num >= 1 ){
        echo "<table id=table_data class=data-table>";
        echo "<thead>";
        echo "<tr>";
            echo "<th>BUG_ID</th>";
            echo "<th>PRODUCT_ID</th>";
            echo "<th>CLIENT</th>";
            echo "<th>PLATEFORME</th>";
            echo "<th>SEVERITY_ID</th>";
            echo "<th>SEVERITE</th>";
            echo "<th>DATE</th>";
            echo "<th>NB_REOPENED</th>";
        echo "</tr>";
        echo "</thead>";
     
        echo "<tbody>";
     
        while ($row = $rs->fetch(PDO::FETCH_ASSOC)){
            echo "<tr class='data-tr' align='center'>";
            echo "<td><a href=https://support.datalog-finance.com/show_bug.cgi?id={$row["bug_id"]}> {$row["bug_id"]}</a></td>";
            echo "<td>{$row["product_id"]}</td>";
            echo "<td>{$row["client"]}</td>";
            echo "<td>{$row["plateforme"]}</td>";
            echo "<td>{$row["severity_id"]}</td>";
            echo "<td>{$row["severité"]}</td>";
            echo "<td>{$row["bug_when"]}</td>";
            echo "<td>{$row["count"]}</td>";
            echo "</tr>";
        }
        echo "</tbody>";
        echo "</table>";
    }else{
        // si pas de données
        echo "Pas de données disponible!";
    }
     
    echo "<div class='page-nav'>";
        // Affiche n° de page
        echo $pager->renderFullNav();
    echo "</div>";
    ?>
    je pense que le probleme doit se situer dans ce bout de code mais je ne vois pas ce qui pourrait clocher dedans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            //Calcul OFFSET        
            $this->offset = ($this->page - 1) * $this->rows_per_page;
            //retour result set
            $query = $this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}";
            //$query = $this->sql . " LIMIT {$this->offset}, 10";
            //debug query
            echo $query;
            $rs = $this->conn->prepare( $query );
            $rs->execute();
    merci pour votre aide,

  2. #2
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Bonjour,

    Je pense que tu as raison sur ton le bout de code qui ne veux pas agir correctement.
    As tu vérifié le retour de la requête sans traitement, ou directement sur un exploitant (dbeaver,phpmyadmin,...) ?
    Que donne t'a requête sql au complet ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Par défaut
    salut pasdechance,


    J'utilise un mysql comme source bdd. J'ai fait un debug de la requête et elle me retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    SELECT ..... FROM `bugs_activity`,....... WHERE `bugs`.`product_id` = `products`.`id` AND `bug_severity`.`value` = `bugs`.`bug_severity` AND `bugs`.`bug_id` = `bugs_activity`.`bug_id` AND `bugs_activity`.`bug_when` IS NOT NULL AND `bugs_activity`.`added` = 'REOPENED' AND `bugs_activity`.`bug_when` BETWEEN '2018-03-01' and '2018-05-30' GROUP BY `bugs_activity`.`bug_id` ORDER BY `bugs_activity`.`bug_id`, `bugs_activity`.`bug_when` ASC LIMIT 3, 3
    LIMIT 0, 3 sur la premiere page, LIMIT 3, 3 en 2eme page et ainsi de suite
    La requete est bonne puisque j'ai un resultat cohérent à l'affichage. Mon seul souci c'est vraiment que je ne trouve pas le moyen d'afficher 10 lignes au lieu de 3.

    Ce qui est bizarre c'est que je déclare bien mes variables:

    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
     
     
    //pagination.php
     
        var $php_self;
        var $rows_per_page = 10; //Nombre de ligne par page
        var $total_rows = 0; //Nb lignes retournées par la requete
        var $links_per_page = 5; //Nombre de liens à afficher par page
        var $append = ""; //Paramètres a ajouter aux liens
        var $sql = "";
        var $debug = true; 
        var $conn = false;
        var $page = 1;
        var $max_pages = 0;
        var $offset = 0;
    Une idée?

  4. #4
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    c'est une question toute bete mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $pager = new PS_Pagination($conn, $sql, 3, 4, null);
    le 3 ici c'est pour ton debug ?

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pager = new PS_Pagination($conn, $sql, 3, 4, null);

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant communication & réseaux
    Inscrit en
    Novembre 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant communication & réseaux

    Informations forums :
    Inscription : Novembre 2014
    Messages : 57
    Par défaut
    je viens de trouver en meme temps que vous !

    désolé.. merci à vous 2

  7. #7
    Membre émérite Avatar de Willy_k
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 541
    Par défaut
    Salut,

    $pager = new PS_Pagination($conn, $sql, 3, 4, null);.

    On voit ici que $this->rows_per_page est égal à 3

    PS: mysql_error n'a rien à faire avec PDO, le jour où il y aura des variables dans la requête, sa préparation ne servira à rien.

    EDIT: Bon j'ai été doublement grillé

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

Discussions similaires

  1. probleme charset oracle php
    Par mickjack dans le forum Oracle
    Réponses: 7
    Dernier message: 19/10/2011, 17h03
  2. [MySQL] Probleme pagination php
    Par cedgs dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/05/2008, 09h44
  3. [SGBD] [Problème insertion variable php/mysql]
    Par vincedjs dans le forum Installation
    Réponses: 20
    Dernier message: 08/02/2006, 16h41
  4. [CSS] Probleme affichage texte php
    Par davyazam dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 06/02/2006, 10h22
  5. [C#] Probleme de pagination dans datagrid
    Par asphareth dans le forum ASP.NET
    Réponses: 2
    Dernier message: 21/07/2004, 11h25

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