Liste déroulante qui gère un nombre d'affichage
Résolu
CorentinRoche
Messages postés
271
Date d'inscription
Statut
Membre
Dernière intervention
-
CorentinRoche Messages postés 271 Date d'inscription Statut Membre Dernière intervention -
CorentinRoche Messages postés 271 Date d'inscription Statut Membre Dernière intervention -
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 :
Voici ma boucle While :
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>
A voir également:
- Liste déroulante qui gère un nombre d'affichage
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste déroulante google sheet - Accueil - Guide bureautique
- Liste code ascii - Guide
- Affichage double ecran - Guide
5 réponses
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.
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.
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 :
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>
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.
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.
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) :
bdd.php :
Merci encore
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
Bonjour,
Après la ligne 42,
il faut indiquer la variable à remplacer dans ?.
Vu que c'est un integer:
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);
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
On y injecte la variable
... c'est le principe du prepare / execute de 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.....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour la réponse !
Alors premièrement j'ai une petite erreur a ce niveau :
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
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
.
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']
Merci encore