trié un ableau avec plusieur colonne

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é un ableau avec plusieur colonne

Re: trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 21:49

je te remercie infiniment pour l'attention que t'a donné pour mon prob et surtt pour ton aide , je vais essayer ce que tu m'a dis et j'espere bien que ça vas marché!! :)

Re: trié un ableau avec plusieur colonne

par moogli » 31 mai 2011, 20:20

SELECT * FROM shop_commande ORDER BY id,client DESC ?

si ton choix est dynamique il faut qu tu fasse un lien (par exemple sur le nom de la colonne) qui contient le nom de la colonne sur laquelle tu souhaite trier (par exemple ?colonne=client ou ?colonne=id)

ensuite dans le script tu test sir $_GET['colonne'] existe et si c'est le cas tu met la valeur dans $client (dans ton code) si non tu met une valeur par défaut.
<?php
mysql_select_db($database_connexion, $connexion);
if (!empty( $_GET['colonne'])) {
$tri  = $_GET['colonne']; 
// bon faut quand même vérifier que la valeur est bien un nom de colonne réelle ;)  par exemple avec in_array
}
else {
// cas par défaut
$tri = 'id';
}
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY %s DESC",$tri);
$commandes = mysql_query($query_commandes, $connexion) OR die(mysql_error());
$row_commandes = mysql_fetch_assoc($commandes);
$totalRows_commandes = mysql_num_rows($commandes);
?>
<table width="100%" cellpadding="5"  cellspacing="1" bgcolor="#666666">
        <tr bgcolor="#FFFFFF">
          <th scope="col"><span class="Style1 Style1"><a href="?colonne=id">Num&eacute;ro de commande</a> </span></th>
          <th scope="col"><span class="Style1 Style1">Num&eacute;ro de facture </span></th>
          <th scope="col"><span class="Style1 Style1"><a href="?colonne=client">Client</a> </span></th>
          <th scope="col"><span class="Style1 Style1">Poids </span></th>
          <th scope="col"><span class="Style1 Style1">Total TTC </span></th>
          <th scope="col"><span class="Style1">Date de Commande </span></th>
          <th scope="col"><span class="Style1 Style1">Facture format PDF</span></th>
        </tr>
