trier un tableau par les colonnes

Petit nouveau ! | 4 Messages

11 oct. 2009, 17:04

Bonjour à tous,

Je suis débutant en php. Je réalise un site pour une association. J'ai récupéré et modifié le code (qui suit) qui me permet de sélectionner à partir de 2 listes déroulantes des activités. Après la sélection, les données s'affichent dans un tableau lignes/colonnes. Jusque là tout est ok. Le problème c'est que je n'arrive pas à faire des tris sur les colonnes par ordre croissant/décroissant en fonction de la colonne sélectionnée. J'ai essayé de modifier le code pour afficher les données dans un tableau html mais là après la sélection de ma 2ème liste déroulante, les données ne s'affichent pas...
Quelqu'un peut-il m'orienter pour solutionner mon problème ?
Merci

***************************************
<?php
include 'lang/detect-lang.php';
include 'Connexionbd.php';

$Ld2_retour =''; //id_region clé de la liste déroulante 2

if (isset($_GET['Ld2'])) {$Ld2_retour = $_GET['Ld2'];}
if (($Ld2_retour!='')) {
$rq="Select id_lieu, nom_lieu, nom_club, nom_activité, date_debut, date_fin from lieux where id_region=".$Ld2_retour." order by nom_region;";
$rq_pos_id=0; // position dans le select
$rq_pos_val=1;
$rq_pos_val2=2;
$rq_pos_val3=3;
$rq_pos_val4=4;
$rq_pos_val5=5;
$result= mysql_query ($rq) or die ("Select impossible");

if (mysql_num_rows($result) != 0) {

// debut du tableau
echo '<table bgcolor="#FFFFFF">'."\n";
// première ligne on affiche les titres dans x colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>Lieux</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Club</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Activité</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Date de début</u></b></td>';
echo '<td bgcolor="#669999"><b><u>Date de fin</u></b></td>' ;
echo '</tr>'."\n";
// lecture et affichage des résultats sur x colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($result)) {
echo '<tr>';

echo '<td bgcolor="#CCCCCC">'.$row[$rq_pos_val].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row[$rq_pos_val2].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row[$rq_pos_val3].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row[$rq_pos_val4].'</td>';
echo '<td bgcolor="#CCCCCC">'.$row[$rq_pos_val5].'</td>';
echo '</tr>'."\n";
}
echo '</table>'."\n";

// fin du tableau.
}

mysql_free_result($result);
mysql_close($connexion);

}else{
$retour = '<select name="Liste3" id="Liste3" size="1" disabled><option>Aucune valeur</option></select>';
}
echo $retour
?>

Kran
Invité n'ayant pas de compte PHPfrance

11 oct. 2009, 19:26

Quelque chose dans c'gout la ça t'plairait ?
En cliquant sur les entêtes de colonnes tu tries sur la colonne en question...
<?php
include 'lang/detect-lang.php';
include 'Connexionbd.php';

if(isset($_GET['param_tri'])) $param_tri='nom_region';

if (isset($_GET['Ld2'])) {$Ld2_retour = $_GET['Ld2'];}
if (($Ld2_retour!='')) {
	$rq="select id_lieu, nom_lieu, nom_club, nom_activité, date_debut, date_fin 
		from lieux where id_region=".$Ld2_retour." order by ".$param_tri;
	$result= mysql_query ($rq) or die ("Select impossible");

	if (mysql_num_rows($result) != 0) {
		// debut du tableau
		echo '<table bgcolor="#FFFFFF">';
		// première ligne on affiche les titres dans x colonnes
		echo '<tr>
				<td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_lieu">Lieux</a></u></b></td>
				<td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_club">Club</a></u></b></td>
				<td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_activité">Activité</a></u></b></td>
				<td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=date_debut">Date de début</a></u></b></td>
				<td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=date_fin">Date de fin</a></u></b></td>
			</tr>';
		// lecture et affichage des résultats sur x colonnes, 1 résultat par ligne. 
		while($row = mysql_fetch_array($result)) {
			echo '<tr>
				<td bgcolor="#CCCCCC">'.$row['nom_lieu'].'</td>
				<td bgcolor="#CCCCCC">'.$row['nom_club'].'</td>
				<td bgcolor="#CCCCCC">'.$row['nom_activité'].'</td>
				<td bgcolor="#CCCCCC">'.$row['date_debut'].'</td>
				<td bgcolor="#CCCCCC">'.$row['date_fin'].'</td>
			</tr>';
		}
		echo '</table>';
		// fin du tableau.
	}
	mysql_free_result($result);
	mysql_close($connexion);
}
else{
	echo 'Aucune info pour cette region.';
}
?>

