Posts avec le tag "mysql"

Quand on ne sait pas employer mysql...

Ajouté le 26.08.2008 - 22:44 dans  •  Commentaires (0)
Tags: mysql champion

... on arrive à faire ce genre d'horreur :
<?php
// connexion mysql. du blabla inutile et pour finir ceci:
  $tri=' critere desc, users.nickname asc';
  if (! $_GET['tri']) $_GET['ordre']='desc';
  switch ($_GET['tri'])
  {
  case 'inscription': 
    $tri='users.date_inscription '.$_GET['ordre']; 
  break;
  case 'connexion': 
    $tri='users.last_connected '.$_GET['ordre']; 
  break;
  case 'turnover': 
    $tri='users_turnover.turnover '.$_GET['ordre']; 
  break;
  case 'nom': 
    $tri='users.nickname '.$_GET['ordre']; 
  break;
  case 'moyenne' : 
    $tri = 'moyenne '.$_GET['ordre'].' , users.nickname asc, new.nombre_notations desc'; 
  break;
  default: break;
  }

  $query = " 
    select users.nickname, users_turnover.turnover,
    users.pr_en_archive, optim_users_pages.title,
    new.nombre_notations,

    case when ((new.note_communication + 
    new.note_documentation + new.note_qualite +
    new.note_timing)/4)=10  && new.nombre_notations=0 
    then 0 
    else ((new.note_communication + 
    new.note_documentation + new.note_qualite + 
    new.note_timing)/4) end as moyenne,

    case when (new.nombre_notations=0 && 
    users_turnover.turnover <> 0) 
    then users_turnover.turnover 
    when (new.nombre_notations <> 0 && 
    users_turnover.turnover = 0) then (new.note_communication + 
    new.note_documentation + new.note_qualite + 
    new.note_timing)/4
    else (((new.note_communication + new.note_documentation + 
    new.note_qualite + new.note_timing)/4) * 
    users_turnover.turnover) end as critere

    from users, users_turnover, users_id_nickname, 
    optim_users_pages, new where 
    users.nickname=users_id_nickname.nickname and 
    users_id_nickname.id=users_turnover.id 
    and optim_users_pages.id=users_id_nickname.id and 
    users.nickname=new.nickname order by $tri ";
 
  $res=mysql_query($query);

  while ($row=mysql_fetch_row($res)) {
    $user=new CUser($row[0]);
    if ((stristr(strip_tags($user->etudes), $keyword)) ||
      (stristr(strip_tags($user->exp_professionnelle), $keyword)) ||
      (stristr(strip_tags($user->connaissances_info), $keyword))) {
        echo "<tr><td><center>";
        echo "<a href='".$row[3]."'>".$user->nickname."</a></center></td><td> </td>";
        echo "<td><center>".get_date($user->date_inscription)."</center></td><td> </td>";
        echo "<td><center>".count(str_to_vect($row[2]))."</center></td><td> </td>";
        echo "<td><center>".$row[1]."€</center></td><td> </td>";
        if ($row[4]!=0) {
          $nb = substr($row[5], 0, 4);
          echo "<td><table cellpadding=\"0\" cellpadding=\"0\"  width=\"50%\"><tr>";
          for ($i = 1; $i <= 10; $i++) {
            if ($i <= $nb) echo "<td><img src=\"images_news/bar_" . $i . ".gif\" border=\"0\"  width=\"16px\" height=\"6px\"></td>";
            else echo "<td><img src=\"images_news/bar_no.gif\" border=\"0\" width=\"16px\" height=\"6px\"></td>";
          }
          echo "<td>(".substr($row[5], 0, 4)."/10)</td>";
          echo "</tr></table></td>";
        }
        else {
          echo "<td><img src=\"images_news/bar_no.gif\" border=\"0\" width=\"16px\" height=\"6px\"> ?</td>";
        }
        echo "</tr>";
      }
  }
  echo "</table>";
  mysql_close();
?>


J'ai un peu coupé les parties "html" inutiles (et fausses...), le code qui est intéressant est au niveau du php et du mysql.
Il faut savoir que la classe CUser reprend une bonne partie voire tous les éléments sélectionnés précédemment dans la requête...
La-dite requête prend environ 13s à elle seule.
Je vous laisse imaginer ensuite la boucle while() qui suit.... Sur plus de 3'000 résultats, c'est toujours bon ;)

Sans compter les injections SQL possibles...

Encore un code foireux que j'ai joyeusement taillé à coups de hache. D'autant que, sur le même site, j'avais déjà prévu une table pour les moteurs de recherche, permettant, via des index FullText, de rendre les recherches plus efficaces (même si encore lourdes)...

Happy coding!

Lire plus