|
Started by cedric, Mar., 30 2006 4:35 PM - 13 replies |
| |
| | | |
|
| |
Posted on March, 30 2006 - 4:35 PM |
j'ai un petit probleme avec une boucle "tant que": au début de mon prog j'ai déclaré 2 tableaux de dimensions 10, ensuite j'ai une variable j initialisée a 1 et quand je rentre dans ma boucle "tant que" j'ai une erreur de ce genre : "La dimension 1 du tableau possède 10 élément(s) et vous tentez d'accéder à l'élément 11."
voici mon code si cela peut vous aider : ( probleme au niveau de 2 eme tant que )
CONNEXION est une chaîne CONNEXION = SQLConnecte("CODIF", "sa", "sa", "CODIF", "hODBC")
REQ est une chaîne = [ SELECT login, mdp FROM Login ] SQLExec(REQ, "AUTH") tabVar_pseudo est un tableau fixe de 10 chaînes tabVar_mdp est un tableau fixe de 10 chaînes i est un entier = 0
TANTQUE SQLAvance("AUTH") = 0 i++ tabVar_pseudo[i] = SQLLitCol("AUTH",1) tabVar_mdp[i] = SQLLitCol("AUTH",2) FIN
j est un entier = 1 TANTQUE ((tabVar_pseudo[j] <> SAIS_PSEUDO ET tabVar_mdp[j] <> SAIS_MDP) OU j<=i) j++ FIN
SI (tabVar_pseudo[j] = SAIS_PSEUDO ET tabVar_mdp[j] = SAIS_MDP) ALORS Info(" Bienvenue dans CODIF !") SINON Info(" Login et/ou mot de passe erroné(s) !") FIN
SQLFerme("AUTH") |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 4:45 PM |
tu as plus de 10 logins passe sur des tableaux dynamiques
cedric a exprimé avec précision :
j'ai un petit probleme avec une boucle "tant que": au début de mon prog j'ai déclaré 2 tableaux de dimensions 10, ensuite j'ai une variable j initialisée a 1 et quand je rentre dans ma boucle "tant que" j'ai une erreur de ce genre : "La dimension 1 du tableau possède 10 élément(s) et vous tentez d'accéder à l'élément 11."
voici mon code si cela peut vous aider : ( probleme au niveau de 2 eme tant que )
CONNEXION est une chaîne CONNEXION = SQLConnecte("CODIF", "sa", "sa", "CODIF", "hODBC")
REQ est une chaîne = [ SELECT login, mdp FROM Login ] SQLExec(REQ, "AUTH") tabVar_pseudo est un tableau fixe de 10 chaînes tabVar_mdp est un tableau fixe de 10 chaînes i est un entier = 0
TANTQUE SQLAvance("AUTH") = 0 i++ tabVar_pseudo[i] = SQLLitCol("AUTH",1) tabVar_mdp[i] = SQLLitCol("AUTH",2) FIN
j est un entier = 1 TANTQUE ((tabVar_pseudo[j] <> SAIS_PSEUDO ET tabVar_mdp[j] <> SAIS_MDP) OU j<=i) j++ FIN
SI (tabVar_pseudo[j] = SAIS_PSEUDO ET tabVar_mdp[j] = SAIS_MDP) ALORS Info(" Bienvenue dans CODIF !") SINON Info(" Login et/ou mot de passe erroné(s) !") FIN
SQLFerme("AUTH")
-- Pierre BOUSQUET
" Ne me dites pas que ce problème est difficile. S'il n'était pas difficile, ce ne serait pas un problème. " |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 5:01 PM |
Je n'ai qu'actuellement 2 logins ( logins de test pour mon prog ) |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 5:01 PM |
Dans sa contribution <442d2082$1@news.pcsoft.fr>, boucherc@info.iut-amiens.fr racontait :
j'ai un petit probleme avec une boucle "tant que": au début de mon prog j'ai déclaré 2 tableaux de dimensions 10, ensuite j'ai une variable j initialisée a 1 et quand je rentre dans ma boucle "tant que" j'ai une erreur de ce genre : "La dimension 1 du tableau possède 10 élément(s) et vous tentez d'accéder à l'élément 11."
voici mon code si cela peut vous aider : ( probleme au niveau de 2 eme tant que )
CONNEXION est une chaîne CONNEXION = SQLConnecte("CODIF", "sa", "sa", "CODIF", "hODBC")
REQ est une chaîne = [ SELECT login, mdp FROM Login ] SQLExec(REQ, "AUTH") tabVar_pseudo est un tableau fixe de 10 chaînes tabVar_mdp est un tableau fixe de 10 chaînes i est un entier = 0
TANTQUE SQLAvance("AUTH") = 0 i++ tabVar_pseudo[i] = SQLLitCol("AUTH",1) tabVar_mdp[i] = SQLLitCol("AUTH",2) FIN
j est un entier = 1 TANTQUE ((tabVar_pseudo[j] <> SAIS_PSEUDO ET tabVar_mdp[j] <> SAIS_MDP) OU j<=i) j++ FIN
SI (tabVar_pseudo[j] = SAIS_PSEUDO ET tabVar_mdp[j] = SAIS_MDP) ALORS Info(" Bienvenue dans CODIF !") SINON Info(" Login et/ou mot de passe erroné(s) !") FIN
SQLFerme("AUTH")
Deja 2 réponses postées a ta premiere demande !
-- Lionel
mailto:lionel.breil*NOSPAM*@gmail.com (retirer *NOSPAM* pour m'écrire) |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 5:36 PM |
TANTQUE ((tabVar_pseudo[j] <> SAIS_PSEUDO ET tabVar_mdp[j] <> SAIS_MDP) OU j<=i) j++ FIN
quaund i on a j< donc j+1 donc 11
il faut dire TANTQUE ((tabVar_pseudo[j] <> SAIS_PSEUDO ET tabVar_mdp[j] <> SAIS_MDP) OU j<i) j++ FIN
faire 1 decalage de -1 |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 6:37 PM |
Remplace le "OU" par "ET" |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 7:16 PM |
"ou" par "et" ou "et" par "ou"? lol |
| |
| |
| | | |
|
| | |
| |
Posted on March, 30 2006 - 7:47 PM |
Si je comprends bien, 2 conditions doivent être remplies pour vérifier le login: tabVar_pseudo[j]=SAIS_PSEUDO ET tabVar_mdp[j] = SAIS_MDP Alors personnellement, je ferais comme ceci: // On vérifie la condition 1: j est un entier = 1 TANTQUE (tabVar_pseudo[j] <> SAIS_PSEUDO ET j<=i) --j++ FIN SI tabVar_pseudo[j]=SAIS_PSEUDO Alors // Condition 1 ok --// On va vérifier la n°2 : --J=1 --TANTQUE (tabVar_mdp[j] <> SAIS_MDP) ET j<=i) ----j++ --FIN --SI tabVar_mdp[j] = SAIS_MDP Alors // Condition 2 ok aussi ----Info(" Bienvenue dans CODIF !") --SINON // Condition 1 ok mais condition 2 ko ----Erreur(«Login erroné ») --FIN SINON --Erreur(«Login erroné ») // Condition 1 ko. Pas la peine de vérifier la n°2 FIN Quand tu joues avec des tableaux dans une boucle avec incrémentation de l'indice, il faut toujours ajouter à tes conditions de base ... ET Indice<= Borne max |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 11:04 AM |
Dans sa contribution <442d4d9f$1@news.pcsoft.fr>, daniel.cavrenne@scarlet.be racontait :
Si je comprends bien, 2 conditions doivent être remplies pour vérifier le login: tabVar_pseudo[j]=SAIS_PSEUDO ET tabVar_mdp[j] = SAIS_MDP Alors personnellement, je ferais comme ceci: // On vérifie la condition 1: j est un entier = 1 TANTQUE (tabVar_pseudo[j] <> SAIS_PSEUDO ET j<=i) --j++ FIN SI tabVar_pseudo[j]=SAIS_PSEUDO Alors // Condition 1 ok --// On va vérifier la n°2 : --J=1 --TANTQUE (tabVar_mdp[j] <> SAIS_MDP) ET j<=i) ----j++ --FIN --SI tabVar_mdp[j] = SAIS_MDP Alors // Condition 2 ok aussi ----Info(" Bienvenue dans CODIF !") --SINON // Condition 1 ok mais condition 2 ko ----Erreur(«Login erroné ») --FIN SINON --Erreur(«Login erroné ») // Condition 1 ko. Pas la peine de vérifier la n°2 FIN Quand tu joues avec des tableaux dans une boucle avec incrémentation de l'indice, il faut toujours ajouter à tes conditions de base ... ET Indice<= Borne max
Si je ne me trompe pas, ton algorithme remet a 0 l'indice de parcours... Donc en fait on cherche si on a le login dans le tableau, si on a le login on cherche si on a le mot de passe quelque part dans le tableau (ici aucune corrélation entre les 2...), et si on a le login d'un coté, et le mot de passe de l'autre, alors on valide. Si le couple (login,mdp) = (utilisateurA, mdpB) se présente, alors ton systeme va autoriser l'utilisateur a entrer il me semble. C'est une méthode originale, je trouve Je ne pense pas que la décomposition soit ici la meilleure des solutions, mais un "tableaucherche" aurait peut etre été plus efficace...
Dans tous les cas je maintiens que l'utilisation d'une requete pour tester directement dans la base de données est encore la meilleure solution (pas de récupération de mot de passe, donc pas de risque de hacking)
-- Lionel
mailto:lionel.breil*NOSPAM*@gmail.com (retirer *NOSPAM* pour m'écrire) |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 11:55 AM |
bonjour et merci de votre coopération!
j'ai toujours un problème avec cette authentification, plus précisement avec cette boucle "tant que" : si je tape un utilisateur existant dans ma base, la boucle continue de tourner pour me retourner à la fin une de mes erreurs personnalisées!
voici mon code:
CONNEXION est une chaîne CONNEXION = SQLConnecte("CODIF", "sa", "sa", "CODIF", "hODBC")
REQ est une chaîne = [ SELECT login, mdp FROM Login ] SQLExec(REQ, "AUTH") Var_pseudo est un tableau fixe de 10 chaînes Var_mdp est un tableau fixe de 10 chaînes i est un entier = 0
TANTQUE SQLAvance("AUTH") = 0 i++ Var_pseudo[i] = SQLLitCol("AUTH",1) Var_mdp[i] = SQLLitCol("AUTH",2) FIN k est un entier POUR k = 1 A i// affichage du tablo, ca, ca marche! Info("login : " +Var_pseudo[k]+k) Info("mdp : " +Var_mdp[k]+k) FIN
lim est un entier = i i = 1 TANTQUE (Var_pseudo[i] <> SAIS_PSEUDO ET i<=lim)// test de la boucle, ici, ca merde! Info("pseudo saisi : " +SAIS_PSEUDO) Info(Var_pseudo[i]+i) i++ FIN
SI Var_pseudo[i] = SAIS_PSEUDO ALORS SI Var_mdp[i] = SAIS_MDP ALORS Info(" Bienvenue dans CODIF !") SINON Erreur("Mot de passe erroné") FIN SINON Erreur("Login erroné") FIN
SQLFerme("AUTH") |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 12:15 PM |
->LIONEL
non en fait dans ma base, j'ai une table login avec 2 colonnes: 1 -> login 2 -> mdp ( associé au login )
au début je faisais une requete qui cherché dans la base si il existait un enregistrement ( une ligne ) qui correspondait au login et au mdp tapés dans ma fenetre d'authentification, si c'etait ok il m'affiché mon message de bienvenue, etc...
apres j'ai testé vos codes mais toujours le meme blem' : meme si je tape un utilisateur connu dans la base, ca e retourne mon message d'erreur : utilisateur inconnu ....
je suis en train de pété un plomb, sur un truc qui d'ordinaire est vraiment simple!! lol |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 12:32 PM |
Et avec ça: VarTab est un tableau de 10 par 2 chaînes Indice est un entier Trouve est un booleen 1. Tu garnis le tableau en mettant login dans colonne 1 et mot de passe dans colonne 2 Indice=1 TANTQUE ... --VarTab[Indice,1]=... --VarTab[Indice,2]=... --Indice++ Fin 2. Recherche proprement dite: Indice=1 Trouve=Faux TantQue pas Trouve et Indice< --Si VarTab[Indice,1]=LoginDonné et VarTab[Indice,2]=MDPDonné Alors ----Trouve=Vrai --Sinon ----Indice++ --Fin Fin Si Trouve Alors ... |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 1:03 PM |
c'est bon ca marche! j'ai trouvé : quand j'ai tabpseudo[i]=sais_pseudo avec c'est 2 variables égales à par exemple " cedric ", le " = " merde alors qu'en mettant " ~= " ca marche!
merci à tous! |
| |
| |
| | | |
|
| | |
| |
Posted on April, 03 2006 - 1:41 PM |
Dans son message, cedric racontait :
->LIONEL
non en fait dans ma base, j'ai une table login avec 2 colonnes: 1 -> login 2 -> mdp ( associé au login )
Jusque la OK
au début je faisais une requete qui cherché dans la base si il existait un enregistrement ( une ligne ) qui correspondait au login et au mdp tapés dans ma fenetre d'authentification, si c'etait ok il m'affiché mon message de bienvenue, etc...
Que répondait la requete ? Un enregistrement était-il retourné ? Quelle est la version d'hyperfile que tu utilises (5.5 ou 7) ? Les champs sont-ils complétés par des espaces ou non ? Normalement la requete que je t'avais fournie aurait du marcher... Je la réécris pour plus de clarté
REQ est une chaîne = [ SELECT Login.login FROM Login WHERE Login.login = '%1' AND Login.mdp = '%2' ]
REQ = chaineconstruit(REQ, SAIS_PSEUDO, SAIS_MDP) req_executee est booleen = SQLExec(REQ, "AUTH") SQLInfoGene("AUTH") SI PAS req_executee ALORS -- Info("Erreur lors de l'execution de la requete : "+SQL.MesErreur) FIN
SI SQL.NbLig = 0 ALORS -- Erreur("Utilisateur inexistant, ou mot de passe incorrect") FIN
SI SQL.NbLig <> 0 ALORS -- SI SQLAvance("AUTH") <> 0 ALORS -- -- Erreur("Erreur lors du parcours") -- SINON -- -- var_login est chaine = SQLLitCol("AUTH", 1) -- -- Info("Utilisateur authentifié : "+var_login) -- FIN FIN SQLFerme("AUTH")
> apres j'ai testé vos codes mais toujours le meme blem' : meme si je tape un utilisateur connu dans la base, ca e retourne mon message d'erreur : utilisateur inconnu ....
Memes questions qu'au dessus... Y a-t-il un enregistrement retourné quand meme ? (auquel cas ca serait ton parcours de tableau qui serait en erreur)
je suis en train de pété un plomb, sur un truc qui d'ordinaire est vraiment simple!! lol
C'est sur que c'est rageant de galérer sur ce genre de problemes ^^'
Tiens moi au courant si ca a marché ou pas cette fois
-- Lionel
mailto:lionel.breil*NOSPAM*@gmail.com (retirer *NOSPAM* pour m'écrire) |
| |
| |
| | | |
|
| | | | |
| | |
|