Ordre croissant ou decroissant

ViPHP
ViPHP | 2287 Messages

25 oct. 2007, 10:00

Il faut déplacer la ligne mysql_query() après le bloc switch(){}. Car si ton code ressemble à celui que tu as posté plus haut, tout le travail du switch(){} ne sert à rien puisque quand on arrive au switch la requête a déjà été envoyée au serveur mysql.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 169 Messages

25 oct. 2007, 10:12

il y a vraiment de quoi s'arraché les cheveux quand on débute :lol:
même en mettant "mysql_query" après mon "switch"... marche pas.

l'erreur ne viendrait il pas du lien "a href" ?
$ordre = (isset ($_GET['ordre']))? $_GET['ordre']: 'asc'; 
$sql = "SELECT * FROM prix_pao";

switch ($ordre)
{
case 'asc':
default:
$sql .= " ORDER BY id_prix";
break;
case 'support':
$sql .= " ORDER BY support_prix DESC";
break;
// etc......
}

$sql_retour =  mysql_query($sql);

//....tout le code du tableau....
<a href="xxxx.php?ordre=support">support</a> 
--
Kweb

Eléphant du PHP | 169 Messages

25 oct. 2007, 10:44

Je viens d'écrire différemment la syntaxe (en étudiant ce que vous avez mis précédemment)
// On récupère le paramètre de l'URL : s'il n'y en a pas, valeur 'ordre croissant' par défaut 
$ordre = (isset ($_GET['ordre']))? $_GET['ordre']: 'asc'; 
//$sql = "SELECT * FROM prix_pao";

if ($_GET['ordre']=='support')
{$sql = "SELECT * FROM prix_pao ORDER BY support_prix ".(($ordre=='support')? 'desc':'asc');}

elseif ($_GET['ordre']=='format')
{$sql = "SELECT * FROM prix_pao ORDER BY format_prix ".(($ordre=='format')? 'desc':'asc');}

elseif ($_GET['ordre']=='couleur')
{$sql = "SELECT * FROM prix_pao ORDER BY couleur_prix ".(($ordre=='couleur')? 'desc':'asc');}

elseif ($_GET['ordre']=='dossier')
{$sql = "SELECT * FROM prix_pao ORDER BY dossier_prix ".(($ordre=='dossier')? 'desc':'asc');}

elseif ($_GET['ordre']=='date')
{$sql = "SELECT * FROM prix_pao ORDER BY date_prix ".(($ordre=='date')? 'desc':'asc');}

elseif ($_GET['ordre']=='imprimeur') 
{$sql = "SELECT * FROM prix_pao ORDER BY imprimeur_prix ".(($ordre=='imprimeur')? 'desc':'asc');}

elseif ($_GET['ordre']=='prix')
{$sql = "SELECT * FROM prix_pao ORDER BY prix_prix ".(($ordre=='prix')? 'desc':'asc');}

elseif ($_GET['ordre']=='quantite')
{$sql = "SELECT * FROM prix_pao ORDER BY quantite_prix ".(($ordre=='quantite')? 'desc':'asc');}

elseif ($_GET['ordre']=='graphiste')
{$sql = "SELECT * FROM prix_pao ORDER BY graphiste_prix ".(($ordre=='graphiste')? 'desc':'asc');}

else {$sql = "SELECT * FROM prix_pao ORDER BY id_prix";}

$sql_retour =  mysql_query($sql);
et en mettant comme lien

Code : Tout sélectionner

<a href="xxxx.php?ordre=support">
Tous fonctionne correctement !!!!

Quelques questions :
- meme si cela fonctionne, cette syntaxe n'est elle pas trop lourde ? si oui, peut on l'optimisé ?
- Tout fonctionne bien, mais dans un seul sens. c'est a dire qu'une fois que l'on a cliqué sur le lien, si je re-clique dessus, je ne peux pas les remettre en ordre ASC.
Peut on le faire ?

Merci
--
Kweb

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2007, 11:13

Bah c'est un peu logique que le sens soit toujours le même :
si $_GET['ordre']=='support', alors $ordre sera toujours égal à 'support' et donc toujours un tri desc.

Déjà tu peux grandement simplifier l'écriture en utilisant la valeur passée en paramètre :
$ordre = (isset ($_GET['ordre']))? $_GET['ordre'] : 'id';  

$sql = "SELECT ... 
  FROM prix_pao 
  ORDER BY ".mysql_real_escape_string($ordre)."_prix"; 
Une seule requête et un paramètre qui détermine l'ordre de tri, c'est quand même plus lisible.

Quant au sens de tri, bah le plus simple c'est un second paramètre qui viendra compléter la requête, par exemple :
<?php 
  if (isSet($_GET['sens']) && $_GET['sens'] == 'asc') // si un sens est spécifié on inverse pour le lien
    $sens = 'desc';
  else // sinon 
    $sens = 'asc';
?>
<a href="xxxx.php?ordre=support&sens=<?php echo $sens; ?>" > ... </a>
Et du côté de ta requête suffit de l'inclure (avec les tests qui vont bien au préalable) :
" ORDER BY ".mysql_real_escape_string($ordre)."_prix ".$_GET['sens']; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 oct. 2007, 12:37

à la base ça avait été expliqué dans le sujet que j'ai proposé tout au début :roll:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 oct. 2007, 14:14

flute.. j'étais pas remonté aussi loin dans les précédents posts :?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...