• [^] # Re: Et la qualité ?

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Caranille 3.5 - Éditeur de MMORPG en PHP. Évalué à 3.

    MVC n'est pas une obligation. D'ailleurs, c'est impossible d'appliquer le pattern MVC dans le web de manière intégrale. Mais je suis d'accord pour dire que garder à l'esprit de séparer les responsabilités reste une bonne idée.

    La manière de fabriquer les requêtes SQL est une horreur. Venir expliquer que c'est une surcouche de surcouche est une mauvaise justification. mysqli_real_escape_string est un ami. Mais ce n'est pas le seul problème : htmlentities n'est jamais employé pour échapper les données intégrées au HTML ; aucune protection contre les CSRF n'est mise en place ; c'est codé en français ; un zip est fournit plutôt qu'un tarball (mais le développeur se prévaut d'être un Linux power user, va comprendre :D) ; où est le repo ? ; usage idiot de addslashes pour fournir une pseudo-sécurité (c'est encore pire que de ne rien faire) ; stockage des mots de passe en clair ; avec possibilité de les récupérer via une SQL injection ; le style employé est confus entraînant une complexité inutile [1] ; les commentaires qui paraphrase le code sont inutiles [2] ; utiliser des loops, c'est bien [3] ; pourquoi htmlspecialchars est parfois utilisé avant insertion en BDD ? ; beaucoup de code dupliqué ; pourquoi tous les scripts s'appellent index.php ?

    Bref, tu as du pain sur la planche :) Personnellement je ne t'encourage pas à utiliser de Framework PHP, ils sont tous pourris ou lourds. Rationaliser le code (créer une routine de routage/dispatch, ségréguer le code relatif à la logique métier dans une unité logique de code, etc) est une première étape.

    Utilises-tu Git pour gérer ton développement ?

    [1]
    php
    if($success)
    if($otherSuccess)
    doSomething;
    else
    echo 'message à l'utilisateur';
    else
    echo 'message à l'utilisateur';

    Je préfère, pour des raison de clarté, écrire mon code ainsi :
    ```php
    if(!$success)
    {
    echo 'message à l'utilisateur';
    return;
    }

    if(!$otherSuccess)
    {
    echo 'message à l'utilisateur';
    return;
    }

    doSomething;
    ```

    [2]
    php
    //Si l'utilisateur décide de quitter la ville
    if (isset($_POST['quitter_ville']))

    [3]
    php
    {
    $_SESSION['id'] = $donnees_compte['id_compte'];
    $_SESSION['id_guilde'] = $donnees_compte['id_guilde_compte'];
    $_SESSION['pseudo'] = $donnees_compte['pseudo_compte'];
    $_SESSION['mdp'] = $donnees_compte['mdp_compte'];
    $_SESSION['mail'] = $donnees_compte['mail_compte'];
    $_SESSION['force'] = $donnees_compte['force_compte'];
    $_SESSION['magie'] = $donnees_compte['magie_compte'];
    $_SESSION['defense'] = $donnees_compte['defense_compte'];
    $_SESSION['pv'] = $donnees_compte['pv_restant_compte'];
    $_SESSION['pv_max'] = $donnees_compte['pv_max_compte'];
    $_SESSION['pm'] = $donnees_compte['pm_restant_compte'];
    $_SESSION['pm_max'] = $donnees_compte['pm_max_compte'];
    $_SESSION['pc'] = $donnees_compte['pc_compte'];
    $_SESSION['po'] = $donnees_compte['po_compte'];
    $_SESSION['notoriete'] = $donnees_compte['notoriete_compte'];
    $_SESSION['chapitre'] = $donnees_compte['chapitre_compte'];
    $_SESSION['mission'] = $donnees_compte['mission_compte'];
    $_SESSION['status'] = $donnees_compte['status_compte'];

    deviens :
    php
    foreach(array('id', 'id_guilde'
    , 'pseudo', 'mdp', 'mail', 'force', 'magie', 'defense'
    , 'pv', 'pv_max', 'pm', 'pm_max', 'pc', 'po'
    , 'notoriete', 'chapitre', 'mission', 'status'
    ) as $param_name)
    $_SESSION[$param_name] = $donnees_compte[$param_name];

    On pourrait aussi utiliser array_merge, mais j'ai comme dans l'idée que c'est une mauvaise idée que de polluer le scope de la session.

    DISCLAIMER: je hais Markdown quand ça ne semble pas marcher, aussi, veuillez me pardonner pour ce message très mal formaté :D