Tri par ordre croissant

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tri par ordre croissant

Re: Tri par ordre croissant

par Megadeth » 16 févr. 2015, 10:43

Hello,

S'il te met $result = mysqli_query($sqli); c'est qu'il y a un problème dans ta requête donc le while suit derrière (en erreur) c'est normal.

Es-tu sur de :
SELECT Designationpr, Prixpr, Idpr
FROM produits
ORDER BY {$order_by} {$order_dir}
Fais un echo/print de ta variable $sqli.

Mega
;)

Re: Tri par ordre croissant

par Neo88 » 16 févr. 2015, 00:21

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>

Re: Tri par ordre croissant

par Neo88 » 15 févr. 2015, 19:14

Ok mais je ne comprend pas trop...
Je dois modifier mon fichier .php ? Peut-tu être plus précis stp ?

Re: Tri par ordre croissant

par tof73 » 15 févr. 2015, 19:10

si tu préfères yui, dans l'ancienne version, c'est facile de le faire à partir d'une table dans le source du fichier html.
mais, c'est encore plus simple de regarder le second lien.

Re: Tri par ordre croissant

par Neo88 » 15 févr. 2015, 18:20

Merci pour ta réponse rapide !

Dans les liens que tu m'a donné pour avoir un classement "dynamique" j'ai bien compris seulement il faut écrire manuellement dans le code toutes les données ( dans le premier lien Nom compagnie, numéro téléphone et contact)...

Est-t-il possible de faire la même chose mais à partir de table comme dans mon cas ?

Cordialement,

Re: Tri par ordre croissant

par tof73 » 13 févr. 2015, 00:07

$sql = "SELECT Designationpr, Prixpr, Idpr FROM produits order by Prixpr desc";

ensuite, cela peut être une bonne idée de mettre en place quelque chose du genre :
http://yuilibrary.com/yui/docs/datatabl ... -sort.html
ou http://tablesorter.com/docs/
pour ne pas recharger la page, juste pour trier selon une autre colonne.

Tri par ordre croissant

par Neo88 » 13 févr. 2015, 00:00

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>