Menu

Liste déroulante qui gère un nombre d'affichage [Résolu]

Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
- - Dernière réponse : CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
- 13 mai 2019 à 11:08
Bonjour,

J'essaye depuis un petit moment de pouvoir afficher un menu déroulant, qui permet de définir le nombre d'affichage d'une liste que je crée à l'aide d'un while depuis une BDD.

Je monte actuellement ma société, et j'ai développé un site web qui me permet de créé des clients ajouter des factures etc.

J'ai un while qui récupère les factures depuis une base de données MYSQL pour les afficher dans un tableau.

Sauf que je commence à avoir pas mal de factures, et la page commence à être longue...

J'aimerais pouvoir faire un menu déroulant qui me propose d'afficher 10 - 100 - 150 Enfin un nombre précis de facture


Mais je patauge clairement... Pour moi faut que je crée un nouveau form, mais j'aimerais éviter d'avoir un bouton actualiser... Je voie donc pas comment valider le choix.
J'ai crée toute la partie HTML :


HTML :
                                    <tr>
                                        <th></th>
                                        <th class="text-right">Nombre de facture a afficher</th>
                                        <th>
                                            <form>
                                                <select name="affichagenbfacture" size="1">
                                                    <option>10</option>
                                                    <option>25</option>
                                                    <option>50</option>
                                                    <option>100</option>
                                                </select> 
                                            </form>
                                        </th>
                                    </tr>


Voici ma boucle While :

                                <thead>
                                    <tr>
                                        <th>REF Client</th>
                                        <th>Numéro Facture</th>
                                        <th>Montant</th>
                                        <th class="text-right">Date</th>
                                    </tr>
                                </thead>
                                <tbody>
                                        <?php
                                           $recup_donnees_facture = $bdd->query('SELECT * FROM factures ORDER BY id DESC');
                                           while($donnees_facture = $recup_donnees_facture->fetch()) {
                                       ?>  
                                        <tr>
                                          <td><?php echo $donnees_facture['ref_client']; ?></td>
                                          <td><?php echo $donnees_facture['numero_facture']; ?></td>
                                          <td><?php echo $donnees_facture['montant']; ?> €</td>
                                          <td class="text-right"><?php echo $donnees_facture['dat_e']; ?></td>
                                        </tr>
                                    <?php
                                        }
                                    ?>  
                                </tbody>


Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621
1
Merci
Aie... encore un qui ne lit pas entièrement les consignes qu'on lui donne ni les liens qu'on lui colle...

Bon...
essaye ça :
<?php

//Affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

$titre_page = "Factures"; //titre de la page

//connexion à la bdd
require_once 'bdd.php'; // require au lieu de include..car tu as absolument besoin du fichier. Au moins ça te mettra une erreur si le fichier est introuvable.

//récupération PROPRE des variables AVANT de les utiliser
$affichagenbfacture = !empty($_GET['affichagenbfacture']) ? $_GET['affichagenbfacture'] : 10; // j'ai mis 10 par défaut

//on place un maximum de code php avant le html
// c'est plus lisible et plus facile à maintenir par la suite 
// et on place, tel qu'indiqué dans le lien que je t'ai donné.. CHAQUE REQUETE dans un bloc try/catch
//donc...

//Nombre de facture
$sql = 'SELECT COUNT(*) AS NB FROM factures';
try{
  $recup_nombre_facture = $bdd->query($sql);
  $donnees_nombre_facture = $recup_nombre_facture->fetch();
}catch(Exception $e){
  echo "Erreur : ".$e->getMessage();
}
$nombre_facture = !empty($donnees_nombre_facture['NB']) ? $donnees_nombre_facture['NB'] : 0;

// Montant total des factures
$sql = 'SELECT SUM(montant) AS total_montant FROM factures';
try{
  $recup_ca = $bdd->query($sql);
  $donnees_ca = $recup_ca->fetch();
}catch(Exception $e){
  echo "Erreur : ".$e->getMessage();
}
$total_montant = !empty($donnees_ca['total_montant']) ? $donnees_ca['total_montant'] : 0;

