Trier colonnes d'un tableau PHP par titre
Fermé
NoobEnProg
Messages postés
7
Statut
Membre
-
NoobEnProg Messages postés 7 Statut Membre -
NoobEnProg Messages postés 7 Statut Membre -
Bonjour,
Après avoir farfouiller un peu partout sur ce forum, je n'ai toujours pas trouvé de solution à mon problème donc je viens vous demander de l'aide.
Je viens de commencer un stage et je dois apporter des modifications à un programme existant.
Je voudrais pouvoir trier les colonnes d'un tableau lorsque je clique sur leur en-tête, pour cela j'ai trouvé un exemple très bien fait mais je n'arrive pas à l'appliquer car ce n'est pas codé de la même manière.
Voici l'exmple :
<?php
02
03
04 // Connexion à la base de donnée
05 mysql_connect('serveur','user','password');
06 mysql_select_db('dbname');
07
08
09 // Le nom de notre table
10 $tablename = 'test';
11
12
13 // Tri sur colonne
14 $tri_autorises = array('id','firstname','lastname','email','last_connection');
15 $order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'id';
16
17
18 // Sens du tri
19 $order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';
20
21
22 // Préparation de la requête
23 $sql = "
24 SELECT *
25 FROM {$tablename}
26 ORDER BY {$order_by} {$order_dir}
27 ";
28 $result = mysql_query($sql);
29
30
31 // Notre fonction qui affiche les liens
32 function sort_link($text, $order=false)
33 {
34 global $order_by, $order_dir;
35
36 if(!$order)
37 $order = $text;
38
39 $link = '<a href="?order=' . $order;
40 if($order_by==$order && $order_dir=='ASC')
41 $link .= '&inverse=true';
42 $link .= '"';
43 if($order_by==$order && $order_dir=='ASC')
44 $link .= ' class="order_asc"';
45 elseif($order_by==$order && $order_dir=='DESC')
46 $link .= ' class="order_desc"';
47 $link .= '>' . $text . '</a>';
48
49 return $link;
50 }
51
52
53 // Affichage
54 ?>
55 <style type="text/css">
56 a.order_asc,
57 a.order_desc:hover {
58 padding-right:15px;
59 background:transparent url(s_asc.png) right no-repeat;
60 }
61 a.order_desc,
62 a.order_asc:hover {
63 padding-right:15px;
64 background:transparent url(s_desc.png) right no-repeat;
65 }
66 </style>
67
68 <table>
69 <tr>
70 <th><?php echo sort_link('Id', 'id') ?></th>
71 <th><?php echo sort_link('Firstname', 'firstname') ?></th>
72 <th><?php echo sort_link('Lastname', 'lastname') ?></th>
73 <th><?php echo sort_link('Email', 'email') ?></th>
74 <th><?php echo sort_link('Last Connection', 'last_connection') ?></th>
75 </tr>
76 <?php while( $row=mysql_fetch_assoc($result) ) : ?>
77 <tr>
78 <td><?php echo $row['id'] ?></td>
79 <td><?php echo $row['firstname'] ?></td>
80 <td><?php echo $row['lastname'] ?></td>
81 <td><?php echo $row['email'] ?></td>
82 <td><?php echo $row['last_connection'] ?></td>
83 </tr>
84 <?php endwhile ?>
85 </table>
Et voici mon code :
<?php
function listerAffaire( $affaire ) {
echo '<table class="TableauListe" width="95%" border="0" align="center" cellpadding="0" cellspacing="1">';
echo ' <tr>';
echo ' <td width="3%" height="28" class="mep_enteteTableau">N°</td>';
echo ' <td width="7%" class="mep_enteteTableau">Ouvert le</td>';
echo ' <td width="5%" class="mep_enteteTableau">Etat</td>';
echo ' <td width="10%" class="mep_enteteTableau">Objet</td>';
echo ' <td width="5%" class="mep_enteteTableau">Ouvrir</td>';
echo ' <td width="7%" class="mep_enteteTableau">A finir avant le</td>';
echo ' <td width="4%" class="mep_enteteTableau">Type</td>';
echo ' <td width="8%" class="mep_enteteTableau">Lieu</td>';
echo ' <td width="13%" class="mep_enteteTableau">Service</td>';
echo ' </tr>';
$vide = true;
$i = true;
$style = "mep_tableauImpair";
while($affaire->suivant()){
if($affaire->estEnRetard()){
$style = "mep_tableauRetard";
} else {
if($affaire->estPresqueTerminee()){
$style = "mep_tableauAlerte";
} else {
$result = $affaire->dureeDerniereModif();
switch ($result){
case 0: break;
case 1: $style = "mep_tableauModif1"; break;
case 2: $style = "mep_tableauModif2"; break;
case 3: $style = "mep_tableauModif3"; break;
}
}
}
$vide = false;
echo ' <tr class="'. $style .'"> ';
echo ' <td><div align="center">' . html($affaire->idAffaire) . '</div></td>';
echo ' <td class="mep_cellClair"><div align="center">' . html(datetimeToFr($affaire->dateOuverture)) . '</div></td>';
echo ' <td class="mep_cellClair"><div align="center">' . html($affaire->etat) . '</div></td>';
echo ' <td>' . html($affaire->objet) . '</td>';
echo ' <td><div align="center"><a href="suiviAffaire.php?id='. $affaire->idAffaire .'"><img src="design/images/ouvrir.gif" alt="Ouvrir" title="Ouvrir" width="23" height="20" border="0" /></a></div></td>';
echo ' <td class="mep_cellClair"><div align="center">';
if( $affaire->dateFinPrevue){
if(!$affaire->estEnRetard()){
if(!$affaire->estPresqueTerminee()){
echo html(datetimeToFr($affaire->dateFinPrevue)) . '</div></td>';
} else {
echo '<span class="alerte">'.html(datetimeToFr($affaire->dateFinPrevue)) . '</span></div></td>';
}
} else {
echo '<span class="retard">'.html(datetimeToFr($affaire->dateFinPrevue)) . '</span></div></td>';
}
}
echo ' <td class="mep_cellClair"><div align="center"><b>' . html($affaire->typeCircuit) . '</b></div></td>';
$localisation = $affaire->localisation;
if(($localisation = $affaire->localisation) == ""){
$structure = new Structure();
$structure->get($affaire->idStructureLocalisation);
$localisation = $structure->nom;
}
echo ' <td class="mep_cellClair"><div align="center">' . html($localisation) . '</div></td>';
$service = new Service();
$service->get($affaire->idServiceConcerne);
echo ' <td class="mep_cellClair"><div align="center">' . html($service->nom) . '</div></td>';
echo ' </tr>';
$i = !$i;
if($i){
$style = "mep_tableauImpair";
} else {
$style = "mep_tableauPair";
}
}
if($vide){
echo ' <tr class="mep_tableauImpair"> ';
echo ' <td colspan="20"><div align="center">Aucune affaire</div></td>';
echo ' </tr>';
}
echo '</table>';
}
?>
Comme vous pouvez le voir, le tableau dans lequel je voudrais trier mes colonnes est créer lors de l'exécution d'une fonction contrairement au tableau de l'exemple qui lui, est en dur. C'est là que je coince, j'ai essayé tout un tas de possibilité mais rien n'y fait cela ne marche pas.
Quelqu'un aurait-il une idée svp ?
Cordialement.
Après avoir farfouiller un peu partout sur ce forum, je n'ai toujours pas trouvé de solution à mon problème donc je viens vous demander de l'aide.
Je viens de commencer un stage et je dois apporter des modifications à un programme existant.
Je voudrais pouvoir trier les colonnes d'un tableau lorsque je clique sur leur en-tête, pour cela j'ai trouvé un exemple très bien fait mais je n'arrive pas à l'appliquer car ce n'est pas codé de la même manière.
Voici l'exmple :
<?php
02
03
04 // Connexion à la base de donnée
05 mysql_connect('serveur','user','password');
06 mysql_select_db('dbname');
07
08
09 // Le nom de notre table
10 $tablename = 'test';
11
12
13 // Tri sur colonne
14 $tri_autorises = array('id','firstname','lastname','email','last_connection');
15 $order_by = in_array($_GET['order'],$tri_autorises) ? $_GET['order'] : 'id';
16
17
18 // Sens du tri
19 $order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';
20
21
22 // Préparation de la requête
23 $sql = "
24 SELECT *
25 FROM {$tablename}
26 ORDER BY {$order_by} {$order_dir}
27 ";
28 $result = mysql_query($sql);
29
30
31 // Notre fonction qui affiche les liens
32 function sort_link($text, $order=false)
33 {
34 global $order_by, $order_dir;
35
36 if(!$order)
37 $order = $text;
38
39 $link = '<a href="?order=' . $order;
40 if($order_by==$order && $order_dir=='ASC')
41 $link .= '&inverse=true';
42 $link .= '"';
43 if($order_by==$order && $order_dir=='ASC')
44 $link .= ' class="order_asc"';
45 elseif($order_by==$order && $order_dir=='DESC')
46 $link .= ' class="order_desc"';
47 $link .= '>' . $text . '</a>';
48
49 return $link;
50 }
51
52
53 // Affichage
54 ?>
55 <style type="text/css">
56 a.order_asc,
57 a.order_desc:hover {
58 padding-right:15px;
59 background:transparent url(s_asc.png) right no-repeat;
60 }
61 a.order_desc,
62 a.order_asc:hover {
63 padding-right:15px;
64 background:transparent url(s_desc.png) right no-repeat;
65 }
66 </style>
67
68 <table>
69 <tr>
70 <th><?php echo sort_link('Id', 'id') ?></th>
71 <th><?php echo sort_link('Firstname', 'firstname') ?></th>
72 <th><?php echo sort_link('Lastname', 'lastname') ?></th>
73 <th><?php echo sort_link('Email', 'email') ?></th>
74 <th><?php echo sort_link('Last Connection', 'last_connection') ?></th>
75 </tr>
76 <?php while( $row=mysql_fetch_assoc($result) ) : ?>
77 <tr>
78 <td><?php echo $row['id'] ?></td>
79 <td><?php echo $row['firstname'] ?></td>
80 <td><?php echo $row['lastname'] ?></td>
81 <td><?php echo $row['email'] ?></td>
82 <td><?php echo $row['last_connection'] ?></td>
83 </tr>
84 <?php endwhile ?>
85 </table>
Et voici mon code :
<?php
function listerAffaire( $affaire ) {
echo '<table class="TableauListe" width="95%" border="0" align="center" cellpadding="0" cellspacing="1">';
echo ' <tr>';
echo ' <td width="3%" height="28" class="mep_enteteTableau">N°</td>';
echo ' <td width="7%" class="mep_enteteTableau">Ouvert le</td>';
echo ' <td width="5%" class="mep_enteteTableau">Etat</td>';
echo ' <td width="10%" class="mep_enteteTableau">Objet</td>';
echo ' <td width="5%" class="mep_enteteTableau">Ouvrir</td>';
echo ' <td width="7%" class="mep_enteteTableau">A finir avant le</td>';
echo ' <td width="4%" class="mep_enteteTableau">Type</td>';
echo ' <td width="8%" class="mep_enteteTableau">Lieu</td>';
echo ' <td width="13%" class="mep_enteteTableau">Service</td>';
echo ' </tr>';
$vide = true;
$i = true;
$style = "mep_tableauImpair";
while($affaire->suivant()){
if($affaire->estEnRetard()){
$style = "mep_tableauRetard";
} else {
if($affaire->estPresqueTerminee()){
$style = "mep_tableauAlerte";
} else {
$result = $affaire->dureeDerniereModif();
switch ($result){
case 0: break;
case 1: $style = "mep_tableauModif1"; break;
case 2: $style = "mep_tableauModif2"; break;
case 3: $style = "mep_tableauModif3"; break;
}
}
}
$vide = false;
echo ' <tr class="'. $style .'"> ';
echo ' <td><div align="center">' . html($affaire->idAffaire) . '</div></td>';
echo ' <td class="mep_cellClair"><div align="center">' . html(datetimeToFr($affaire->dateOuverture)) . '</div></td>';
echo ' <td class="mep_cellClair"><div align="center">' . html($affaire->etat) . '</div></td>';
echo ' <td>' . html($affaire->objet) . '</td>';
echo ' <td><div align="center"><a href="suiviAffaire.php?id='. $affaire->idAffaire .'"><img src="design/images/ouvrir.gif" alt="Ouvrir" title="Ouvrir" width="23" height="20" border="0" /></a></div></td>';
echo ' <td class="mep_cellClair"><div align="center">';
if( $affaire->dateFinPrevue){
if(!$affaire->estEnRetard()){
if(!$affaire->estPresqueTerminee()){
echo html(datetimeToFr($affaire->dateFinPrevue)) . '</div></td>';
} else {
echo '<span class="alerte">'.html(datetimeToFr($affaire->dateFinPrevue)) . '</span></div></td>';
}
} else {
echo '<span class="retard">'.html(datetimeToFr($affaire->dateFinPrevue)) . '</span></div></td>';
}
}
echo ' <td class="mep_cellClair"><div align="center"><b>' . html($affaire->typeCircuit) . '</b></div></td>';
$localisation = $affaire->localisation;
if(($localisation = $affaire->localisation) == ""){
$structure = new Structure();
$structure->get($affaire->idStructureLocalisation);
$localisation = $structure->nom;
}
echo ' <td class="mep_cellClair"><div align="center">' . html($localisation) . '</div></td>';
$service = new Service();
$service->get($affaire->idServiceConcerne);
echo ' <td class="mep_cellClair"><div align="center">' . html($service->nom) . '</div></td>';
echo ' </tr>';
$i = !$i;
if($i){
$style = "mep_tableauImpair";
} else {
$style = "mep_tableauPair";
}
}
if($vide){
echo ' <tr class="mep_tableauImpair"> ';
echo ' <td colspan="20"><div align="center">Aucune affaire</div></td>';
echo ' </tr>';
}
echo '</table>';
}
?>
Comme vous pouvez le voir, le tableau dans lequel je voudrais trier mes colonnes est créer lors de l'exécution d'une fonction contrairement au tableau de l'exemple qui lui, est en dur. C'est là que je coince, j'ai essayé tout un tas de possibilité mais rien n'y fait cela ne marche pas.
Quelqu'un aurait-il une idée svp ?
Cordialement.
A voir également:
- Trier colonnes d'un tableau PHP par titre
- Trier un tableau excel - Guide
- Tableau word - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Tableau ascii - Guide
tu devra simplement passé l'identifiant de la table au tableshorter et il ya complètement une doc sur cela. c'est vraiment facile et je les testé
si t'a les problème à l'utiliser, tu peu les poser