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 :

[PHP-JS] Comment mieux tester l'existence de plusieurs variables


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut [PHP-JS] Comment mieux tester l'existence de plusieurs variables
    Bonjour les amis(es)

    Depuis PHP4, il y a des erreurs lorsqu'une varaiable n'est pas testée avant son utilisation. Modifier le php.ini pour masquer les erreurs n'étant pas conseillé, nous sommes obligés de faire à chaque fois ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    if(isset($_POST['nom'])){
    $nom = $_POST['nom'];
    }
    ?>
    Mais qu'en est-il si vous avez plus de 20 variables à traiter?
    Il y a pas un risque d'augmenter considérablement le temps d'exécution en posant tous ces ifs?

    Que fera un bon développeur?

    D'avance je vous remercie

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Un formulaire comportant 20 champs commence à être conséquent à mon gout.
    Au dela un bon développeur ira consulter son ergonome (ou des cours faute de mieux) pour trouver une solution.

    Et 20 conditions à traiter en php, à moins d'avoir un serveur datant de l'avant guerre c'est très rapide (plus que le temps de latence de la connexion je suis sur )

    Un bon développeur pour moi s'assure qu'il n'y a pas d'erreur avant tout, et privilégie robustesse à rapidité (sans toutefois négliger ce dernier point).

  3. #3
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Merci beaucoup.

    J'apprend bcp avec toi. Donc en conclusion, il y a pas moyen de faire autrement. Je suis donc sur la bonne voie. Parce que c'est comme ça que je fais. Je voudrais savoir s'il y avait mieux.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Citation Envoyé par Alexandrebox
    Bonjour les amis(es)

    Depuis PHP4, il y a des erreurs lorsqu'une varaiable n'est pas testée avant son utilisation. Modifier le php.ini pour masquer les erreurs n'étant pas conseillé, nous sommes obligés de faire à chaque fois ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    if(isset($_POST['nom'])){
    $nom = $_POST['nom'];
    }
    ?>
    Mais qu'en est-il si vous avez plus de 20 variables à traiter?
    Il y a pas un risque d'augmenter considérablement le temps d'exécution en posant tous ces ifs?

    Que fera un bon développeur?

    D'avance je vous remercie
    Je rajoute juste une toute petite chose...
    Mieu vaut initialiser tes variables avant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $nom = "";
    if(isset($_POST['nom'])){
    $nom = $_POST['nom'];
    }
    ?>
    Après perso je l'écrit comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nom = isset($_POST['nom']) ? $_POST['nom'] : "";
    Comme cela si j'en ai une vingtaine à faire c'est relativement rapide. Mais bon sa ne change pas le fait que c'est vraiment très fastidieux ces déclarations.

    bye

  5. #5
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut
    initialiser les variables avant?!
    Ben non, sinon ton isset ne sert à rien! Il renverra toujours true, puisqu'il sert justement à vérifier qu'une variable est définie ou non.

  6. #6
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Mettez vous d'accord les mecs.

    Là je suis embrouillé. MDR

    En tout cas merci pour vos efforts

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    L'exemple de kaymak peut s'avérer dangereux, en particulier si le register_globals est à on dans le php.ini

    Je plussoie haltabush

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    initialiser les variables avant?!
    Ben non, sinon ton isset ne sert à rien! Il renverra toujours true, puisqu'il sert justement à vérifier qu'une variable est définie ou non.
    Ok donc, si le isset ne passe pas que fais tu ?
    Tu executes ton script avec des variables qui n'existent pas ?
    Dans ce cas à quoi sert il de vérifier que $_post[une clef] existe, si la variable qui recoit la donnée n'est pas systèmatiquement initialisée ?
    C'est un peu comme piss** dans un violon si tu me pardonnes l'expression.

    Fin moi je dis sa, je dit rien....

    L'exemple de kaymak peut s'avérer dangereux, en particulier si le register_globals est à on dans le php.ini
    Dangereux ?? J'aimerais bien voir comment.

    bye

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Si le isset ne passe pas c'est que le formulaire n'a pas été envoyé (ou mal) et donc que tu n'as pas à effectuer le traitement. Tu passes donc ton chemin.
    Typiquement si tu postes sur la meme page je ne vois pas vraiment d'autre moyen de faire la différence (ou bien si : demander au client d'autoriser l'activeX permettant d'écrire avec du javascript sur le poste client, écrire un cookie quand le formulaire est posté et tester ensuite en php )

    Le danger ? avec un register_globals on $_POST['toto'] équivaut à $toto si je ne m'abuse, si tu l'initialises avant ta condition d'existence sera donc systématiquement remplie

  10. #10
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Ils ont raison kaymak

    Tu ne peux pas déclarer une variable et ensuite demander si elle existe.
    Bien sûr qu'elle existe puisque tu viens de la déclarer.

    Merci pour ta participation. Merci à tous

  11. #11
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Ce qu'il faut par contre faire au cas où ta variable n'existerait pas ce serait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    <?php
    if(isset($_POST['nom'])){
    $nom = $_POST['nom'];
    }
    else{
    $nom = "";
    }
    ?>
    Comme ça si plus loin tu essaie d'utiliser la variable $nom, tu n'auras pas d'erreur au cas où la variable $nom ne serait pas envoyée par $_POST

  12. #12
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Citation Envoyé par Alexandrebox
    Ils ont raison kaymak

    Tu ne peux pas déclarer une variable et ensuite demander si elle existe.
    Bien sûr qu'elle existe puisque tu viens de la déclarer.

    Merci pour ta participation. Merci à tous
    Je ne vois pas ou il teste une variable déclaré ?

    Il faut savoir que $_POST['var'] n'est pas égal à $var et qu'il faut perdre l'habitude du register_global (je rappel au passage que le register_global n'existera plus du tout dans PHP 6) Et que t'en qu'a prendre les habitudes autant les prendres maintenant.

    Et oui avec PHP 6, plus de register_global, plus de magic_quote, haaa enfin les developpeurs devrons se forcer à coder proprement

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Oui je suis entièrement d'accord pour le register_global mais une erreur classique c'est de se dire "bah maintenant personne le fait", de meme qu'effectuer ses controles seulement en javascript et pas en php

  14. #14
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Citation Envoyé par ratapapa
    Oui je suis entièrement d'accord pour le register_global mais une erreur classique c'est de se dire "bah maintenant personne le fait", de meme qu'effectuer ses controles seulement en javascript et pas en php
    Et comme ca si le javascript est désactivé t'es bai*** sans compté les problèmes de sécurité si la suite de son script dépend de l'intégrité des valeures

  15. #15
    Membre éclairé Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Je ne vois pas ou il teste une variable déclaré ?
    Lorsqu'il fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $nom ="";
    if(isset($_POST['nom'])){
    $nom = $_POST['nom'];
    }
    ?>
    Il teste la variable $nom après l'avoir déclarer

  16. #16
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Heu ha bon ? nan franchement là je vois pas xD où tu vois ca ? je vois qu'une seul comparaison et c'est pas sur $nom...

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Et comme ca si le javascript est désactivé t'es bai*** sans compté les problèmes de sécurité si la suite de son script dépend de l'intégrité des valeures
    C'est ce que je dis pour moi partir du principe que register_global est désactivé c'est comme ne faire les controles qu'en javascript : c'est ne pas prévoir que le cas peut se produire

  18. #18
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Ok donc on est d'accord xD

    Mais dans son code il utilise $_POST['var'] et non $var donc il suppose que register_global est à off et modifier $var ne modifie pas $_POST['var'] (je suppose)

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    C'est vrai j'ai eu tord......







    ... Que d'avoir voulu lutter devant tant d'opiniatrete à continuer d'utiliser de si mauvaises méthodes.

    Sur ce,

    bye

  20. #20
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Bah non moi je te défend au contraire

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/09/2006, 10h07
  2. [débutant]Tester l'existance d'une variable
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 19/08/2006, 15h37
  3. Tester l'existence d'une variable
    Par rukiaa dans le forum Langage
    Réponses: 6
    Dernier message: 14/05/2006, 23h11
  4. Tester l'existence d'une variable?
    Par Death83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/03/2006, 21h53
  5. Réponses: 3
    Dernier message: 19/08/2005, 14h24

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