Trier un tableau php dynamiquement
RésoluBonjour,
j'affiche dans une page des clients rentrés dans ma BDD par ordre de date de contact.
Je souhaiterai pouvoir mettre un lien sur les entête de mon tableau, afin que l'utilisateur, puisse trier par la colonne qu'il veut.
mon affichage :
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>NOM</th>
<th>PRENOM</th>
<th>DATE</th>
<th>ACTIVITE</th>
<th>SOCIETE</th>
<th>EMAIL</th>
<th>CP</th>
<th>DEPARTEMENT</th>
<th>TELEPHONE</th>
<th>MESSAGE</th>
</tr>
</thead>
<tbody>
<?php foreach ($orders as $order) : ?>
<tr>
<td><?= $order["ID"] ?></td>
<td><?= $order["Nom"] ?></td>
<td><?= $order["Prénom"] ?></td>
<td><?= $order["dateinscription"] ?></td>
<td><?= $order["Travaux"] ?></td>
<td><?= $order["Provenance"] ?></td>
<td><?= $order["Email"] ?></td>
<td><?= $order["CodePostal"] ?></td>
<td><?= $order["Departement"] ?></td>
<td><?= $order["Téléphone"] ?></td>
<td><?= substr($order["Message"] ,0, 250)?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
mon code de requête d'affichage :
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
error_reporting(-1);
require 'fonctionsovh-2024.php';
$db = getConnection();
$query = $db->prepare("
SELECT ID, Nom, Prénom, dateinscription, Travaux, Provenance, Email, CodePostal, Departement, Téléphone, Message
FROM `Contact2024`
ORDER BY dateinscription
");
$query->execute();
$orders = $query->fetchAll();
$reponse = $db->prepare("
SELECT COUNT(*) AS nbClients
FROM `Contact2024`
");
$reponse->execute();
$donnees1 = $reponse->fetch();
$reponsea = $db->prepare("
SELECT COUNT(*) AS janvier
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-01-01' AND '2024-02-01')
");
$reponsea->execute();
$donnees2 = $reponsea->fetch();
$reponseb = $db->prepare("
SELECT COUNT(*) AS fevrier
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-02-01' AND '2024-03-01')
");
$reponseb->execute();
$donnees3 = $reponseb->fetch();
$reponsec = $db->prepare("
SELECT COUNT(*) AS mars
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-03-01' AND '2024-04-01')
");
$reponsec->execute();
$donnees4 = $reponsec->fetch();
$reponsed = $db->prepare("
SELECT COUNT(*) AS avril
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-04-01' AND '2024-05-01')
");
$reponsed->execute();
$donnees5 = $reponsed->fetch();
$reponsee = $db->prepare("
SELECT COUNT(*) AS mai
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-05-01' AND '2024-06-01')
");
$reponsee->execute();
$donnees6 = $reponsee->fetch();
$reponsef = $db->prepare("
SELECT COUNT(*) AS juin
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-06-01' AND '2024-07-01')
");
$reponsef->execute();
$donnees7 = $reponsef->fetch();
$reponseg = $db->prepare("
SELECT COUNT(*) AS juillet
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-07-01' AND '2024-08-01')
");
$reponseg->execute();
$donnees8 = $reponseg->fetch();
$reponseh = $db->prepare("
SELECT COUNT(*) AS aout
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-08-01' AND '2024-09-01')
");
$reponseh->execute();
$donnees9 = $reponseh->fetch();
$reponsei = $db->prepare("
SELECT COUNT(*) AS septembre
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-09-01' AND '2024-10-01')
");
$reponsei->execute();
$donnees10 = $reponsei->fetch();
$reponsej = $db->prepare("
SELECT COUNT(*) AS octobre
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-10-01' AND '2024-11-01')
");
$reponsej->execute();
$donnees11 = $reponsej->fetch();
$reponsek = $db->prepare("
SELECT COUNT(*) AS novembre
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-11-01' AND '2024-12-01')
");
$reponsek->execute();
$donnees12 = $reponsek->fetch();
$reponsel = $db->prepare("
SELECT COUNT(*) AS decembre
FROM `Contact2024`
WHERE (dateinscription BETWEEN '2024-12-01' AND '2025-01-01')
");
$reponsel->execute();
$donnees13 = $reponsel->fetch();
?>
les requetes reponsea .... sont pour l'affichage dans un autre tableau du nombre de contacts par mois .
Pourriez vous me dire comment trier sur la colonne travaux par ex?
merci d'avance.
J
Windows / Chrome 120.0.0.0
7 réponses
-
Contributeur
bonjour, que contient $orders?
-
bonjour,
$orders = $query->fetchAll();
-
Modérateur
bonjour
t'embrasse pas à le coder.... utilises plutôt le plugin datatables (javascript)
-
Modérateur
au passage, tu n'es pas obligé de faire 50 x la même requête juste pour sélectionner un mois... , il te suffit d' utiliser le group by...
-
Effectivement,
mais je n'aurais pas pu les afficher dans un tableau où les mois sont séparés ? non?
<table width="100%" border="1" cellspacing="1" cellpadding="5"> <thead> <tr> <th>Janvier</th> <th>Février</th> <th>Mars</th> <th>Avril</th> <th>Mai</th> <th>Juin</th> <th>Juillet</th> <th>Août</th> <th>Septembre</th> <th>Octobre</th> <th>Novembre</th> <th>Décembre</th> <th>Total</th> </tr> </thead> <tbody> <tr> <td><?= $donnees2["janvier"] ?></td> <td><?= $donnees3["fevrier"] ?></td> <td><?= $donnees4["mars"] ?></td> <td><?= $donnees5["avril"] ?></td> <td><?= $donnees6["mai"] ?></td> <td><?= $donnees7["juin"] ?></td> <td><?= $donnees8["juillet"] ?></td> <td><?= $donnees9["aout"] ?></td> <td><?= $donnees10["septembre"] ?></td> <td><?= $donnees11["octobre"] ?></td> <td><?= $donnees12["novembre"] ?></td> <td><?= $donnees13["decembre"] ?></td> <td><?= $donnees1["nbClients"] ?></td> </tr> </tbody> </table>.
-
-
Bonjour ,
je ne connais pas cette solution, je regarde.
Est ce que le javascript ne va pas alourdir mes pages ?
Je regarde cette solution .
Merci
J
-
,
bon je crois qu'il va falloir que je passe mon doctorat en php pour comprendre comment fonctionne le plugin datatables.
j'ai bien compris qu'il fallait télécharger les options + j'ai mis dans le head les deux lignes:
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.7/css/jquery.dataTables.css" /> <script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.js"></script>je ne sais pas où mettre
$(document).ready( function () { $('#myTable').DataTable(); } );j'ai mis dans filezilla les fichiers .js et .css.
Après je ne sais plus quoi faire.
Merci
J
-
Modérateur
Tu dois, de préférence, placer ce bout de code js à la fin de ton body ( avant le </body> ) entre balise script
<script> $(document).ready( function () { $('#myTable').DataTable(); } ); </script> </body>Il faudra penser à ajouter un ID à ton tableau
<table id="myTable" width="100%" border="1" cellspacing="1" cellpadding="5" >
-
-
,
du coup j'ai bien mis le script en fin de body,
rajouter dans le head l'appel vers les fichiers css et js.
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.7/css/jquery.dataTables.css" /> <script src="https://cdn.datatables.net/1.13.7/js/jquery.dataTables.js"></script> <link href="datatables.min.css" rel="stylesheet" /> <link href="datatables.css" rel="stylesheet" /> <script src="datatables.js"></script> <script src="datatables.min.js"></script>ma table à un id et une classe
<table id='myTable'class="table table-striped display dataTable">et c'est good !! j'arrive à trier les colonnes .
j'ai vu une fonction qui permettrait d'exporter en excel , je vais essayer de l'implanter.
Encore merci !
juste une dernière question :
lorsque j'ai pris les options que je voulais dans datatable, cela m'a mis plein de fichiers js et css dans des dossiers.
il faut que je fasse un liens vers chaque fichiers ??
merci
Bonne après midi
Jennifer