IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

conseil pour les initialisations


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    710
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 710
    Par défaut conseil pour les initialisations
    Hello,

    J'ai une application qui utilise beaucoup de variable et je me suis décidé à virer toutes les alertes de type Notice afin de disposer d'une appli proprement développée. Par contre l'initialisation des variables, c'est juste une horreur.

    à tous les endroits où je faisais des tests sur une variable stockée en session, je suis maintenant obligé de :

    1. faire un test sur l'initialisation de ma variable stockée en session
    2. définir une variable temporaire avec le contenu de ma variable stockée en session dont j'ai déterminé précédemment si elle existait ou non
    3. faire mon test

    donc, l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SESSION['variable'] == 1){...}
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $varTmp1 = (isset($_SESSION['variable'])) ? $_SESSION['variable'] : '';
    if ($varTmp1 == 1){...}


    de même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($_SESSION[$_SESSION['variable']] == 'truc'){...}
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $varTmp1 = (isset($_SESSION['variable'])) ? $_SESSION['variable'] : '';
    $varTmp2 = '';
    if ($varTmp1 != '') {
            $varTmp2 = (isset($_SESSION[$varTmp1])) ? $_SESSION[$varTmp1] : '';
    }


    Je trouve cela très fastidieux (surtout dans le second cas) ! Alors certes, je dois rattraper mon manque de rigueur, mais n'y a-t-il pas un moyen plus simple de programmer proprement sans se noyer dans les variable temporaires et la multiplication des tests ?

    Question subsidiare : est-ce que la syntaxe suivante est correcte ? Le fait de ne pas encadrer isset() par des parenthèse est-il gênant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $varTmp1 = isset($_SESSION['variable']) ? $_SESSION['variable'] : '';
    Merci de vos conseils !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il suffit de mettre dans un fichier initialisation_sessions.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php session_start();
    $_SESSION['variable1'] = (isset($_SESSION['variable1'])) ? $_SESSION['variable1'] : 'valeur_par_defaut1';
    $_SESSION['variable2'] = (isset($_SESSION['variable2'])) ? $_SESSION['variable2'] : 'valeur_par_defaut2';
    [...]
    ?>
    En de l'inclure en haut de chaque fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require_once('initialisation_sessions.php'); ?>
    Question subsidiaire : oui, c'est bon.

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Je ne partage pas tout à fait cette approche là, raison de plus en se qui concerne les sessions, ce que contient $_SESSION.

    $_SESSION tout comme $_GET, $_POST et $_COOKIE, la non existence d'un élément fait totalement partie de la logique d'un programma ou sous-programme.

    Définir des valeurs par défaut pour éviter que Php retourne des erreurs ou encore faire l'économie sur leur existence est pour ma part une erreur.


    C'est pas loin d'être la même chose du coté de la Bdd, c'est à dire de définir des valeurs par défaut à tord et de travers.
    Une valeur NULL est une valeur à part entière, les jointures de tables et les résultats peuvent fortement varier selon la valeur ou la non existence d'une données.

    Remplacer une valeur NULL par une valeur vide n'est pas du tout la même chose.
    Pour Php c'est pareil, une valeur NULL (qui n'existe pas) n'est pas l'équivalent d'une valeur vide.


    Au lieu d'initialiser une tonne de données de session par des valeurs par défaut, il vaut mieux prévoir de détruire certaines lorsqu'elles ne sont plus utiles.
    Ensuite on ne fait que vérifier les variables de session qui sont nécessaires uniquement dans les pages qui le demandent, pas une de plus ni une de moins.

    Si une variable de session n'existe pas alors qu'elle doit l'être, alors c'est une erreur du coup il faut gérer l'erreur, et non pas l'éviter.
    La logique n'est pas du tout la même.

    La non existence d'une variable de session alors qu'elle doit l'être peut être un signe comme quoi sont code comporte une erreur quelque part.
    Si on l'initialise d'office on perd cette info, ça peut rendre impossible de débogage de son code/site Web.
    Pire, rien ne dit qu'une destruction d'une variable de session soit liée à une attaque de son site (un pirate).
    Là aussi on n'en saura toujours rien.


    A coté de ça, si à chaque page il y a une tonne de variables de sessions à vérifier, c'est qu'il y a peut être un problème dans la manière de stocker les données.


    Pour ma part, ceci n'est pas à faire, du moins pas systématiquement.
    Certaines demandent effectivement d'avoir une valeur par défaut et valide, d'autres non, voire même surtout pas.


    Tout ceci est un avis personnel.
    Faut voir.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je suis tout à fait d'accord avec RunCodePhp.

    Je n'ai fait que répondre à la problématique d'"initialisation".

    Mais en effet, tout dépend de l'utilisation qui en est faite !
    C'est donc du cas par cas, et une réponse "généraliste" n'est pas forcément la meilleure.

    Pour info :
    Perso, j'utilise grosso modo ce système d'"initialisation" pour des formulaires de recherche multi-critères.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par jreaux62
    Je n'ai fait que répondre à la problématique d'"initialisation".
    Pas de mal entendu.

    Un avis est demandé, je donne le mien.
    Je vise personne ni même le code de qui que se soit.

    C'est l'approche, la démarche ou je n'adhère pas, en tout cas, à ne pas en faire une généralité.
    Ceci l'est d'autant plus sur des variables de sessions.


    Pour info :
    Perso, j'utilise grosso modo ce système d'"initialisation" pour des formulaires de recherche multi-critères.
    Personnellement je ne le fait pas, je ne crée pas de variables de sessions tant que le formulaire n'a pas été validé, les données vérifiée et conforment.

    La raison est simple, c'est que rien ne dit que l'utilisateur va valider le formulaire.
    S'il ne valide pas on se retrouve avec des variables de sessions qui non seulement ne sont pas utiles, mais en plus avec des valeurs vides, donc inexploitables dans tous les cas.
    Puis à la longue au peu se retrouver avec des tonnes de données inutiles.
    A quoi bon ?

    De mon coté (grosso modo aussi), j'initialise des variables (ça peu être un tableau, Objet, peu importe), avec des valeurs par défaut (vide ou autre) au départ, et comme on le sait elles n'existeront plus à la fin du script.
    Puis c'est après où je vérifie tour à tour si les variables correspondantes existent, mais aussi si leur valeurs sont conforment.
    Si les variables de sessions sont conforment alors je réinitialise les variables que j'exploite dans la page (les vues).

    Grosso modo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    // PARTIE TRAITEMENTS
    session_start()
     
    $nom = '';
    $prenom = '';
     
     
    if (Session::valide('nom')) {
        $nom = Session::get('nom');
    }
     
    if (Session::valide('prenom')) {
        $prenom = Session::get('prenom');
    }
     
    // PARTIE INTERFACE
    <html>
        ... etc ...
     
    <body>
        <p>Nom : <?php echo $nom; ?></p>
        <p>Prénom : <?php echo $prenom; ?></p>
    </body>
    </html>

Discussions similaires

  1. un conseil pour les futurs demissionnaires
    Par _vince_ dans le forum Démission
    Réponses: 12
    Dernier message: 24/04/2008, 11h16
  2. Réponses: 0
    Dernier message: 24/01/2008, 10h15
  3. Petit conseil pour les identifiants et sequenceur
    Par kokumbo dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/11/2006, 15h32
  4. [CSS] Petits conseils pour les redimensionnements
    Par GLDavid dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 07/08/2006, 18h44
  5. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 05h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo