OVH Cloud OVH Cloud

tri inverse sur 2eme clic ?

5 réponses
Avatar
lolo
Bonjour,

Je donne la possibillité d'ordonner l'affichage d'une colonne mais je
voudrais qu'en cliquant une 2ème fois, le trie se fasse en sens inverse:
http://www.moreau-fr.net/educnat/qcm/qcm_1/table.php

Je détermine quel tri à utiliser ainsi:

if ( $Trie == 1 )
$query = $query . " ORDER BY Nom";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom";

A l'affichage, je rends la colonne cliquable comme cela:

<A HREF="table.php?Trie=1">Nom</A>
<A HREF="table.php?Trie=2">Prénom</A>

Comment fait-on ?

merci à vous,

Laurent

5 réponses

Avatar
P'tit Marcel
lolo wrote:

Je donne la possibillité d'ordonner l'affichage d'une colonne mais je
voudrais qu'en cliquant une 2ème fois, le trie se fasse en sens inverse:
http://www.moreau-fr.net/educnat/qcm/qcm_1/table.php

Je détermine quel tri à utiliser ainsi:

if ( $Trie == 1 )
$query = $query . " ORDER BY Nom";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom";

A l'affichage, je rends la colonne cliquable comme cela:

<A HREF="table.php?Trie=1">Nom</A>
<A HREF="table.php?Trie=2">Prénom</A>

Comment fait-on ?


# au début
$sens = (isset($_REQUEST['sens']) ? $_REQUEST['sens'] : '');
if ($sens <> 'd')
$sens = 'a';

...

# pour le query
if ( $Trie == 1 )
$query = $query . " ORDER BY Nom $sens";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom $sens";

....

# à l'affichage
$sensinv = ($sens == 'a' ? 'd' : 'a');

<A HREF="table.php?Trie=1&sens=<?php echo ($Trie == 1 ? $sensinv : 'a');
?>">Nom</A>

<A HREF="table.php?Trie=2&sens=<?php echo ($Trie == 2 ? $sensinv : 'a');
?>">Prénom</A>



(non testé)

eça
--
P'tit Marcel

Avatar
Ronnie Garcia
P'tit Marcel wrote:
lolo wrote:

Je donne la possibillité d'ordonner l'affichage d'une colonne mais je
voudrais qu'en cliquant une 2ème fois, le trie se fasse en sens inverse:
http://www.moreau-fr.net/educnat/qcm/qcm_1/table.php

Je détermine quel tri à utiliser ainsi:

if ( $Trie == 1 )
$query = $query . " ORDER BY Nom";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom";

A l'affichage, je rends la colonne cliquable comme cela:

<A HREF="table.php?Trie=1">Nom</A>
<A HREF="table.php?Trie=2">Prénom</A>

Comment fait-on ?


# au début
$sens = (isset($_REQUEST['sens']) ? $_REQUEST['sens'] : '');
if ($sens <> 'd')
$sens = 'a';


ou plutot
if ('d' == $sens) $sens = 'DESC';
else $sens = 'ASC'

pour que :

# pour le query
if ( $Trie == 1 )
$query = $query . " ORDER BY Nom $sens";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom $sens";


fonctionne.

--
Ronnie Garcia <ronnie at mk2 dot net>


Avatar
lolo
Bonjour et merci,

J'ai éssayé dans un premier temps la solution de P'tit Marcel,
mais cela ne fonctionne malheureusement pas.
Le tri s'éffectue toujours dans le sens descendant mais pas Asc.
J'ai ensuite appliqué la modif suggérée par Ronnie :

# au début
$sens = (isset($_REQUEST['sens']) ? $_REQUEST['sens'] : '');
if ($sens <> 'd')
$sens = 'a';


ou plutot
if ('d' == $sens) $sens = 'DESC';
else $sens = 'ASC'


mais idem.

Vu mon niveau en php, ça va être dur de voir ou cela coince.
Si quelqu'un "voit" la solution ...

Cordialement,

Laurent

PS : Vous pouvez tester le qcm si vous voulez,
la note ne comptera pas dans la moyenne, promis ;-)


Avatar
P'tit Marcel
lolo wrote:

J'ai éssayé dans un premier temps la solution de P'tit Marcel,
mais cela ne fonctionne malheureusement pas.
Le tri s'éffectue toujours dans le sens descendant mais pas Asc.
J'ai ensuite appliqué la modif suggérée par Ronnie :

mais idem.


oui, comme signalé par Ronnie j'avais un trop abrégé ASCending et
DESCending.

Donc il faudrait par exemple :

# au début
$sens = @$_REQUEST['sens'];
if ($sens <> 'desc')
$sens = 'asc';
...

# pour le query
if ( $Trie == 1 )
$query = $query . " ORDER BY Nom $sens";
else if ( $Trie == 2 )
$query = $query . " ORDER BY Prenom $sens";
....

# à l'affichage
$sensinv = ($sens == 'asc' ? 'desc' : 'asc');

<A HREF="table.php?Trie=1&sens=<?php echo ($Trie == 1 ? $sensinv :
'asc'); ?>">Nom</A>

<A HREF="table.php?Trie=2&sens=<?php echo ($Trie == 2 ? $sensinv :
'asc'); ?>">Prénom</A>


eça
--
P'tit Marcel

Avatar
lolo
P'tit Marcel wrote:

oui, comme signalé par Ronnie j'avais un trop abrégé ASCending et
DESCending.

Donc il faudrait par exemple :

# au début
$sens = @$_REQUEST['sens'];
if ($sens <> 'desc')
$sens = 'asc';
...


Super merci !
Cela fonctionne parfaitement.
je vais pouvoir faire des contôles sur ce modèle.

Cordialement,

Laurent