l'avantage de ce système et que tu n'est pas limité sur nombre de champs utilisable (tant qu'il existe dans la table).

@+

Re: trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 20:03

voici le code:
mysql_select_db($database_connexion, $connexion);
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY %s DESC",$client); 
$commandes = mysql_query($query_commandes, $connexion) or die(mysql_error());
$row_commandes = mysql_fetch_assoc($commandes);
$totalRows_commandes = mysql_num_rows($commandes);
<table width="100%" cellpadding="5"  cellspacing="1" bgcolor="#666666">
        <tr bgcolor="#FFFFFF">
          <th scope="col"><span class="Style1 Style1">Num&eacute;ro de commande </span></th>
          <th scope="col"><span class="Style1 Style1">Num&eacute;ro de facture </span></th>
          <th scope="col"><span class="Style1 Style1">Client </span></th>
          <th scope="col"><span class="Style1 Style1">Poids </span></th>
          <th scope="col"><span class="Style1 Style1">Total TTC </span></th>
          <th scope="col"><span class="Style1">Date de Commande </span></th>
          <th scope="col"><span class="Style1 Style1">Facture format PDF</span></th>
        </tr>
 <?php do { ?>
        
        		<?php
    		$date =$row_commandes['date'];
			$total_ht =$row_commandes['total_ht'];
			$c_total_ttc =$row_commandes['total_ttc'];
			$expedition =$row_commandes['expedition'];
			$client=$row_commandes['client'];
			//$zone = $row_client['zone'];
			
			$date_french= preg_replace("/([0-9].*)-([0-9].*)-([0-9].*)/" ,"\\3-\\2-\\1",$date);
			$date_expedition= preg_replace("/([0-9].*)-([0-9].*)-([0-9].*)/" ,"\\3-\\2-\\1",$expedition);
			$total_ttc_arrondi= number_format($c_total_ttc, 2, ',', ' '); 
			
			$date_explosee = explode("-", $date);
			$annee = $date_explosee[0];
			$mois = $date_explosee[1];
			$jour = $date_explosee[2];
			
			$id =$row_commandes['id'];
			
			$id = 1000+$id;
        		?>
        <tr bgcolor="#FFFFFF">
          <td><a href="../account/detail_commande.php?id=<?php echo $row_commandes['id']; ?>" class="Style1 Style1">n°<?php echo $row_commandes['id']; ?></a></td>
          <td><div align="center"><span class="Style1 Style1">n°<?php echo $annee; ?>/<?php echo $id; ?></span></div></td>
          <td><div align="center"><span class="Style1 Style1"><?php echo $row_commandes['client']; ?></span></div></td>
          <td><div align="right"><span class="Style1 Style1"><?php echo $row_commandes['poids']; ?>gr.</span></div></td>
          <td><div align="right"><span class="Style1 Style1"><?php echo $total_ttc_arrondi; ?>€</span></div></td>
          <td><div align="center"><span class="Style1"><?php echo $date_french; ?></span></div></td>
          <td><div align="center"><span class="Style1"><a href="traitementAdmin_facture.php?id=<?php echo $row_commandes['id']; ?>">Facture</a></span></div></td>
        </tr>
        <?php } while ($row_commandes = mysql_fetch_assoc($commandes)); ?>
      </table>

je voudrais le trie selon le num commande et aussi client. merci d'avance pour votre aide

Re: trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 19:34

le nom du champ qui enregistre le num de la commande c'est "id"

Re: trié un ableau avec plusieur colonne

par AB » 31 mai 2011, 19:29

Ben oui et ça tu peux le faire faire directement avec ta requête. Donc pour te donner un exemple fonctionnel il faudrait que l'on connaisse le nom des champs sur lesquels tu veux faire le tri... donc je répète ma question.

Sinon tu peux enregistrer le tableau de résultats dans une variable de sessions puis faire le tri sur ce tableau avec php mais cela risque d'être assez (ou très) laborieux.

Re: trié un ableau avec plusieur colonne

par moogli » 31 mai 2011, 19:28

AIDAN, quel est le code utilisé, car si la variable est vide cette erreur est normal

Re: trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 19:06

je ne sais pas si t'a compris ce que je veux faire ou pas!! en fait moi je voudrais trier ce tableau par plusieur criteres c'est à dire , en cliquand sur client il me le trie par ordre alphabétique des noms des clients et n cliquant sur la date il me le trie selon la date ...

Re: trié un ableau avec plusieur colonne

par AB » 31 mai 2011, 19:02

merci pour vos repense; mais ça ne marche tjrs pas.
j'ai essayé ton code (moogli) met il m'affiche le mg d'erreur suivant:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC' at line 1"
Comment s'appelle ton nom de champ qui enregistre les numéros de commande ?

Re: trié un ableau avec plusieur colonne

par AB » 31 mai 2011, 19:00

hum je m'interroge sur la pertinence du sprintf pourquoi ne pas utiliser une simple affectation ?
Oui effectivement, je n'ai pas regardé ni dit que c'était pertinent, j'ai simplement fait du copié-collé avec le code original pour montrer l'exemple avec un tri sur un autre critère :)

Re: trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 18:51

merci pour vos repense; mais ça ne marche tjrs pas.
j'ai essayé ton code (moogli) met il m'affiche le mg d'erreur suivant:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC' at line 1"

Re: trié un ableau avec plusieur colonne

par moogli » 31 mai 2011, 18:39

hum je m'interroge sur la pertinence du sprintf pourquoi ne pas utiliser une simple affectation ?

a la limite $query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY %s DESC",$nomduChamp);

