Ordonner des réponses

danielos77 Messages postés 117 Date d'inscription   Statut Membre Dernière intervention   -  
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>
                    &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. jee pee Messages postés 31945 Date d'inscription   Statut Modérateur Dernière intervention   10 003
     

    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
  2. danielos77 Messages postés 117 Date d'inscription   Statut Membre Dernière intervention   2
     

    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