Trier un tableau php dynamiquement

Résolu
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 - 30 janv. 2024 à 10:07
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 - 30 janv. 2024 à 16:52

Bonjour,

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

A voir également:

7 réponses

yg_be Messages postés 23341 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 551
30 janv. 2024 à 13:34

bonjour, que contient $orders?

0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 janv. 2024 à 13:38

bonjour,

$orders = $query->fetchAll();
0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
30 janv. 2024 à 13:59

bonjour

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


0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
30 janv. 2024 à 14:15

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...


0
PJ47 Messages postés 77 Date d'inscription jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 janv. 2024 à 15:19

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 jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 janv. 2024 à 14:46

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 jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
30 janv. 2024 à 15:27

@jordane45 StatutModérateur,

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

0
jordane45 Messages postés 38299 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 novembre 2024 4 704
30 janv. 2024 à 16:02

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 jeudi 2 mars 2023 Statut Membre Dernière intervention 27 février 2024 1
Modifié le 30 janv. 2024 à 17:03

@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