Ordonner des réponses
danielos77 Messages postés 117 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un morceau de code qui fonctionne très bien mais je souhaiterais si cela est possible ordonner l'ordre d'affichage Président/Secrétaire/Trésorier/Responsable activité A / Responsable activité B... en sachant qu'une même personne peut avoir plusieurs fonctions (d'où le explode).
<?php
//activation de l'affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//on inclut le fichier de connexion à la bdd
require_once "";
//préparation de la requête d'après l'unité choisie
$sth="SELECT Nom, Prenom, Tph, Mail, Unite, Fonction FROM Fonctions where Unite = :unite ORDER BY Nom ASC" ;
try{
//Préparation requete
$req =$bdd->prepare($sth);
//execution
$req->bindValue(':Unite',$nomUnite);
$req->execute();
//on récupère les résultats
$result = $req->FetchAll();
}
catch(Exception $e){
// en cas d'erreur :
echo " <br>Erreur ! ".$e->getMessage();
echo " <br>Les datas : " ;
print_r($datas);
}
/*
echo'<pre>';
var_dump($result);
die();
echo'</pre>';
*/
if (!empty($result)){
foreach ($result as $ligne) {
//récupération des informations
$Nom = $ligne['Nom'];
$Prenom = $ligne['Prenom'];
$Mail = $ligne['Mail'];
$Tph = $ligne['Tph'];
$Unite = $ligne['Unite'];
$Fonction = $ligne['Fonction'];
$fonction = explode(", ", $Fonction);
foreach($fonction as $key => $fonction) {
echo'
<font size="4">
<ul><li>'.htmlspecialchars($fonction).' :<br>
  '.htmlspecialchars($Prenom).' '.htmlspecialchars($Nom).'<br>
  Tph : '.htmlspecialchars($Tph).' <br>
  Mail : '.htmlspecialchars($Mail).'
</li></ul>
';
}
}
}else{
echo'
<p style="margin-left: 40px;"> <font size="5">
Cette Unité ne semble pas active... Etes-vous sûr de vouloir la choisir quand même ? </font><br>
<i>(Pour en changer, vous pouvez consulter la carte des activités dans votre espace personnel et en changer.)</i><br>
';
}
?>
J'avais pensé mettre un if ($fonction="Président")[echo'....';}elsif($fonction="Secrétaire"){echo'...';}etc... entre le "if (!empty($result)){ et le foreach.." mais cela ne semble pas être la solution. Je serai preneur d'un conseil.
Merci d'avance,
Daniel
Windows / Firefox 154.0
2 réponses
-
Bonjour,
Une idée pourrait être de générer l'ordre directement dans le select via un champ calculé à partir du champ fonction.
Avec Oracle j'utilisais decode() dans mysql il y a CASE qui y ressemble ou peut être IFNULL(ELT(FIELD()) comme proposé sur https://stackoverflow.com/questions/4706100/mysql-equivalent-of-decode-function-in-oracle
Ce pourrait être :
SELECT Nom, Prenom, Tph, Mail, Unite, Fonction, CASE Fonction when 'Président' then 1 when 'Secrétaire' then 2 when 'Tésorier' then 3 when '...' then 9 else 99 END AS Tri FROM Fonctions ORDER BY Tri, NomSi une personne peut avoir 2 fonctions, ton modèle de BDD n'est pas idéal. Il serait préférable d'avoir un table Personne et une table Fontion (PersonneId, Fonction), ou idéalement une table Personne (PersonneId, ...), une table Fonction (FonctionId, Fonction) et une table PersFct (PersonneId, FonctionId)
-
Bonsoir Jee Pee,
Merci pour l'idée des tables distinctes.
Mes fonctions sont issues de select name [ ] d'où ma variable à exploder.C'est pour cela que je cherchai une solution d'ordonner à l'affichage.
@+
Daniel