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 d'ajout d'infos dans un fichier


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Problème d'ajout d'infos dans un fichier
    Alors je vais essayer d'être clair :

    j'ai la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub insererFichier{
      # fonction insèrant $login et $mdp dans le fichier
      # $nom_fichier sous la forme ::$login:$mdp		 
     
      # on récupère les paramètres
      my ($nomFichier,$login,$mdp) = @_;	
     
      open(FILE,">>".$nomFichier); 	
     
      print FILE "::".$login.":".$mdp;   
     
      close($nomFichier);
    }
    Au lieu de mettre à jour les données contenues dans le fichier $nomFichier, la fonction me crée un nouveau fichier. Ce fichier est nommé avec le contenu du fichier $nomFichier.

    Un petit exemple pour être plus clair :

    $nomFichier contient toto:titi::tata:tutu

    la fonction 'print FILE "jojo:juju::";' me crée un fichier nommé
    'toto:titi::tata:tutu' contenant 'jojo:juju::'

    Voila jespère avoir été assez clair. Je vous remercie d'avance ^^

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Au cas ou j'ajoute le code complet :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    #!/usr/bin/perl					 
     
    ##########################################################
    ###### fonctions nécessaires pour le fonctionnement ######
    ########### du module de gestion des fichiers ############
    ##########################################################	 
     
    sub creerFichier{
      # fonction créant un fichier de nom
      # $nom_fichier	  	   
     
      # on récupère les paramètres
      my ($nomFichier) = @_;	
     
      # si le fichier n'existe pas alors on le crée 
      if (! -e $nomFichier){
     
        # on crée le fichier vide
        open(FILE,">".$nomFichier);	  
     
        # on ferme le fichier
        close ($nomFichier);   
      }
    } 	 
     
    sub compteExistFichier{
      # fonction renvoyant 1 si le login passé
      # en paramètre existe 0 sinon	
     
      # on récupère les paramètres
      ($nomFichier,$login) = @_;	
     
      # on suppose que le login n'existe pas
      $exist = 0;	
     
      # on récupère le fichier
      $fichier = &importerFichier($nomFichier);		
     
      @tab = split(/::/, $fichier);    		  
     
      # on le parcour et on compare chaque login à celui
      # passé en paramètre					   
      foreach $ligne (@tab){	  
        @temp = split(/:/, $ligne);  
     
    	# on récupère le login du fichier et on le compare à
    	# celui passé en paramètre
        if (@temp[0] eq $login){	
    	 $exist = 1; 
    	} 
      }
     
      return $exist; 
    }			
     
    sub importerFichier{
      # fonction ouvrant un fichier de nom
      # $nom_fichier et renvoyant le contenu du fichier
      # sous forme d'une chaine
     
      # on récupère les paramètres
      my ($nomFichier) = @_;
     
      # on ouvre le fichier
      open(FILE,"<".$nomFichier); 	
     
      # on crée le tableau contenant les login et mot de passe	  
      $fichier = ""; 
     
      while (<FILE>) {	   
        # on récupère la ligne du fichier
        $ligne = $_;	  
    	$fichier .= $ligne;  
      } 
     
      # on ferme le fichier
      close ($nomFichier);  	
     
      # on renvoie le tableau obtenu
      return $fichier;
    }						
     
    sub insererFichier{
      # fonction insèrant $login et $mdp dans le fichier
      # $nom_fichier sous la forme ::$login:$mdp		 
     
      # on récupère les paramètres
      my ($fichier,$login,$mdp) = @_;	
     
      open(FILE,">>".$fichier); 	
     
      print FILE "::$login:$mdp";   
     
      close($fichier);
    } 	   
     
    ##########################################################
    ##########################################################
     
    print "Content-Type: text/html\n\n";	
     
    $fichier = "mdp_clients/clic.mdp.dat"; 	 
     
    &insererFichier($fichier,"albert","22");

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Bonjour,

    3 choses me choquent au premier coup d'oeil dans ton script :

    - le non emploi de la pragma "strict", voir lien dans ma signature pour + de détails.
    - le non emploi, soit de la pragma "warnings", soit du flag -w dans ton shebang. Là aussi, voir lien dans ma signature.
    - lorsqu'on ouvre un canal (comme par exemple FILE dans ton script), c'est ce même canal qu'on ferme ensuite via la fonction close( ). Je te suggère donc de revoir tous tes close($nomFichier) et de les remplacer par close(FILE).

    Lorsque tu auras ajouté les 2 pragmas citées plus haut, tape dans une console perl -c ton_script.pl pour voir les messages d'erreur (il risque d'y en avoir).

  4. #4
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Je suis débutant en PERL, c'est pour cela que mon code n'est pas complet, j'apprend sur le tas

    quand j'ajoute les 'use' que vous m'avez dit, j'ai le message d'erreur suivant :

    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator, webmaster@refuge-tinderets.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.

    Apache/1.3.37 Server at www.refuge-tinderets.com Port 80
    Voici la nouvelle en-tête de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/perl	-w		
     
    use strict;
    use warnings;
     
    # Appel des modules nécessaires		   
    use CGI;
    use CGI qw(:standard);
    use CGI::Session;	
    .......

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Citation Envoyé par Munkey74
    Je suis débutant en PERL
    J'avais cru comprendre ça aussi

    Autre chose : ton programme devrait s'assurer qu'il ouvre bien ses fichiers. Voir fonction die pour cela

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Au cas ou j'ai édité mon post précédent ...

    J'ai donc ajouté ce que tu m'a dis. J'utilisa pg-testscript pour débugger et j'ai plein de messages de deux types différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    Variable "$html" is not imported at module_inscription.cgi line 240.
    (Did you mean &html instead?)
    Global symbol "$html" requires explicit package name at module_inscription.cgi line 11.
    ...
    Le soucis c'est que je ne sais pas du tout d'ou sa vient

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Citation Envoyé par Munkey74
    Au cas ou j'ai édité mon post précédent ...
    Il n'y a que ça qui a changé ?

    Regarde comment s'utilise la pragma strict

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    C'est un truc de dingue quand j'utilise strict !

    J'ai trop d'erreurs, je dois mettre des 'my' avant chacune de mes variables...

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Citation Envoyé par Munkey74
    C'est un truc de dingue quand j'utilise strict !

    J'ai trop d'erreurs, je dois mettre des 'my' avant chacune de mes variables...
    C'est pourtant fort utile...

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Je pense bien que sa doit etre utilse, tou le monde met sa en en-tete

    Bon voila mon code qui est en strict (entre temps j'ai ajouter quelques autres trucs pour gérer des sessions).

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    #!/usr/bin/perl	-w		
     
     
        use strict "vars";
        use strict "refs";
        use strict "subs";
     
    use warnings;
     
    # Appel des modules nécessaires		   
    use CGI;
    use CGI qw(:standard);
    use CGI::Session;	  	
     
    my ($html) = new CGI;
     
    #########################################################################
    				    	#GESTION DES SESSIONS#
    #########################################################################  
     
    # Fonctions d'affichage du compte ou du formulaire d'inscription   
     
    sub afficherMenuCompte{
      # si on a	 récupéré une session on affiche le menu du compte
      if (defined(my ($session))){
    	# on affiche le menu du compte
    	print "Bienvenue ",$session->param("login"),"<br />";	 
        print "-<a href='module_inscription.cgi?logout=true'>Se déconnecter</a><br />"; 
    	print "-<a href='module_inscription.cgi'>Follow</a><br />";   	 
      }	else { 	
        # sinon on affiche le formulaire de saisie
    	print "<form action='module_inscription.cgi' method='post'>
    	         Login <input type='text' size=20 name='login'><br />
    			 Mot de passe <input type='password' size=20 name='mdp'><br />
    			 <input type='submit' value='Connecter'>
    	       </form>";    
        print "-<a href='module_inscription.cgi?action=inscription'>S'inscrire</a><br />"; 
      }	 					 
    }		
     
    sub creerCompte{   
     # Fonction créant un compte dans le fichier si le login n'existe pas		
     
      # on récupère les paramètres
      my ($nomFichier,$login,$mdp) = @_;	
     
    	if (&compteExistFichier($nomFichier,$login)!=1){
    	  # Si il n'existe pas...
    	  &insererFichier(my ($fichier),my ($login),my ($mdp));	  
    	} else {
    	  print "Désolé mais ce login est déjà pris";
    	}
    }
     
    sub afficherFormInscription{	 				 
       # Sinon on affiche le formulaire	
    	print "<center><h1>Formulaire d'inscription</h1></center>";	  
    	print "<form action='module_inscription.cgi?action=inscription' method='post'>  
    	        <table>
    	         <tr>
    			  <td>Login</td> 
    			  <td><input type='text' size=20 name='login_inscription'></td>
    			 </tr>
    			 <tr>
    			  <td>Mot de passe</td>
    			  <td><input type='text' size=20 name='mdp_inscription'></td>
    			 </tr>
    			</table>			 
    			 <center><input type='submit' value='Valider'></center>
    	       </form>";     
    }		
     
      ###############################################################################
     
    # Si on a le paramètre login et mdp passé en paramètre, alors...
    if (defined(param('login')) && defined(param('mdp'))){
      # on crée une session		
      my ($session) = new CGI::Session() or die CGI::Session->errstr;	 
     
      # on y stock les données login et mdp
      $session->param('login', param('login'));
      $session->param('mdp', param('mdp'));	 	  
     
      # Expiration de la session
      $session->expire('+1h');    		 
     
      # On crée un cookie qui conserve l'id de la session
      my ($cookie_auth) = cookie(
        -name => "CGISESSID",
        -value => $session->id(),
        -expires => "+1h",
      );  	 
      # On met le cookie dans le header
      print header(-cookie => $cookie_auth);	   
    }
     
    # si on a un cookie de session existant et qu'il n'est pas vide...
    if (defined(cookie("CGISESSID"))){ 							   
      # on récupère l'id de la session 
      my ($id) = cookie("CGISESSID");		
      #on récupère la session
      my ($session) = CGI::Session->load($id);	
    }   
     
    # si l'utilisateur à demandé de se déconnecter et qu'il n'est pas connecté
    if ((defined(param('logout'))) && (defined(my ($session)))){
      # on détruit sa session
      $session->delete();		
      # on détruit la variable de session
      undef $session;
      # on met null dans le cookie de session	   
      my ($cookie_auth) = cookie(
        -name => "CGISESSID",
        -value => "vide",
        -expires => "+1h",
      );  	
      # On met le cookie dans le header
      print header(-cookie => $cookie_auth);	 
    }						
     
    #########################################################################
    #########################################################################	
     
    ##########################################################
    ###### fonctions nécessaires pour le fonctionnement ######
    ### du module de gestion des parties privées des sites ###
    ##########################################################	 
     
    sub creerFichier{
      # fonction créant un fichier de nom
      # $nom_fichier	  	   
     
      # on récupère les paramètres
      my ($nomFichier) = @_;	
     
      # si le fichier n'existe pas alors on le crée 
      if (! -e $nomFichier){
     
        # on crée le fichier vide
        open(FILE,">".$nomFichier);	  
     
        # on ferme le fichier
        close (FILE);   
      }
    } 	 
     
    sub compteExistFichier{
      # fonction renvoyant 1 si le login passé
      # en paramètre existe 0 sinon	
     
      # on récupère les paramètres
      my ($nomFichier,$login) = @_;	
     
      # on suppose que le login n'existe pas
      my ($exist) = 0;	
     
      # on récupère le fichier
      my ($fichier) = &importerFichier($nomFichier);		
     
      my (@tab) = split(/::/, $fichier);    		  
     
      # on le parcour et on compare chaque login à celui
      # passé en paramètre		
     
      my ($ligne) = "";
     
      foreach $ligne (@tab){	  
        my (@temp) = split(/:/, my ($ligne));  
     
    	# on récupère le login du fichier et on le compare à
    	# celui passé en paramètre
        if ($temp[0] eq $login){	
    	 $exist = 1; 
    	} 
      }
     
      return $exist; 
    }			
     
    sub importerFichier{
      # fonction ouvrant un fichier de nom
      # $nom_fichier et renvoyant le contenu du fichier
      # sous forme d'un tableau		
     
      # on récupère les paramètres
      my ($nomFichier) = @_;
     
      # on ouvre le fichier
      open(FILE,"<".$nomFichier); 	
     
      # on crée le tableau contenant les login et mot de passe	  
      my ($fichier) = ""; 
     
      while (<FILE>) {	   
        # on récupère la ligne du fichier
        my ($ligne) = $_;	  
    	my ($fichier) .= $ligne;  
      } 
     
      # on ferme le fichier
      close (FILE);  	
     
      # on renvoie le tableau obtenu
      return $fichier;
    }						
     
    sub insererFichier{
      # fonction insèrant $login et $mdp dans le fichier
      # $nom_fichier sous la forme $login|$mdp		 
     
      # on récupère les paramètres
      my ($fichier,$login,$mdp) = @_;	
     
      open(FILE,">>".$fichier); 	
     
      print FILE "::$login:$mdp";   
     
      close(FILE);
    } 	   
     
    ##########################################################
    ##########################################################
     
    print "Content-Type: text/html\n\n";	
     
    my ($fichier) = "mdp_clients/clic.mdp.dat"; 	 
     
    ############ Menu d'authentification
     
    # on crée le fichier
    &creerFichier($fichier);	
     
       &insererFichier($fichier,"albert","22");
     
    ###########################################
    Bon voila sa marche maintenant ^^

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Temporairement, essaie ceci à la place de ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub insererFichier{
    # fonction insèrant $login et $mdp dans le fichier
    # $nom_fichier sous la forme $login|$mdp
    # on récupère les paramètres
    my ($fichier,$login,$mdp) = @_;
     
    print "fichier = $fichier, login = $login, mdp = $mdp\n";
     
    open(FILE,">>".$fichier) or die("cannot update $fichier : $!\n");
    print FILE "::$login:$mdp";
    close(FILE);
    }

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    C'est bon sa marche merci beaucoup de ton aide ^^

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2013, 18h23
  2. [PHP] Problème d'ajout d'attributs dans un fichier xml
    Par sismic dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 10/06/2009, 17h16
  3. Réponses: 11
    Dernier message: 13/10/2004, 00h58
  4. Ajout de texte dans un fichier
    Par willowII dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 24/08/2004, 19h30
  5. Problème de rangement de structure dans un fichier ...
    Par Freeze dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/12/2003, 16h46

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