Kran
Invité n'ayant pas de compte PHPfrance

11 oct. 2009, 19:29

Oups... petit gourage :
// faut remplacer cette linge :
if(isset($_GET['param_tri'])) $param_tri='nom_region';

// par :
if(isset($_GET['param_tri'])) $param_tri=$_GET['param_tri'];
else $param_tri='nom_region';

Petit nouveau ! | 4 Messages

11 oct. 2009, 22:14

Merci Kran pour la rapidité à laquelle tu m'as répondu et la qualité du code.
Le tableau est bien alimenté par les données mais quand je clique sur le nom de la colonne j'ai une ré-initialisation de ma page php avec dans l'url du navigateur : << ma_page.php?Ld2=&param_tri=date_debut >> et les données disparaisent. En fonction de la colonne que j'ai sélectionné le "tri=xxx_xxx prend le nom de la colonne.
Il semblerait que les valeurs provenant de la bdd ne soient pas conservées dans ma page php :

********************************************************************
<div id="Les3LD">

			<p>Rechercher une compétition</p>
				<form method="get" action="ListeCompet.php">
					 <select name="Liste1" id="Liste1" size="1" onchange="ValideLd2(this[this.selectedIndex].value);"><option selected value="">Choisir...</option><option value="3">Region_3</option><option value="2">Region_2</option><option value="1">Region_1</option></select>
&nbsp; <!--Pour remplir la liste déroulante 1-->
					<span id="niv2">
					
 <select name="Liste2" id="Liste2" size="1" disabled><option>Aucune valeur</option></select>

</span>&nbsp; <!--Pour remplir la liste déroulante 2-->
					<span id="niv3">
					
 Aucune info pour cette region.</span>&nbsp; <!--Pour remplir la liste déroulante 3-->
				</form>
************************************************************************
Une pettie idée de ce que je dois faire ?
Merci
A+

Kran
Invité n'ayant pas de compte PHPfrance

11 oct. 2009, 23:24

Oula... me lance pas trop d'fleurs sur la qualité du code c'est juste un dépannage express de fin d'weekend un peu glauque ^^

Tu devrais essayer de remplacer "ma_page.php" par l'url de ta page php... pour voir :)

Invité
Invité n'ayant pas de compte PHPfrance

12 oct. 2009, 21:44

Bonsoir,

Qu'en même bravo pour un dimanche soir.
J'avais bien remplacé ma_page.php par le nom de la page php :mrgreen:

Kran
Invité n'ayant pas de compte PHPfrance

18 oct. 2009, 01:01

Oula... j'espère que tu t'en est sorti tout seul depuis l'temps mais ouais y'avait bien une merdouille...

Dans la partie ou on écrit les liens ici :
echo '<tr>
                                <td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_lieu">Lieux</a></u></b></td>
                                <td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_club">Club</a></u></b></td>
                                <td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=nom_activité">Activité</a></u></b></td>
                                <td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=date_debut">Date de début</a></u></b></td>
                                <td bgcolor="#669999"><b><u><a href="ta_page.php?Ld2='.$_Ld2_retour.'&param_tri=date_fin">Date de fin</a></u></b></td>
                        </tr>';
Faut remplacer les $_Ld2_retour par $Ld2_retour ! Of course...

Désolé !

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 01:23

Kran maintenant que tu es inscrit pense a te connecter :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Invité
Invité n'ayant pas de compte PHPfrance

18 oct. 2009, 16:44

=D> Merci Kran. Ton code marche impec. J'ai galèré pendant quelques heures sans succès mais cela permet d'apprendre et de se creuser un peu les méninges.
Encore merci à la communauté.

Invité
Invité n'ayant pas de compte PHPfrance

18 oct. 2009, 16:52

Comment puis-je mettre le sujet en résolu ?
Merci

ViPHP
fab
ViPHP | 2657 Messages

18 oct. 2009, 17:10

il faut éditer le message original mais en te connectant
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }