Page 1 sur 2

order by sur un lien d'un tableau

Posté : 18 mars 2006, 10:30
par roxor45
bonjour tous le monde

voila depuis hier je bloque sur un petit truc qui me stresse alors apres de nombreuses recherche sur le forum j'ai trouvé quelque élément mais quand je les insert dans mon script sa marche pas .

Donc je souhaiterais pouvoir trier mes colonnes de mon tableau de ASC puis DESC en cliquant sur le meme lien, j'ai trouvé ce post qui en parlé mais j'ai pas compris le script et j'ai pas reussi a l'adapté au mien

http://www.phpfrance.com/forums/voir_su ... ableau.php

pour l'instant j'arrive juste a trier chaque colonne juste dans un sens

script du tableau :


if (isset($_GET["order"]))
  $order = "ORDER BY ".$_GET["order"];
else
  $order= "ORDER BY Grades.Num_grade DESC";

$requete ="select Nom_Grade,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE from Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix and Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ".$order;
$envoi = mysql_query($requete);


// début du tableau ( hors boucle )
echo "<table width=\"100%\" border=\"0\" align=\"center\" bgcolor=\"#000000\" cellpadding=\"2\" cellspacing=\"1\"> \n";
echo "<tr> \n";
echo "<td width=\"12%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Grades.Num_grade>Grade</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Nom>Nom</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.prenom>Prenom</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Telephone>Telephone</a></font></u></b></td> \n";
echo "<td width=\"30%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Adresse>Adresse</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Conducteur_vl>Conducteur VTU</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Conducteur_pl>Conducteur Fourgon</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Cfapse>CFAPSE</a></font></u></b></td> \n";
echo "</tr> \n";
$i=1;

// début de la boucle
while($tableau = mysql_fetch_array($envoi)) {
if ($i%2==0)
$color="#DEE7EB";
else
$color="#F5F5F5";

echo "<tr> \n";
echo "<td width=\"12%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Nom_Grade"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Nom"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Prenom"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Telephone"]."</td> \n";
echo "<td width=\"30%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Adresse"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_vl"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_pl"]."</td> \n";
echo "<td width=\"10%\" align=\"left\" valign=\"top\" bgcolor=".$color.">".$tableau["CFAPSE"]."</td> \n";
echo "</tr> \n";
$i++;
}

// fin du tableau html ( hors boucle )
echo "</table> \n";

Re: order by sur un lien d'un tableau

Posté : 18 mars 2006, 11:40
par Truc
Salut,
je bloque sur un petit truc qui me stresse
On m'appel ? :lol:

Proposition de code:
<?php

$order= isset($_GET["order"]) ? $_GET["order"] : "DESC"; // récupération ordre ASC ou DESC

$champ= isset($_GET["champ"]) ? $_GET["champ"] : "Num_grade"; // récupération du champ de tri
  
$champ2 = ($champ == "Num_grade") ? "Grades.".$champ : "Pompiers.".$champ; // concaténation du nom de table pour le tri
  
$requete =" SELECT Nom_Grade,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE 
			FROM Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse 
			WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix 
			AND Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ".$order." 
			ORDER BY ".$champ2." ".$order;
			
$envoi = mysql_query($requete);
?>

<!-- // début du tableau ( hors boucle ) -->
<table width="100%" border="0" align="center" bgcolor="#000000" cellpadding="2" cellspacing="1"> n";
	<tr> 
		<?php $ordre_url= ($champ != "Num_grade") ? "" : $order ;  ?>
		<td width="12%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b>
			<a href="liste.php?champ=Num_grade&order=<?php echo $ordre_url; ?>">Grade</a></font></u></b>
		</td> 
		
		<?php $ordre_url= ($champ != "Nom") ? "" : $order ;  ?>
		<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b>
			<a href="liste.php?champ=Nom&order=<?php echo $ordre_url; ?>">Nom</a></font></u></b>
		</td> 
De même pour les autres liens.
En passant tu ferais mieux de mettre un style CSS au lieu de toutes ces balises de mise en forme :?

Sort aussi le maximum de code html des balises php, c'est plus lisible :wink:

Posté : 18 mars 2006, 11:56
par roxor45
ba en faite je suis une vrai bille en php alors je recupere des morceaux a droite a gauche et quand sa marche je touche plus :lol: :lol: :lol:

en tous cas merci je test ca et je te tien au courant

Posté : 18 mars 2006, 12:06
par roxor45
une question me vien, est ce que je garde ce que j'avais deja fait pour trier mes colonnes ou je remplace tous ?

Posté : 18 mars 2006, 12:11
par Truc
tu remplaces le haut de ton code jusqu'au WHILE()

Posté : 18 mars 2006, 12:27
par roxor45
je suis désolé mais depuis ce matin mon tableau à beaucoup changé :D

Et là je vous dit franchement je capte plus sa va trop vite :lol: :lol:

:D

bref, on peut reprendre du debut svp ?

mon nouveau tableau est celui ci :
<?php

