Ordonner des réponses

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>
                    &emsp;&emsp;'.htmlspecialchars($Prenom).' '.htmlspecialchars($Nom).'<br>
                    &emsp;&emsp;Tph : '.htmlspecialchars($Tph).' <br>
                    &emsp;&emsp;Mail : '.htmlspecialchars($Mail).'
                    </li></ul>
        	    ';
            }
        }
	}else{
        echo'
        <p style="margin-left: 40px;"> <font size="5">
        Cette Unit&eacute; ne semble pas active... Etes-vous s&ucirc;r de vouloir la choisir quand m&ecirc;me ? </font><br>
        <i>(Pour en changer, vous pouvez consulter la carte des activit&eacute;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

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

    0
    1. Modérateur

      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, Nom

      Si 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)


      0