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 :

Probléme dans le code


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut Probléme dans le code
    Bonsoir, je debute en perl et je suis tombé sur un probléme, (je n'arrive pas trop bien l'expliquer), en gros c'est pour prendre les données d'un tableau...

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    #!usr/perl/bin
    use warnings;
    use strict;
     
    my $pseudo;
    my $passe;
    my $a;
    my $c;
    my $b;
    my %tab;
    my $choix;
    print "Acceder a notre forum\n";
    print "\nSe connecter:/connect\n";
    print "Nouveau compte:/creation\n";
    print "Informations oubliees: /oublier\n";
    print "Quitter:/exit\n";
    print "\n\n";
    for(;;)
    {
    	print "Votre choix:";
    	$choix=<STDIN>;
    	chomp($choix);
     
    	if ($choix =~ /creation/)
    	{
    		for(;;)
    		{
     
    			print "Pseudo:";
    			$a=<STDIN>;
    			chomp($a);
    			last if $a eq "/stop";
    			print "Passe:";
    			$b=<STDIN>;
    			chomp($b);
    			print "Email:";
    			$c=<STDIN>;
    			chomp($c);
    			$tab{$a}=$b;
    			print "Les informations ont ete enregistrees\n";
    			print "$_ : $tab{$_}\n\n" for keys %tab;
     
    		}
    	}
     
    ####################################################
    	elsif ($choix =~ /connect/)
    	{
     
    		print "Pseudo:";
    		$pseudo=<STDIN>;
    		chomp($pseudo);
    		print "Passe:";
    		$passe=<STDIN>;
    		chomp($passe);
    		if (($pseudo eq $a) && ($passe eq $b))
    		{
    			print "Connection avec succes\n";
    		}
    	}
    #############################################################
    	elsif ($choix =~ /oublier/)
    	{
    		open(INFORM,"inform.txt") || die("Echec ouverture fichier (inform.txt)\n");
    		while(<INFORM>)		
    		{
    			print "$_\n";
    		}
    		close(INFORM);
    	}
     
     
     
    	last if $choix =~ /exit/;
    }
    Voila, j'ai encadré le code qui me pose probleme, c'est au niveau de l'identification:
    quand j'avais choisit l'option /creation pour mettre un mot de passe et un pseudo ensuite je choisit l'option /connect et j'entre les données que j'avais entré mais aucune reponse ... (désolé je n'arrive pas trop a m'exprimer)

    Merci de votre aide.

  2. #2
    Expert confirmé
    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
    Par défaut
    Ton code est faux, la valeur de $a dans cette portion du code est soit undef si tu n'as pas effectué de création avant, soit ".*stop.*" vu qu'on a dû sortir de la boucle de création avant. De toute façon ce code ne te permettrait jamais que de gérer un seul utilisateur.
    Ce que tu devrais faire c'est :
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	elsif ($choix =~ /connect/)
    	{
     
    		print "Pseudo:";
    		$pseudo=<STDIN>;
    		chomp($pseudo);
    		print "Passe:";
    		$passe=<STDIN>;
    		chomp($passe);
    		if (exists $tab{$pseudo} and $passe eq $tab{$pseudo})
    		{
    			print "Connection avec succes\n";
    		}
    	}

    Par ailleurs, il est considéré comme de mauvais style de déclarer l'ensemble de ses variables au début de son script, il vaut mieux les déclarer dans la portée où on les utilise vraiment :
    Code Perl : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #!usr/perl/bin
    use strict; use warnings;
     
    my %users;
    my %commands = (
      connect => \&connect,
      mkusers => \&mkusers,
      forgotten => \&forgotten,
      exit => \&leave,
    );
     
    my $help_message = <<EOHM;
    Acceder a notre forum, commandes disponibles :
    * Se connecter : connect
    * Créer de nouveaux comptes : mkusers
    * Informations oubliees : forgotten
    * Quitter: exit
     
    EOHM
     
    print $help_message;
    for(;;) {
      print "> ";
      my $choice = <>;
      chomp($choice);
     
      if( exists $commands{$choice} ) {
        $commands{$choice}->();
      } else {
        print $help_message;
      }
    }
     
     
    sub mkusers {
      print "Utilisez 'STOP' comme pseudo pour arrêter de créer des utilisateurs.\n";
      for(;;) {
        print "Pseudo : ";
        my $login = <>;
        chomp($login);
        return if $login =~ m/^STOP$/i;
     
        print "Mot de passe : ";
        my $pwd = <>;
        print "Email : ";
        my $email = <>;
        chomp( $email, $pwd );
     
        $users{$login} = [ $pwd, $email ];
        print "Les informations ont ete enregistrees\n";
        print "$_ : $users{$_}[0]\n" for keys %users;
      }
    }
     
     
    sub connect {
      print "Pseudo : ";
      my $login = <>;
      print "Mot de passe : ";
      my $pwd = <>;
      chomp( $login, $pwd );
     
      if (exists $users{$login} and $pwd eq $users{$login}[0]) {
        print "Connection avec succes\n";
      } else {
        print "Echec de la connexion\n";
      }
    }
     
     
    sub forgotten {
      if( open my($forgot), '<', "inform.txt" ) {
        while(<$forgot>) {
          print;
        }
        close $forgot;    
      }
      else {
        warn "Echec ouverture fichier (inform.txt) : $!\n";
      }
    }
     
    sub leave {
      exit(0);
    }
     
    __END__

    Version légèrement améliorée de ton code, permettant une modularité et une mise à jour bien plus aisée...


    --
    Jedaï

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    C'est super merci beaucoup je vais étudier mes erreurs, merci
    A bientot

Discussions similaires

  1. Problème dans un code delphi dans C++Builder
    Par gandf dans le forum C++Builder
    Réponses: 8
    Dernier message: 23/03/2007, 23h12
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Problème dans le code?
    Par Arch Enemy dans le forum C
    Réponses: 5
    Dernier message: 15/08/2006, 11h05
  4. [MySQL] Un problème dans le code PHP
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/07/2006, 11h06
  5. Quel est le problème dans ce code ?
    Par Luther13 dans le forum C
    Réponses: 12
    Dernier message: 26/08/2003, 16h09

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