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 Perl Discussion :

Tester l'existence d'une variable


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Tester l'existence d'une variable
    Bonjour,
    Je suis actuellemeent en train de developper un agenda en perl.
    Je rencontre un petit souci.
    Je recupere mes variables suite à une soumission d'un bouton submit.
    Mais je ne connais pas d'avance le nombre de variable que je vais recuperer.
    Je souhaitais savoir s'il existait un test du genre Isset() pour savoir si une variable existe?!
    Merci beaucoup. cela m'aiderait enormement.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $variable = param ("toto");
    if ($variable){
    ...........variable definie........
    }else{
    pas definie}

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Pas tout à fait parce que là tu testes la valeur de vérité de la variable : elle est souvent vraie quand elle existe mais ce n'est pas toujours le cas, imagine par exemple qu'elle vale '0'...
    Pour tester l'existence d'une variable, il faut utiliser la fonction defined() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $variable = param ("toto");
    if (defined($variable)){
      ...........variable definie........
    }else{
      pas definie
    }
    Mais peut-être utiliser simplement les fonctionnalités du module CGI serait-il plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FETCHING THE NAMES OF ALL THE PARAMETERS PASSED TO YOUR SCRIPT:
    
          @names = $query->param If the script was invoked with a parameter
     list (e.g. "name1=value1&name2=value2&name3=value3"), the param()
     method will return the parameter names as a list.  If the script was invoked
     as an <ISINDEX> script and contains a string without ampersands (e.g.
     "value1+value2+value3") , there will be a single parameter named
     "keywords" containing the "+"-delimited keywords.
     NOTE: As of version 1.5, the array of parameter names returned will be in
     the same order as they were submitted by the browser. Usually this order is
     the same as the order in which the  parameters are defined in the form
     (however, this isn't part of the spec, and so isn't guaranteed).
    Par ailleurs si par 'unset' tu veux dire que le paramètre est passé dans la requête mais sans valeur associée (comme param1 dans 'param1=&param2=3'), alors tu dois plutôt tester si le résultat est une string de longueur nulle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $variable = param ("toto");
    if ($variable eq ''){
      ...........variable definie........
    }else{
      pas definie
    }
    --
    Jedaï

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    sorry, j'avais oublié le defined

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    ARF, en fait le test sur l'existence de la variable n'est pas possible.
    En fait, j'ai une page qui génère selon la demande des listes deroulantes permettant d'ajouter un participant (enregistré dans la base) à une réunion.
    Le souci ne vient pas de là, je crée selon le nombre de participant, le nombre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name='select_part.$cpt'>
    dans la formulaire.

    Le souci est que quand je recupere la variable ca ne peux pas fonctionner puisque je ne connais pas le chiffre qui termine le nom de la variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $participant."$cpt" = $html->param("select_part.$cpt");
    je crois qu'une autre méthode s'impose mais je ne sais pas quoi !

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    si tu ne connais pas les noms de tes parametres à la base, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my     @names = $query->param;
    et faire un test sur l'existence de @names.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre aide! Je pensais que pour l'erreur d'affichage le souci venait de la récupération de variable. Mais en fait (je prefere rappeler que je suis novice en perl) cela venait du nommage de mon select. donc pour ceux qui aurait besoin un jour voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $nom_select = "select_part".$cpt;
             print" <select name=".$nom_select.">";
    ->pour afficher selon le nombre de participant voulu, les listes déroulantes.

    et la récupération dans l'autre page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $html = new CGI;
    my $select = "select_part".$compt;
    my $part = $html->param("$select");
    C'etait tout bête. Qu'elle idiote

    Encore Merci pour votre disponibilité!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tester l'existence d'une variable
    Par Ajite dans le forum ASP.NET
    Réponses: 3
    Dernier message: 10/07/2007, 12h03
  2. Réponses: 2
    Dernier message: 08/09/2006, 10h07
  3. [débutant]Tester l'existance d'une variable
    Par Death83 dans le forum Langage
    Réponses: 7
    Dernier message: 19/08/2006, 15h37
  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