//on récupère la liste des factures en fonction du nombre voulu :
$sql = 'SELECT * FROM factures ORDER BY id DESC LIMIT  ?'  ;
$datas = array($affichagenbfacture);
try{
  $recup_donnees_facture = $bdd->prepare($sql);
  $recup_donnees_facture->execute($datas);
  $arr_donnees_facture  = $recup_donnees_facture->fetchAll();
}catch(Exception $e){
  echo "Erreur : ".$e->getMessage();
}

?>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <?php
        include'head.php';
    ?>
    <title><?php echo $titre_page; ?></title>
  </head>
  <body class="animsition">
    <div class="page-wrapper">
      <?php
        include 'menu.php';
      ?>
      <div class="page-container2">
        <section class="statistic">
          <div class="section__content section__content--p30">
            <div class="container-fluid">
              <div class="row">
                <div class="col-md-6 col-lg-3">                                    
                  <div class="statistic__item">
                    <h2 class="number"><?php echo $nombre_facture;?></h2>
                    <span class="desc">Nombre de factures</span>
                    <div class="icon">
                        <i class="zmdi zmdi-shopping-cart"></i>
                    </div>
                  </div>
                </div>
                <div class="col-md-6 col-lg-3">
                  <div class="statistic__item">
                    <h2 class="number"><?php echo $total_montant;?> €</h2>
                    <span class="desc">Chiffre d'affaire</span>
                    <div class="icon">
                        <i class="zmdi zmdi-calendar-note"></i>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </section>
        <div class="row">
            <div class="col-lg-9">
                <h2 class="title-1 m-b-25">Facture</h2>
                <div class="table-responsive table--no-card m-b-40" style="width: 1000px; height: auto;">
                    <a href="ajout-facture.php"><i style="margin: 0px 0px 0px 15px;"></i>Ajouter / supprimer une facture</a>
                    <table class="table table-borderless table-striped table-earning">
                      <thead>      
                          <tr>
                            <th></th>
                            <th class="text-right">Nombre de facture a afficher</th>
                            <th>
                              <form action="" method="GET" id="formnbdefactureaafficher">
                                <select name="affichagenbfacture" size="1">
                                  <option value="10">10</option>
                                  <option value="25">25</option>
                                  <option value="50">50</option>
                                  <option value="100">100</option>
                                </select>
                                <button type="submit" class="btn btn-success btn-sm" form="formnbdefactureaafficher">
                                  <i class="fa fa-dot-circle-o"></i> Actualiser
                                </button>
                              </form>
                            </th>
                            <th></th>
                          </tr>
                          <tr>
                            <th>REF Client</th>
                            <th>Numéro Facture</th>
                            <th>Montant</th>
                            <th class="text-right">Date</th>
                          </tr>
                      </thead>
                      <tbody>
                        <?php
                         if(!empty($arr_donnees_facture)){
                           foreach($arr_donnees_facture as $donnees_facture ){
                         ?>  
                          <tr>
                            <td><?php echo $donnees_facture['ref_client']; ?></td>
                            <td><?php echo $donnees_facture['numero_facture']; ?></td>
                            <td><?php echo $donnees_facture['montant']; ?> €</td>
                            <td class="text-right"><?php echo $donnees_facture['dat_e']; ?></td>
                          </tr>
                        <?php
                          }
                        }
                      ?>  
                    </tbody>
                  </table>
                </div>
            </div>
        </div>
        <?php
        include 'footer.php';
        ?>
      </div>
    </div>
    <script src="vendor/jquery-3.2.1.min.js"></script>
    <script src="vendor/bootstrap-4.1/popper.min.js"></script>
    <script src="vendor/bootstrap-4.1/bootstrap.min.js"></script>
    <script src="vendor/slick/slick.min.js"></script>
    <script src="vendor/wow/wow.min.js"></script>
    <script src="vendor/animsition/animsition.min.js"></script>
    <script src="vendor/bootstrap-progressbar/bootstrap-progressbar.min.js"></script>
    <script src="vendor/counter-up/jquery.waypoints.min.js"></script>
    <script src="vendor/counter-up/jquery.counterup.min.js"></script>
    <script src="vendor/circle-progress/circle-progress.min.js"></script>
    <script src="vendor/perfect-scrollbar/perfect-scrollbar.js"></script>
    <script src="vendor/chartjs/Chart.bundle.min.js"></script>
    <script src="vendor/select2/select2.min.js"></script>
    <script src="vendor/vector-map/jquery.vmap.js"></script>
    <script src="vendor/vector-map/jquery.vmap.min.js"></script>
    <script src="vendor/vector-map/jquery.vmap.sampledata.js"></script>
    <script src="vendor/vector-map/jquery.vmap.world.js"></script>
    <script src="js/main.js"></script>
  </body>
