Ce qu'il ne faut pas faire

mardi 31 janvier 2012 à 01:45

Voici un exemple de ce qu'il ne faut surtout jamais faire et que... j'ai pourtant vu dans les codes sources d'une des société dans lesquelles j'ai travaillé. Preuve que sous-traité le boulot est loin d'être une bonne idée (et je ne parle pas qu'au niveau financier).

Voici ce que doit faire cette fonction : il s'agit d'un outil d'emailing, on a donc une table contenant des adresses mails et des données concernant les utilisateurs. Afin de segmenter les mailings, il existe une table contenant des morceaux de requêtes MySQL : tout ce qui ce trouve après "WHERE 1=1 ". Pour un segment donné, on souhaite savoir combien de mails on va envoyé. Il s'agit donc d'une requête en AJAX (qui doit donc s'exécuter rapidement).

En solution à ce problème, voici la fonction que j'ai vu :

function getCountUser ($segmentId) {
    // on sélectionne le segment
    $SQL = 'select segment_include, segment_exclude FROM segment WHERE segment_id='. $iSegmentId;
    $query = mysql_query($SQL);
    $segment = mysql_fetch_assoc($query);
   
    $segmentInclude = $segment['segment_include'];
    $segmentExclude = $segment['segment_exclude'];
   
    // creation d'une table contenant les adresses mails
    $sql = 'CREATE TABLE segment_'. $segmentId .'(mail VARCHAR(255))';
    mysql_query($SQL);
   
    // insertion des utilisateurs
    $sql = 'SELECT mail FROM users WHERE 1=1 '. $segmentInclude;   
    $query = mysql_query($SQL);
   
    while ( $data=mysql_fetch_assoc($query) ) {
        $sql = 'INSERT INTO segment_'. $segmentId .' (mail) VALUES ("'. $data['mail'] .'")';
        mysql_query($SQL);
    }
   
    // suppression des utilisateurs
    $sql = 'SELECT mail FROM users WHERE 1=1 '. $segmentInclude;   
    $query = mysql_query($SQL);
   
    while ( $data=mysql_fetch_assoc($query) ) {
        $sql = 'DELETE FROM segment_'. $segmentId .' WHERE mail="'. $data['mail'] .'"';
        mysql_query($SQL);
    }
   
    // recuperation du count
    $sql = 'SELECT count(mail) AS cnt FROM segment_'. $segmentId;
    $query = mysql_query($SQL);
   
    $sql = 'DROP TABLE IF EXISTS segment_'. $segmentId;
    $query = mysql_query($SQL);
   
    $count = mysql_fetch_assoc($query);
    return $count['cnt'];
}

Et voila le genre de fonction qui permet de mettre un sale coup a un projet. Dans ces quelques lignes, la liste des erreurs est incalculable.

En bref...

Dernier article

La dictature sur facebook

Cette semaine, l'actu, c'est Facebook qui trébuche. Le réseau social vient en effet de supprimer le droit de vote de ses membres. On a aussi GoogleNow sur Chrome, des nouvelles pas très réjouissantes de l'UIT, du piratage, l'étoile de la mort de Star Wars et une évasion échoué.

Ressources externes