[Php/Sql] Problème Order By

Problème Order By [Php/Sql] - PHP - Programmation

Marsh Posté le 02-05-2011 à 11:39:52    

Bonjour a vous tous :)
 
Je code actuellement un site ou un professionnel peut venir ajouter une pub,jusque la pas de soucis sauf que dans mon administration je voudrais afficher un tableau avec toutes les pubs enregistrés dans la BD et les pubs serait triés selon des critères choisis par l'admin le problème c'est que le trie (ORDER BY) ne fonctionne pas  
 
Voila les parties du code concernés :
 
Class Pub:

Code :
  1. class pub{
  2. public $id,$id_pro,$nom,$prixclick,$dimension,$lienimg,$nb_affichage,$nb_click,$lienurl,$id_domaine,$date_creation,$date_activation,$date_fin,$active;
  3. public function __construct($n,$idp,$d,$p,$l,$nba,$nbc,$url,$iddom,$dc,$da,$df,$a=false,$i=false){
  4.  $this->id=$i;
  5.  $this->id_pro=$idp;
  6.  $this->nom=$n;
  7.  $this->prixclick=$p;
  8.  $this->dimension=$d;
  9.  $this->active=$a;
  10.  $this->lienimg=$l;
  11.  $this->nb_affichage=$nba;
  12.  $this->nb_click=$nbc;
  13.  $this->lienurl=$url;
  14.  $this->id_domaine=$iddom;
  15.  $this->date_creation=$dc;
  16.  $this->date_activation=$da;
  17.  $this->date_fin=$df;
  18. }
  19. public function save(){
  20.  if($this->id==false){
  21.   $sql = "INSERT INTO pub VALUES (NULL,'$this->nom','$this->id_pro','$this->dimension','$this->prixclick','$this->lienimg','$this->nb_affichage','$this->nb_click','$this->lienurl','$this->id_domaine','$this->date_creation','$this->date_activation','$this->date_fin','$this->active')";
  22.   mysql_query($sql);
  23.   $this->id = mysql_insert_id();
  24.  }
  25.  else{
  26.   $sql= "UPDATE pub SET id_pro='$this->id_pro',nom='$this->nom',prix='$this->prixclick',dimension='$this->dimension',lienimg='$this->lienimg',nb_affichage='$this->nb_affichage',nb_click='$this->nb_click',lienurl='$this->lienurl',id_domaine='$this->id_domaine',date_creation='$this->date_creation',date_validation='$this->date_activation',date_fin='$this->date_fin',active='$this->active' WHERE id='$this->id'";
  27.   mysql_query($sql);
  28.  }
  29. }
  30. ...
  31. }


 
class PubTable:

Code :
  1. <?php
  2. class PubTable{
  3.  public static function getAlltrie($order) {
  4.  $sql="Select * from pub order by '$order'";
  5.  echo $sql;
  6.  $res = mysql_query($sql);
  7.  $toto = array();
  8.  while($line=mysql_fetch_array($res)){
  9.   $toto[] =  new pub($line['nom'],$line['id_pro'],$line['dimension'],$line['prix'],$line['lienimg'],$line['nb_affichage'],$line['nb_click'],$line['lienurl'],$line['id_domaine'],$line['date_creation'],$line['date_validation'],$line['date_fin'],$line['active'],$line['id']);
  10.  }
  11.  return $toto;
  12. }
  13. }
  14. ?>


 
Appel de la fonction
 
 

Code :
  1. $res=PubTable::getAlltrie($order);


 
J'ai fait tout les echo possible et le $order est bien valide que ce soit ici (admin.php) ou dans la class PubTable.class.php
 
Voila je ne sais pas du tout pour quoi ca ne marche pas :/  
 
 

Reply

Marsh Posté le 02-05-2011 à 11:39:52   

Reply

Marsh Posté le 02-05-2011 à 11:52:18    

Habituellement, il est recommandé d'éviter les select * et les remplacer par des select en précisant le nom de chaque colonne dans le select, surtout si après on utilise un nom de colonne dans un order ou un group by.

Reply

Marsh Posté le 02-05-2011 à 13:03:12    

- Quel est le résultat de ton echo $sql?
- On évite en général de mélanger français et anglais ( getAlltrie )
- Essaie de respecter les standards de mise en majuscule (getAllTrie)
- Arrête d'utiliser mysql_query + requête écrite en dûr et passe plutôt par DBO et les prepared statements.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-05-2011 à 13:48:54    

Mon echo de $sql avec par exemple $order=nom: Select * from pub order by 'nom'
 
 
Edit:problème résolue !  
 
En fait il fallait juste enlevé les simple quote autour du $order dans la variable $sql de la fonction getAlltrie()


Message édité par MonTheDim le 02-05-2011 à 14:06:36
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed