Trier un tableau php dynamiquement

Résolu
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   -  
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   - 30 janv. 2024 à 16:52

Bonjour,

j'affiche dans une page des clients rentrés dans ma BDD par ordre de date de . 

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></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 `2024` 
ORDER BY dateinscription
");

$query->execute();

$orders = $query->fetchAll();


$reponse = $db->prepare("
SELECT COUNT(*) AS nbClients 
FROM `2024` 
");
$reponse->execute();
$donnees1 = $reponse->fetch();

$reponsea = $db->prepare("
SELECT COUNT(*) AS janvier 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-01-01' AND '2024-02-01')
");
$reponsea->execute();
$donnees2 = $reponsea->fetch();

$reponseb = $db->prepare("
SELECT COUNT(*) AS fevrier 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-02-01' AND '2024-03-01')
");
$reponseb->execute();
$donnees3 = $reponseb->fetch();

$reponsec = $db->prepare("
SELECT COUNT(*) AS mars 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-03-01' AND '2024-04-01')
");
$reponsec->execute();
$donnees4 = $reponsec->fetch();

$reponsed = $db->prepare("
SELECT COUNT(*) AS avril 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-04-01' AND '2024-05-01')
");
$reponsed->execute();
$donnees5 = $reponsed->fetch();

$reponsee = $db->prepare("
SELECT COUNT(*) AS mai 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-05-01' AND '2024-06-01')
");
$reponsee->execute();
$donnees6 = $reponsee->fetch();

$reponsef = $db->prepare("
SELECT COUNT(*) AS juin 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-06-01' AND '2024-07-01')
");
$reponsef->execute();
$donnees7 = $reponsef->fetch();

$reponseg = $db->prepare("
SELECT COUNT(*) AS juillet 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-07-01' AND '2024-08-01')
");
$reponseg->execute();
$donnees8 = $reponseg->fetch();

$reponseh = $db->prepare("
SELECT COUNT(*) AS aout 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-08-01' AND '2024-09-01')
");
$reponseh->execute();
$donnees9 = $reponseh->fetch();

$reponsei = $db->prepare("
SELECT COUNT(*) AS septembre 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-09-01' AND '2024-10-01')
");
$reponsei->execute();
$donnees10 = $reponsei->fetch();

$reponsej = $db->prepare("
SELECT COUNT(*) AS octobre 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-10-01' AND '2024-11-01')
");
$reponsej->execute();
$donnees11 = $reponsej->fetch();

$reponsek = $db->prepare("
SELECT COUNT(*) AS novembre 
FROM `2024` 
WHERE (dateinscription BETWEEN '2024-11-01' AND '2024-12-01')
");
$reponsek->execute();
$donnees12 = $reponsek->fetch();

$reponsel = $db->prepare("
SELECT COUNT(*) AS decembre 
FROM `2024` 
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 s par mois .

Pourriez vous me dire comment trier sur la colonne travaux par ex?

merci d'avance.

J
Windows / Chrome 120.0.0.0

A voir également:

7 réponses

yg_be Messages postés 23538 Date d'inscription   Statut Contributeur Dernière intervention    

bonjour, que contient $orders?

0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

bonjour,

$orders = $query->fetchAll();
0
jordane45 Messages postés 38472 Date d'inscription   Statut Modérateur Dernière intervention   4 745
 

bonjour

t'embrasse pas à le coder.... utilises plutôt le plugin datatables (javascript)


0
jordane45 Messages postés 38472 Date d'inscription   Statut Modérateur Dernière intervention   4 745
 

au age, 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...


0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

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>

.

0

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

Posez votre question
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

Bonjour @jordane45 StatutModérateur,

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

0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

@jordane45 StatutModérateur,

bon je crois qu'il va falloir que je e 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

0
jordane45 Messages postés 38472 Date d'inscription   Statut Modérateur Dernière intervention   4 745
 

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" >
0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

@jordane45 StatutModérateur,

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

0