</html>

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 39170 internautes nous ont dit merci ce mois-ci

CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 -
J'ai bien regarder les lien que tu ma donnée !
Les pas comprendre c'est autres chose par contre..

Bon sinon j'ai lu est tester le code que tu ma envoyer,
Je le comprend c'est déjà bien :p


Par contre il m'affiche aucune factures que je choisis 10 - 25 - 50 - 100,
J'ai bien vérifier dans le lien les valeur remonte bien.
Commenter la réponse de jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621
0
Merci
Bonjour,

Deux choses :

- Dans une requête SQL tu peux utiliser les clauses LIMIT et OFFSET pour définir le nombre d'enregistrement à retourner.

- Pour éviter d'avoir à réactualiser la page, tu pourrais utiliser de l'ajax (mélange de javascript et php )
Voici des exemples avec Jquery :
http://codes-sources.commentcamarche.net/source/102253-exemple-ajax-en-jquery

Bien entendu, tu pourrais éviter de passer par de l'ajax et utiliser comme prévu un FORM (auquel tu devras ajouter un attribut METHOD et un attribut ACTION )
Et pour faire le "submit" du formulaire, soit un bouton.... soit, en javascript à la détéction du changement de valeur dans le select déclencher le submit du formulaire.

Mais perso... je passerai par de l'ajax.



CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 -
Bonjour,

Merci pour la réponse !

Alors premièrement j'ai une petite erreur a ce niveau :


$test = 10;
$recup_donnees_facture = $bdd->query('SELECT * FROM factures ORDER BY id DESC LIMIT '. $test .' ');


Et la c'est la page blanche .. SI je lance la requête manuellement depuis le serveurs SELECT * FROM factures ORDER BY id DESC LIMIT 10
Aucune erreur


J'ai regarder l'ajax ... Ca ma rendu fou un peux.. J'ai pas compris grand chose mais bon je vais essayer quand même sinon on fera un petit bouton actualiser .. qui validera le formulaire.

Merci bien
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621 -
Tu utilises PDO ?
Dans ce cas, commence par activer l'affichage des erreurs PDO et places CHAQUE requête dans un bloc try/catch comme expliqué ici : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Une fois le code modifié, si tes soucis persistent reviens nous voir avec le code COMPLET ( y compris la connexion à la bdd )

Pense bien à activer l'affichage des erreurs PHP aussi... http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.
CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 -
Oui j'utilise une connexion PDO,

Finalement j'ai travailler un peut dessus, pour essayer de trouver une solution par moi même :p

J'ai rajouter un bouton actualiser :


Qui me gène pas tant que ca, je le retirerais plus tard sinon...

J'arrive a gérer le nombre de factures à afficher grâce a un form et une méthod=GET