//ici les parametres pour la connexion

   $host="localhost";
   $user="root";
   $passe="";
   $base="calendrier";


//on effectue la connexion

@mysql_connect("$host","$user","$passe");


//Selection de la base de données qui porte le meme nom que votre login

$select_base=@mysql_selectdb("$base");


//ci-dessous gestion des ORDER BY dans un sens,

if (isset($_GET["order"]))
  $order = "ORDER BY ".$_GET["order"];
else
  $order= "ORDER BY Grades.Num_grade DESC";
  
// requête
$requete ="select Nom_Grade,Num_Pompiers,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE from Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix and Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ".$order;
$envoi = mysql_query($requete);


// début du tableau ( hors boucle )
echo "<table width=\"100%\" border=\"0\" align=\"center\" bgcolor=\"#000000\" cellpadding=\"2\" cellspacing=\"1\"> \n";
echo "<tr> \n";
echo "<td width=\"12%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Grades.Num_grade>Grade</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Nom>Nom</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.prenom>Prenom</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Telephone>Telephone</a></font></u></b></td> \n";
echo "<td width=\"30%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Adresse>Adresse</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Conducteur_vl>Conducteur VTU</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Conducteur_pl>Conducteur Fourgon</a></font></u></b></td> \n";
echo "<td width=\"10%\" align=\"center\" valign=\"top\" bgcolor=\"#C4D3DB\"<font face=\"Arial\" size=\"2\"><u><b><a href=liste.php?order=Pompiers.Cfapse>CFAPSE</a></font></u></b></td> \n";
echo "</tr> \n";
$i=1;

