Liste déroulante qui gère un nombre d'affichage

Résolu/Fermé
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 - 10 mai 2019 à 21:58
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 - 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>


5 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 mai 2019 à 22:52
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 :
https://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.



1
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
11 mai 2019 à 14:49
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 mai 2019 à 15:14
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 : https://forums.commentcamarche.net/forum/affich-37584941-php-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... https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

.
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
Modifié le 11 mai 2019 à 19:14
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 mai 2019 à 20:14
Si tu suis le contenu des liens que je t'ai donné...tu auras toutes les solutions à tes soucis...
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
11 mai 2019 à 22:41
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>

1
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
12 mai 2019 à 13:25
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.
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
11 mai 2019 à 21:32
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
0
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);
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 mai 2019 à 15:29
Qu'est-ce que tu viens parler de mysqli... alors qu'il code en PDO ??

Quoi qu'il en soit, le "?" est déjà traité dans le execute
 $recup_donnees_facture = $bdd->prepare($sql);
  $recup_donnees_facture->execute($datas);

On y injecte la variable
$datas = array($affichagenbfacture);

... c'est le principe du prepare / execute de pdo.....
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
12 mai 2019 à 17:56
Donc normalement je laisse le "?" dans ma requet ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023
12 mai 2019 à 18:54
Oui.
0
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
12 mai 2019 à 19:15
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 .''  ;
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023
Modifié le 13 mai 2019 à 11:11
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CorentinRoche Messages postés 271 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 12 juin 2023 39
Modifié le 12 mai 2019 à 14:53
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
0