Ce qui fonctionne bien ! sauf lors du premier affichage.. car il ne trouve pas la variable $_GET['affichagenbfacture']


                                        <th>
                                            <form action="" method="GET" id="formnbdefactureaafficher">
                                                <select name="affichagenbfacture" size="1">
                                                    <option value="10">10</option>
                                                    <option value="25">25</option>
                                                    <option value="50">50</option>
                                                    <option value="100">100</option>
                                                </select>
                                                <button type="submit" class="btn btn-success btn-sm" form="formnbdefactureaafficher">
                                                    <i class="fa fa-dot-circle-o"></i> Actualiser
                                                </button>
                                            </form>
                                        </th>



                                <tbody>
                                        <?php
                                           $recup_donnees_facture = $bdd->query('SELECT * FROM factures ORDER BY id DESC LIMIT '. $_GET['affichagenbfacture'] .' ');
                                           while($donnees_facture = $recup_donnees_facture->fetch()) {
                                       ?>  
                                        <tr>
                                          <td><?php echo $donnees_facture['ref_client']; ?></td>
                                          <td><?php echo $donnees_facture['numero_facture']; ?></td>
                                          <td><?php echo $donnees_facture['montant']; ?> €</td>
                                          <td class="text-right"><?php echo $donnees_facture['dat_e']; ?></td>
                                        </tr>
                                    <?php
                                        }
                                    ?>  
                                </tbody>


Merci encore
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621 -
Si tu suis le contenu des liens que je t'ai donné...tu auras toutes les solutions à tes soucis...
Commenter la réponse de jordane45
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4
0
Merci
J'ai beau activer les erreur php .. toujours page blanche :

Quand j'arrive la première fois sur la page,
Par contre si je "force" le lient avec factures.php?affichagenbfacture=10 Sa marche

Idem le formulaire me change bien la valeur dans le lien.

Voici la page complète (factures.php) :

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
include 'bdd.php';
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <?php
            include'head.php';
        ?>
        <title>Factures</title>
    </head>
    
    <body class="animsition">
        <div class="page-wrapper">
            <?php
                include 'menu.php';
            ?>
            <div class="page-container2">
                <section class="statistic">
                    <div class="section__content section__content--p30">
                        <div class="container-fluid">
                            <div class="row">
                                <div class="col-md-6 col-lg-3">                                    
                                    <div class="statistic__item">
                                        <?php
                                            $recup_nombre_facture = $bdd->query('SELECT COUNT(*) AS id FROM factures');
                                            $donnees_nombre_facture = $recup_nombre_facture->fetch();
                                        ?>                                         
                                        <h2 class="number"><?php echo $donnees_nombre_facture['id'];?></h2>
                                        <span class="desc">Nombre de factures</span>
                                        <div class="icon">
                                            <i class="zmdi zmdi-shopping-cart"></i>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-md-6 col-lg-3">
                                    <div class="statistic__item">
                                        <?php
                                            $recup_ca = $bdd->query('SELECT SUM(montant) AS total_montant FROM factures');
                                            $donnees_ca = $recup_ca->fetch();
                                        ?>                                         
                                        <h2 class="number"><?php echo $donnees_ca['total_montant'];?> €</h2>
                                        <span class="desc">Chiffre d'affaire</span>
                                        <div class="icon">
                                            <i class="zmdi zmdi-calendar-note"></i>
                                        </div>
                                    </div>
                                </div>
                                
                            </div>
                        </div>
                    </div>
                </section>
                <div class="row">
                    <div class="col-lg-9">
                        <h2 class="title-1 m-b-25">Facture</h2>
                        <div class="table-responsive table--no-card m-b-40" style="width: 1000px; height: auto;">
                            <a href="ajout-facture.php"><i style="margin: 0px 0px 0px 15px;"></i>Ajouter / supprimer une facture</a>
                            <table class="table table-borderless table-striped table-earning">
                                    <tr>
                                        <th></th>
                                        <th class="text-right">Nombre de facture a afficher</th>
                                        <th>
                                            <form action="" method="GET" id="formnbdefactureaafficher">
                                                <select name="affichagenbfacture" size="1">
                                                    <option value="10">10</option>
                                                    <option value="25">25</option>
                                                    <option value="50">50</option>
                                                    <option value="100">100</option>
                                                </select>
                                                <button type="submit" class="btn btn-success btn-sm" form="formnbdefactureaafficher">
                                                    <i class="fa fa-dot-circle-o"></i> Actualiser
                                                </button>
                                            </form>
                                        </th>
                                        <th></th>
                                    </tr>
                                <thead>   
                                    <tr>
                                        <th>REF Client</th>
                                        <th>Numéro Facture</th>
                                        <th>Montant</th>
                                        <th class="text-right">Date</th>
                                    </tr>
                                </thead>
                                <tbody>
                                        <?php
                                           $recup_donnees_facture = $bdd->query('SELECT * FROM factures ORDER BY id DESC LIMIT '. $_GET['affichagenbfacture'] .' ');
                                           while($donnees_facture = $recup_donnees_facture->fetch()) {
                                       ?>  
                                        <tr>
                                          <td><?php echo $donnees_facture['ref_client']; ?></td>
                                          <td><?php echo $donnees_facture['numero_facture']; ?></td>
                                          <td><?php echo $donnees_facture['montant']; ?> €</td>
                                          <td class="text-right"><?php echo $donnees_facture['dat_e']; ?></td>
                                        </tr>
                                    <?php
                                        }
                                    ?>  
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
                <?php
                    include 'footer.php';
                ?>
            </div>
        </div>
        <script src="vendor/jquery-3.2.1.min.js"></script>
        <script src="vendor/bootstrap-4.1/popper.min.js"></script>
        <script src="vendor/bootstrap-4.1/bootstrap.min.js"></script>
        <script src="vendor/slick/slick.min.js"></script>
        <script src="vendor/wow/wow.min.js"></script>
        <script src="vendor/animsition/animsition.min.js"></script>
        <script src="vendor/bootstrap-progressbar/bootstrap-progressbar.min.js"></script>
        <script src="vendor/counter-up/jquery.waypoints.min.js"></script>
        <script src="vendor/counter-up/jquery.counterup.min.js"></script>
        <script src="vendor/circle-progress/circle-progress.min.js"></script>
        <script src="vendor/perfect-scrollbar/perfect-scrollbar.js"></script>
        <script src="vendor/chartjs/Chart.bundle.min.js"></script>
        <script src="vendor/select2/select2.min.js"></script>
        <script src="vendor/vector-map/jquery.vmap.js"></script>
        <script src="vendor/vector-map/jquery.vmap.min.js"></script>
        <script src="vendor/vector-map/jquery.vmap.sampledata.js"></script>
        <script src="vendor/vector-map/jquery.vmap.world.js"></script>
        <script src="js/main.js"></script>
    </body>