// début de la boucle
while($tableau = mysql_fetch_array($envoi)) {

//gestion de la couleur alterné
if ($i%2==0)
$color="#DEE7EB";
else
$color="#F5F5F5";

echo "<tr> \n";
echo "<td width=\"12%\" valign=\"top\" bgcolor=".$color.">".$tableau["Nom_Grade"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color."><A href=\"javascript: OuvrirPopup('detail.php?id=".$tableau['Num_Pompiers']."', '', 'resizable=no, location=no, width=700, height=500, menubar=no, status=no, scrollbars=no, menubar=no')\">".$tableau["Nom"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color."><A href=\"javascript: OuvrirPopup('detail.php?id=".$tableau['Num_Pompiers']."', '', 'resizable=no, location=no, width=700, height=500, menubar=no, status=no, scrollbars=no, menubar=no')\">".$tableau["Prenom"]."</a></td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Telephone"]."</td> \n";
echo "<td width=\"30%\" valign=\"top\" bgcolor=".$color.">".$tableau["Adresse"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_vl"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_pl"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["CFAPSE"]."</td> \n";
echo "</tr> \n";
$i++;
}

// fin du tableau html ( hors boucle )
echo "</table> \n";


?>
désolé si ya beaucoup de commentaire dans le script mais sa m'aide énormement, le fait qu'y est des commentaires peut nuir au script ?

Posté : 18 mars 2006, 12:32
par charabia
Ton tableau n'a pas réellement changé. Regardes bien l'exemple que t'a fourni Truc, il a sorti ton tableau hors boucle (donc hors php) tout simplement. Reprend ton tableau et fait de même.

Dès qu'il s'agit d'un code HTML sans aucune variable ni code php, il ne faut pas que tu le mettes dans du php <?php ... ?>

Posté : 18 mars 2006, 13:10
par roxor45
je ne comprend pas l'interet du 1er ".$order." de la requete .

Code : Tout sélectionner

$requete =" SELECT Nom_Grade,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE FROM Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix AND Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ".$order." ORDER BY ".$champ2." ".$order;
apres avoir fait pas mal de tri entre le html et le php et avoir mis en place de que truc ma donné, sa ne tri que dans un sens :(

Posté : 18 mars 2006, 13:38
par Truc
Et bien il ne sert à rien... un oubli, tu peux l'enlever.

Si le resultat n'est toujours pas celui attendu montre nous le code que tu as maintenant.

Posté : 18 mars 2006, 13:56
par roxor45
ok c'est bien ce que je pensais donc je l'ai viré


voici le nouveau code :
<?php

//ici les parametres pour la connexion

   $host="localhost";
   $user="root";
   $passe="";
   $base="calendrier";


//on effectue la connexion

@mysql_connect("$host","$user","$passe");


//Selection de la base de données qui porte le meme nom que votre login

$select_base=@mysql_selectdb("$base");


$order= isset($_GET["order"]) ? $_GET["order"] : "DESC"; // récupération ordre ASC ou DESC

$champ= isset($_GET["champ"]) ? $_GET["champ"] : "Num_Grade"; // récupération du champ de tri

$champ2 = ($champ == "Num_Grade") ? "Grades.".$champ : "Pompiers.".$champ; // concaténation du nom de table pour le tri

$requete ="SELECT Nom_Grade,Num_Pompiers,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE FROM Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix AND Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ORDER BY ".$champ2." ".$order;

$envoi = mysql_query($requete);
?>
<table width="100%" border="0" align="center" bgcolor="#000000" cellpadding="2" cellspacing="1">
<tr>
<?php $ordre_url= ($champ != "Num_Grade") ? "" : $order ;  ?>
<td width="12%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Num_Grade&order=<?php echo $ordre_url; ?>">Grade</a></font></u></b></td>
<?php $ordre_url= ($champ != "Nom") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Nom&order=<?php echo $ordre_url; ?>">Nom</a></font></u></b></td>
<?php $ordre_url= ($champ != "Prenom") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Prenom&order=<?php echo $ordre_url; ?>">Prenom</a></font></u></b></td>
<?php $ordre_url= ($champ != "Telephone") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Telephone&order=<?php echo $ordre_url; ?>">Telephone</a></font></u></b></td>
<?php $ordre_url= ($champ != "Adresse") ? "" : $order ;  ?>
<td width="30%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Adresse&order=<?php echo $ordre_url; ?>">Adresse</a></font></u></b></td>
<?php $ordre_url= ($champ != "Conducteur_vl") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Conducteur_vl&order=<?php echo $ordre_url; ?>">Conducteur VTU</a></font></u></b></td>
<?php $ordre_url= ($champ != "Conducteur_pl") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=Conducteur_pl&order=<?php echo $ordre_url; ?>">Conducteur Fourgon</a></font></u></b></td>
<?php $ordre_url= ($champ != "CFAPSE") ? "" : $order ;  ?>
<td width="10%" align="center" valign="top" bgcolor="#C4D3DB"<font face="Arial" size="2"><u><b><a href="liste3.php?champ=CFAPSE&order=<?php echo $ordre_url; ?>">CFAPSE</a></font></u></b></td>
</tr>

<?php
// début de la boucle
while($tableau = mysql_fetch_array($envoi)) {

//gestion de la couleur alterné
$i=1;
if ($i%2==0)
$color="#DEE7EB";
else
$color="#F5F5F5";

echo "<tr> \n";
echo "<td width=\"12%\" valign=\"top\" bgcolor=".$color.">".$tableau["Nom_Grade"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color."><A href=\"javascript: OuvrirPopup('detail.php?id=".$tableau['Num_Pompiers']."', '', 'resizable=no, location=no, width=700, height=500, menubar=no, status=no, scrollbars=no, menubar=no')\">".$tableau["Nom"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color."><A href=\"javascript: OuvrirPopup('detail.php?id=".$tableau['Num_Pompiers']."', '', 'resizable=no, location=no, width=700, height=500, menubar=no, status=no, scrollbars=no, menubar=no')\">".$tableau["Prenom"]."</a></td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Telephone"]."</td> \n";
echo "<td width=\"30%\" valign=\"top\" bgcolor=".$color.">".$tableau["Adresse"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_vl"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["Conducteur_pl"]."</td> \n";
echo "<td width=\"10%\" valign=\"top\" bgcolor=".$color.">".$tableau["CFAPSE"]."</td> \n";
echo "</tr> \n";
$i++;
}
?>
</table>



Posté : 18 mars 2006, 14:20
par Truc
il manque une ligne apres la requete (avant le tableau):

$requete ="SELECT Nom_Grade,Num_Pompiers,Nom,Prenom,Telephone,Adresse,Conducteur_vl.Conducteur_vl,Conducteur_pl.Conducteur_pl,Cfapse.CFAPSE FROM Grades,Pompiers,Conducteur_vl,Conducteur_pl,Cfapse WHERE Grades.Num_grade=Pompiers.Num_grade and Pompiers.Conducteur_vl=Conducteur_vl.Num_choix AND Pompiers.Conducteur_pl=Conducteur_pl.Num_choix and Pompiers.CFAPSE=Cfapse.Num_choix ORDER BY ".$champ2." ".$order;

$envoi = mysql_query($requete);

$order = ($order == "") ? "DESC" : ""; 
pour inverser l'ordre de tri.

Posté : 18 mars 2006, 14:28
par roxor45
...

je suis sur le cul, vous gerez trop sa fait peur :)

bon ba encore une probleme de resolu!


Merci a vous

Merci truc :D

Posté : 18 mars 2006, 19:02
par roxor45
en faite ya un petit truc qui cloche, je vien de m'en rendre compte,

la gestion des couleurs altérné ne fonctionne plus apres avoir cliquer sur un lien pour trier les colonnes.

ce script est tous bete :
$i=1;

if ($i%2==0)
$color="#DEE7EB";
else
$color="#F5F5F5";
je ne comprend pas pourquoi

Posté : 18 mars 2006, 19:44
par Truc
tu initialise la variable $i dans la boucle, elle est donc toujours égal à 1, sort l'initialisation avant la boucle.

Posté : 18 mars 2006, 20:03
par roxor45
meme sortie en dehord de la boucle et placé a plusieur endroit ca ne change rien :roll: