Page 1 sur 1

Trier un tableau sur le clic du titre de la colonne

Posté : 18 mai 2012, 17:08
par Device01
Bonjour tout le monde,

Voilà tout est dans le titre, je me casse la tête depuis quelques temps sur comment trier un tableau quand on clic sur le titre de la colonne.

Le script que j'ai écris fais ceci :

j'ai une liste déroulante dans lequel se trouve des formations.
Je sélectionne une formation et j'appuis sur envoyer.
Le formation sélectionnée reste affiché dans la liste déroulante et le résultat affiche un beau tableau.
Dans ce tableau il y a un titre par colonne cliquable pour trier le tableau.
Jusque là tou va bien.

C'est après que ça ce gâte...
Lorsque je clique sur le titre pour trier le tableau, je perds le tableau et par la meme occasion la selection dans ma liste déroulante.
Donc pas de tableau trié au final.
C'est comme ci je revenais au début du script avec une liste déroulante avec une valeur de sélection par défaut et le bouton "envoyer"

Voici le script
<?php      
        $connexion = mysql_connect('localhost','root','')
        or die("Impossible de se connecter : " . mysql_error());   
        mysql_select_db("bacinfo");
        
        $query ="SELECT idSection, nomSection, dureeSection from t_sections WHERE afficheSection = 1";
  			$result = mysql_query($query);
  			echo '<form action=test.php method="POST">
               <select name="champ" id="champ">
  			        <option value=0 selected="selected">- S&eacutelectionnez -</option>';
  			        
  			while($row = mysql_fetch_array($result))
        {
            ?>
            <option value="<?php echo $row['idSection']; ?>" <?php if(isset($_POST['champ']) && $_POST['champ'] == $row['idSection']) echo 'selected="selected"'; ?>><?php echo $row['nomSection'].'('.$row['dureeSection'].')'; ?></option>
            <?php                  
        } 
  			              
        echo '</select>      
                <div id="boton">
                  <input type="submit" name="select" value="Envoyer" />
              </div>
              <form>';               
                
        if (isset($_POST['select']))
        {
            if ($_POST['champ'] == 0)
            {
                echo '<div id ="m11">'; 
                echo '<p>Veuillez s&eacutelectionner une formation !</p>';
                echo '</div>';	
                }
                else
                {
                    $order = (iSset($_GET['ordre']) ? $_GET['ordre'] : null);
                    $tri = (iSset($_GET['tri']) ? " ORDER BY " . $_GET['tri'].' '. $order : null);  
                    $query = "SELECT udUnite, nomUnite, periodesUnite FROM t_unites WHERE sectionId = '".$_POST['champ']."'";
  			            $query .=  $tri;
                    $result = mysql_query($query);
  			            $sum1 = 0;
  			            $testrow =0; 
  			           
  			            if (mysql_num_rows($result)==0)
  			            {
                        echo '<div id ="m11"> 
                        <p>Section non active !</p>
                        </div>';
                    }
                   else
  			           {
      			           echo '<table>
      			                 <tr>
                             <td>Unit&eacute
  <!-- Ci dessous le code changé pour le premier href --!>  
                                <a href="?id=6&tri=udUnite&order=asc$champs=3">+</a>   
  <!-- *********************** Cela me renvoie à index.php?id=6&tri=udUnite&order=asc$champs=3 **** --!>
  <!-- *********************** Je perd la sélection dans la liste déroulante et le **************** --!> 
  <!-- *********************** tri ne s affiche pas. Que faire ?                   **************** --!>   
                                <a href="?id=6&tri=udUnite&order=desc$champs=3">-</a>
                             </td>
                             <td>Nom unit&eacute
                                <a href="?id=6&tri=nomUnite&ordre=asc">+</a>
                                <a href="?id=6&tri=nomUnite&ordre=desc">-</a>
                             </td>
                             <td>P&eacuteriodes
                                <a href="?id=6&tri=periodesUnite&ordre=asc">+</a>
                                <a href="?id=6&tri=periodesUnite&ordre=desc">-</a>
                             </td>
                             </tr>';
                             
  			               while($donnees=mysql_fetch_array($result))
                       {
                              
                          echo '<tr><td>' . $donnees['udUnite'] . '</td>
                          <td>' . $donnees['nomUnite'] . '</td>
                          <td>' . $donnees['periodesUnite'] . '</td></tr>';
                          $sum1++;
  			                  $testrow++;
                                  
                       }	                 
                       $sql = "SELECT SUM(periodesUnite) AS nb_total FROM t_unites WHERE sectionId = '".$_POST['champ']."'";
                       $req = mysql_query($sql);
                       $sum2 = mysql_fetch_array($req);
                       if ($testrow == 0)
                       {
                          $sum2 = 0;
                          echo '<tr><td>Total = '.$sum1.'</td><td>'.$row['nomUnite'].'</td><td>Total = '.$sum2.'</td></tr>';                    
                          echo '</table>';
                       }
                       else
                       {                
                          echo '<tr><td>Total = '.$sum1.'</td><td>'.$row['nomUnite'].'</td><td>Total = '.$sum2['nb_total'].'</td></tr>';                    
                          echo '</table>'; 
                       }
                       
                    }
                    
              }                
        }
            
                      
       

?>

Re: Trier un tableau sur le clic du titre de la colonne

Posté : 18 mai 2012, 17:15
par piotrowski-s
c'est du tri dynamique,


moi, je rajouterais ça dans ta requête:
ORDER BY ".$tri." DESC;";


Et après dans ta fonction
affichage de l'en-tete du tableau HTML avec les noms des champs
echo "<table border=2 CELLPADDING=\"5\" CELLSPACING=\"5\" WIDTH=\"70%\" align=left><tr>";
for($i=0; $i < $nbchamps; $i++) {
$tabchamps[$i] = mysql_field_name($resultat,$i);
echo "<th><a href="nomDeTaPage.php?tri=$tabchamps[$i]">$tabchamps[$i]</a></th>";
}
echo "</tr>";
a adapter en fonction de tes desiderata