</html>


bdd.php :

<?php
$bdd = new PDO('mysql:host=localhost;dbname=MSID;charset=utf8', 'dev', 'dev');
// Activation des erreurs PDO
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
?>



Merci encore
Commenter la réponse de CorentinRoche
0
Merci
Bonjour,

Après la ligne 42,
$sql = 'SELECT * FROM factures ORDER BY id DESC LIMIT  ?'  ;

il faut indiquer la variable à remplacer dans ?.

Vu que c'est un integer:
mysqli_stmt_bind_param($bdd, 'i',$affichagenbfacture);
CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 -
Donc normalement je laisse le "?" dans ma requet ?
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621 > CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
-
Oui.
CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 -
Ha car cela ne fonctionne pas.. avec le ?

Par contre : avec le $affichagenbfacture c'est bon

$sql = 'SELECT * FROM factures ORDER BY id DESC LIMIT  '. $affichagenbfacture .''  ;
jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
1621 > CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
-
Je viens de vérifier.
Il semble ne effet que PDO ne gère pas le remplacement dans les requêtes préparées pour les clauses LIMIT
Reste comme tu as fais
CorentinRoche
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4 > jordane45
Messages postés
25595
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
23 mai 2019
-
Top merci encore une fois !
Commenter la réponse de zucrezel
Messages postés
230
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
18 mai 2019
4
0
Merci
Effectivement, j'ai juste remplacer le ? par $affichagenbfacture dans ma requete

Ce qui a solutionner le problème, Juste l'affichage qui déconne, mais je vais regarder ca :p



Merci tous ! Surtout a jordane45
Commenter la réponse de CorentinRoche