Trie par prix croissant

Résolu/Fermé
neo88100 Messages postés 2 Date d'inscription jeudi 12 février 2015 Statut Membre Dernière intervention 15 février 2015 - 12 févr. 2015 à 22:56
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 17 févr. 2015 à 00:12
Bonjour tout le monde, je débute en php et j'aurai une petite question :

J'ai un tableau de produits en php : produits.php qui vient d'une table dans PHPmyadmin.

Pour l'instant ça va le tableau s'affiche bien mais j'aimerai faire des "tris" dans ce tableau comme par exemple tiré par prix croissant comme sur les sites de ventes.

J'ai cherché et je n'est pas trouvé d'information.

Merci de votre aide.

Pour info voila mon code produits.php

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Liste des produits</title>
</head>

<body>
<?php
echo '<h2>Liste des produits présentées en tableau<br /><br /></h2>';
$base = mysqli_connect ('localhost', 'root', '')
or die("Impossible de se connecter : " . mysqli_error());
mysqli_select_db ($base,'p&v bike') ;
$sql = "SELECT Designationpr, Prixpr, Idpr FROM produits";
$req = mysqli_query($base,$sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($base));

// Affichage de l'entête du tableau
echo "<table border=\"0\" cellpadding=\"1\">";
echo "<tr>";
for ($champ=0; $champ < mysqli_field_count($base); $champ++)
{
$nom_du_champ = mysqli_fetch_field_direct($req, $champ);
echo "<td width=\"150\" align=\"center\" bgcolor=\"#999999\">$nom_du_champ->name</td>";
}
echo "</tr>";


// affichage des voitures
while ($data = mysqli_fetch_array($req))
{
echo "<tr>"; // nouvelle ligne du tableau
echo "<td align=\"center\">".utf8_encode($data['Designationpr'])."</td>";
echo "<td align=\"center\">".utf8_encode($data['Prixpr'])."</td>";
echo "<td align=\"center\">".utf8_encode($data['Idpr'])."</td>";

echo "</tr>"; // fin de la ligne du tableau
}

// terminer la table
echo "</table>";


// Libèration de la mémoire utilisée pour cette requête dans sql
//$data de PHP lui est toujours accessible !
mysqli_free_result ($req);

// Fermeture de sql
mysqli_close ($base);
?>
</body>
</html>

3 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
12 févr. 2015 à 23:07
'lut, comme tes résultats proviennent d'une base SQL, on va lui faire faire le tri:
$sql = "SELECT Designationpr, Prixpr, Idpr FROM produits ORDER BY Prixpr ASC";

ORDER BY Prixpr ASC
veut dire "TRIER PAR Prixpr CROISSANT".
Et là, magie, tes résultats seront récupérés triés dans l'ordre.
1
net_papy Messages postés 1021 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 19 novembre 2016 103
12 févr. 2015 à 23:10
Je ne connais pas le php mais la commande SQL Select peut être suivie
par un ORDER BY Prixpr Asc ou Desc devrait te permettre de mettre les prix en croissant ou décroissant
0
neo88100 Messages postés 2 Date d'inscription jeudi 12 février 2015 Statut Membre Dernière intervention 15 février 2015
Modifié par neo88100 le 15/02/2015 à 23:21
Merci pour ta réponse,

Enfaite j'aimerais que l'utilisateur puisse choisir lui même le trie et changer à sa guise, j'ai trouvé comme code celui ci mais il me met des erreurs pour les lignes en gras pouvez-vous m'aider svp :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php


// Connexion à la base de donnée
$base = mysqli_connect ('localhost', 'root', '')
or die("Impossible de se connecter : " . mysqli_error());
mysqli_select_db ($base,'p&v bike') ;


// Le nom de notre table
$tablename = 'produits';


// Tri sur colonne
$tri_autorises = array('Idpr','Designationpr','Prixpr');

$order_by = in_array(isset($_GET['order']),$tri_autorises) ? $_GET['order'] : 'Idpr';

// Sens du tri
$order_dir = isset($_GET['inverse']) ? 'DESC' : 'ASC';


// Préparation de la requête

$sqli = "
SELECT Designationpr, Prixpr, Idpr
FROM produits
ORDER BY {$order_by} {$order_dir}
";
$result = mysqli_query($sqli);


// Notre fonction qui affiche les liens
function sort_link($text, $order=false)
{
global $order_by, $order_dir;

if(!$order)
$order = $text;

$link = '<a href="?order=' . $order;
if($order_by==$order && $order_dir=='ASC')
$link .= '&inverse=true';
$link .= '"';
if($order_by==$order && $order_dir=='ASC')
$link .= ' class="order_asc"';
elseif($order_by==$order && $order_dir=='DESC')
$link .= ' class="order_desc"';
$link .= '>' . $text . '</a>';

return $link;
}


// Affichage
?>
<style type="text/css">
a.order_asc,
a.order_desc:hover {
padding-right:15px;
background:transparent url(s_asc.png) right no-repeat;
}
a.order_desc,
a.order_asc:hover {
padding-right:15px;
background:transparent url(s_desc.png) right no-repeat;
}
</style>

<table>
<tr>
<th><?php echo sort_link('Idpr', 'idpr') ?></th>
<th><?php echo sort_link('Designationpr', 'designationpr') ?></th>
<th><?php echo sort_link('Prixpr', 'prixpr') ?></th>

</tr>
<?php while( $row=mysqli_fetch_assoc($result) ) : ?>
<tr>
<td><?php echo $row['Idpr'] ?></td>
<td><?php echo $row['Designationpr'] ?></td>
<td><?php echo $row['Prixpr'] ?></td>

</tr>
<?php endwhile ?>
</table>
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 16/02/2015 à 00:22
Ta requête SQL n'est pas bonne: PHP fait la substitution des variables lors de l'attribution de
$sqli
comme prévu, mais pour une raison qui m'échappe tu les as entourées de crochets qui cassent la syntaxe et donc la requête. Et comme elle est invalide,
mysqli_query
échoue et renvoie
false
, valeur que prend
$result
qui est évidemment incorrecte pour
mysqli_fetch_assoc()
.
Comme ceci c'est mieux:
$sqli = "
SELECT Designationpr, Prixpr, Idpr
FROM produits
ORDER BY $order_by $order_dir"; 
Et surtout, tu n'as pas passé le contexte
$base
en paramètre à
mysqli_query
!
0
Merci de ta réponse, j'ai changé la syntaxe mais j'ai toujours 2 erreures,

) Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\wamp\www\P&V bike\essai.php on line 32

qui correspond à : "$result = mysqli_query($sql);"

et
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in C:\wamp\www\P&V bike\essai.php on line 79

qui correspond à : "<?php while( $row=mysqli_fetch_assoc($result) ) : ?>"

Je ne comprend pas quand tu dis :"tu n'as pas passé le contexte $bas en paramètre
mysqli_query"

Alexandre
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > neo88
Modifié par gravgun le 16/02/2015 à 14:28
j'ai changé la syntaxe
Non, tu n'as rien changé. Relis mon commentaire et change comme prévu: ma dernière phrase signifie que tu n'as pas précisé
$base
en 1er paramètre de
mysqli_query
.
0
Autant pour moi, c'est bon mon code marche. Merci infiniment pour ton aide gravgun :)
0
J'aurai juste une dernière remarque, ici mes données sont affichées les unes après les autres, est-t-il possible de les quadriller avec un tableaux ?
0