HTML CSS MYSQL PHP

Résolu
bonjour ,
j'ai envie d'afficher dans un tableau pour chaque employé les équipements qui lui sont affecté
exemple
Employé xx
-PC
-Dique dure
-Imprimante
Employé yy
-Fax
-Scanner
-Ordinateur de bureau

mon problème les équipements s'affichent mais a chaque fois le nom de employé se répète au nombre des équipements qui sont affecté
exemple :
xx
-PC
xx
-Disque dure
xx
-Imprimante

donc ma question ou le problème au niveau des css ou bien HTML ou bien l'affichage

      <table class="table table-hover" id="task-table" border=1>
            <thead>
   
                               <tr style="" >
                                  <th Style="font-family:Times; font-style: italic; font-size: 15px;text-align:center">Désignation </th>                               
                                  <th Style="font-family:Times; font-style: italic; font-size: 15px;text-align:center">Quantité</th>
                                  <th Style="font-family:Times; font-style: italic; font-size: 15px;text-align:center">Code équipement</th>
                                </tr>
       
        
               </thead>
            <tbody>
<?php
$requete="SELECT `equipement`.`code_equip`,`quantite`,`equipement`.`designation_sous_categorie`,`designation_marque`, `Nom_emp`,`Prenom_emp`,`serie` FROM `sous_categorie` INNER JOIN `equipement` INNER JOIN `equip_affect_emp` INNER JOIN `employé` ON `sous_categorie`.`designation_sous_categorie`=`equipement`.`designation_sous_categorie` AND `equipement`.`code_equip`=`equip_affect_emp`.`code_equip` AND `equip_affect_emp`.`Id_emp`=`employé`.`Id_emp` WHERE `sous_categorie`.`id_categorie`=3 order by `Nom_emp`";
  $resultat = $conn->query($requete) or die ('Erreur '.$requete.' '.$conn->error);
 while($row = mysqli_fetch_assoc($resultat))
 {
  echo '
                 <tr> <td colspan=12 style="background-color: #808080">'.$row['Nom_emp'].' '.$row['Prenom_emp'].' </td></tr>
    
      <td>'.$row['designation_sous_categorie'].'   '.$row['designation_marque'].'   '.$row['serie'].'    </td>
       <td>'.$row['quantite'].' </td>
       <td>'.$row['code_equip'].' </td>';
 }
 ?>
            </tbody>
                         </table>


1 réponse

  1. Modérateur
    Bonjour,

    Une première solution serait d'utiliser un IF pour vérifier si le nom précédent correspond au nom actuel. Si tel est le cas... ne pas le réafficher.

    Une autre solution est de reconstruire un array un peu mieux ordonné
    par exemple :
    $requete="SELECT `equipement`.`code_equip`,`quantite`,
                     `equipement`.`designation_sous_categorie`,
                     `designation_marque`, 
                     `Nom_emp`,
                     `Prenom_emp`,
                     `serie` 
              FROM `sous_categorie` INNER JOIN `equipement` 
              INNER JOIN `equip_affect_emp` 
              INNER JOIN `employé` ON `sous_categorie`.`designation_sous_categorie`=`equipement`.`designation_sous_categorie` 
                AND `equipement`.`code_equip`=`equip_affect_emp`.`code_equip` 
                AND `equip_affect_emp`.`Id_emp`=`employé`.`Id_emp` 
              WHERE `sous_categorie`.`id_categorie`=3 
              ORDER BY `Nom_emp`";
    if(!$resultat = $conn->query($requete)){ 
      die ('Erreur '.$requete.' '.$conn->error);
    }
    
    //On commence par recréer un Array contenant les informations mieux ordonnées...
    $aUserMat = array();
     while($row = mysqli_fetch_assoc($resultat))
     {
        $aUserMat[$row['Nom_emp'].' '.$row['Prenom_emp']] = array('designation_sous_categorie'=>$row['designation_sous_categorie'], 
                                                                'designation_marque'=>$row['designation_marque'], 
                                                                'serie'=>$row['serie'],
                                                                'quantite'=>$row['quantite']
                                                                'code_equip'=>$row['code_equip']);
      }
     
     //on utilise cet array pour générer l'affichage
     foreach($aUserMat as $User=>$aMat){
       echo '<tr> 
               <td colspan="12" style="background-color: #808080">'.$User.' </td>
            </tr>';
        foreach($aMat as $mat){
           echo '<tr> 
                   <td>'.$mat['designation_sous_categorie'].'   '.$mat['designation_marque'].'   '.$mat['serie'].'    </td>
                   <td>'.$mat['quantite'].' </td>
                   <td>'.$mat['code_equip'].' </td>
                 </tr>';
        }
     }
    
    


    Au passage, je t'invite vivement à lire ceci :
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    .

    1. Merci car le nom s'affiche une fois , mais pleins d'érreur
      Warning: Illegal string offset 'designation_sous_categorie' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\bst_gestion\BST\liste_inforrmatique.php on line 84
      
      Warning: Illegal string offset 'designation_marque' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\bst_gestion\BST\liste_inforrmatique.php on line 84
      
      Warning: Illegal string offset 'serie' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\bst_gestion\BST\liste_inforrmatique.php on line 84
      
      Warning: Illegal string offset 'quantite' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\bst_gestion\BST\liste_inforrmatique.php on line 85
      
      Warning: Illegal string offset 'code_equip' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\projects\bst_gestion\BST\liste_inforrmatique.php on line 86
    2. Modérateur
      Petite erreur
        $aUserMat[$row['Nom_emp'].' '.$row['Prenom_emp']][] = array('designation_sous_categorie'=>$row['designation_sous_categorie'], 
                                                                  'designation_marque'=>$row['designation_marque'], 
                                                                  'serie'=>$row['serie'],
                                                                  'quantite'=>$row['quantite']
                                                                  'code_equip'=>$row['code_equip']);
        
      
    3. Merci infiniment
    4. oui mon souci est résolu merci
      c'est fait