$nomduChamp provenant du clic utilisateur pour le tri (GET / POST suivant la construction)

@+

Re: trié un ableau avec plusieur colonne

par AB » 31 mai 2011, 16:51

Le plus simple est de faire le tri au niveau de ta requête.

par défaut :
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY id DESC");

ou suivant le bouton
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY nom DESC");
ou
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY num_commande DESC");

trié un ableau avec plusieur colonne

par AIDAN » 31 mai 2011, 14:51

bonjour, j'ai créée un tableau en php et html et je voudrais faire le tri pour chaque colonne de ce tabeau , c'est à direquand je clique sur la colonne client le tabeau sera trié selon le nom client, et quand je clique sur num commande le tableau sera trié par le num d commande.
mysql_select_db($database_connexion, $connexion);
$query_commandes = sprintf("SELECT * FROM shop_commande ORDER BY id DESC"); 
$commandes = mysql_query($query_commandes, $connexion) or die(mysql_error());
$row_commandes = mysql_fetch_assoc($commandes);
$totalRows_commandes = mysql_num_rows($commandes);
 <table width="100%" cellpadding="5"  cellspacing="1" bgcolor="#666666">
        <tr bgcolor="#FFFFFF">
          <th scope="col"><span class="Style1 Style1">Num&eacute;ro de commande </span></th>
          <th scope="col"><span class="Style1 Style1">Num&eacute;ro de facture </span></th>
          <th scope="col"><span class="Style1 Style1">Client </span></th>
          <th scope="col"><span class="Style1 Style1">Poids </span></th>
          <th scope="col"><span class="Style1 Style1">Total TTC </span></th>
          <th scope="col"><span class="Style1">Date de Commande </span></th>
          <th scope="col"><span class="Style1 Style1">Facture format PDF</span></th>
        </tr>
        
 
        <?php do { ?>
        
        		<?php
    		$date =$row_commandes['date'];
			$total_ht =$row_commandes['total_ht'];
			$c_total_ttc =$row_commandes['total_ttc'];
			$expedition =$row_commandes['expedition'];
			$client=$row_commandes['client'];
			//$zone = $row_client['zone'];
			
			$date_french= preg_replace("/([0-9].*)-([0-9].*)-([0-9].*)/" ,"\\3-\\2-\\1",$date);
			$date_expedition= preg_replace("/([0-9].*)-([0-9].*)-([0-9].*)/" ,"\\3-\\2-\\1",$expedition);
			$total_ttc_arrondi= number_format($c_total_ttc, 2, ',', ' '); 
			
			$date_explosee = explode("-", $date);
			$annee = $date_explosee[0];
			$mois = $date_explosee[1];
			$jour = $date_explosee[2];
			
			$id =$row_commandes['id'];
			
			$id = 1000+$id;
        		?>
        <tr bgcolor="#FFFFFF">
          <td><a href="../account/detail_commande.php?id=<?php echo $row_commandes['id']; ?>" class="Style1 Style1">n°<?php echo $row_commandes['id']; ?></a></td>
          <td><div align="center"><span class="Style1 Style1">n°<?php echo $annee; ?>/<?php echo $id; ?></span></div></td>
          <td><div align="center"><span class="Style1 Style1"><?php echo $row_commandes['client']; ?></span></div></td>
          <td><div align="right"><span class="Style1 Style1"><?php echo $row_commandes['poids']; ?>gr.</span></div></td>
          <td><div align="right"><span class="Style1 Style1"><?php echo $total_ttc_arrondi; ?>€</span></div></td>
          <td><div align="center"><span class="Style1"><?php echo $date_french; ?></span></div></td>
          <td><div align="center"><span class="Style1"><a href="traitementAdmin_facture.php?id=<?php echo $row_commandes['id']; ?>">Facture</a></span></div></td>
        </tr>
        <?php } while ($row_commandes = mysql_fetch_assoc($commandes)); ?>
        
      </table>

merci d'avance pour votre aide