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

 Delphi Discussion :

If Else imbriqués


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 118
    Points
    118
    Par défaut If Else imbriqués
    Re-Bonjour !
    Je suis entrain de m'arracher les cheveux, j'ai ma procédure,
    je veux que "if" le mot de passe est egal a ****** (valeur par defaut) le mot de passe ne se change pas, donc dans ma requête SQL j'ai enlever la valeur du mot de passe.

    "else" le mot de passe doit se changer par la valeur courante.

    Hors il ne se change pas, au lieu de continuer ma requête quand le mot de passe est egal à autre chose que ******, il vas direct au end final (mode pas à pas)...

    Voici le code:
    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
    procedure TFrmGui.Button1Click(Sender: TObject);
    	begin 
    {=============================================================================
                     REQUETE DE LA MISE A JOUR DES COMPTES
         Création de mon login : passe "UPPER" avant d'être hasher
    ==============================================================================}
    		Action12.Caption := UpperCase( EditModLogC.Text + ':' + EditModPassC.Text ); //Création de mon login : passe "UPPER" avant d'être hasher
    		Action6.Caption := SHA1ToStr( SHA1(Action12.Caption) ); // Verification, Burning crusade coché ou non
    		If CheckBox2.Checked = True then
    			Begin
    				Action10.Caption := IntTostr(1)
    			End 
    		Else
    			Action10.Caption := IntTostr(0); //Verification du type de compte coché
    			If RadioButton5.Checked = True Then
    				Begin// Joueur
    					Action8.Caption := IntTostr(0);
    				End;
    			If RadioButton6.Checked = True Then  // Modérateur
    				Begin
    					Action8.Caption := IntTostr(1);
    				End;
    			If RadioButton7.Checked =  True Then  // Game Master
    				Begin
    					Action8.Caption := IntTostr(2);
    				End;
    			If RadioButton8.Checked = True Then
    				Begin  // Administrateur
    					Action8.Caption := IntTostr(3);
    				End;
      {===============================================================================
                                                           Information
    // Mon mot de passe est: Action6.Caption issu de SHA1(login:pass) > Action6.Caption
    // Mon gmlevel est Action8.Caption
    // Mon "tbc" est Action10.Caption
    ==================================================================================}
    		Statut.SimpleText := 'Vérification de la connexion au serveur MySql.';
    		DbPort := StrToInt(EditMySqlPort.Text);
    		DbCompte := EditMySqlLogin.Text;
    		DbPasse := EditMySqlPasse.Text;
    		DbHost := EditMySqlServeur.Text;
    		DbBase := EditMySqlBd.Text;
    			If EditModPassC.Text = '******'
    				Then
    					If (ListeCompte.ItemIndex <> -1) AND (Sql.Connexion(0))
    					Then
    						Begin
    							If Sql.Query('UPDATE account SET username = "' + EditModLogC.Text + '",' + 'gmlevel = ' + Action8.Caption + ', '+ 'email = "' + EditModMailC.Text + '", '+ 'tbc = ' + Action10.Caption + ' WHERE username = "'+ListeCompte.Items.Strings[ListeCompte.ItemIndex]+'";') <> 0 Then
    								Begin
    									Sql.Fermeture;
    									Statut.SimpleText := 'Erreur durant la mise à jour du compte.';
    								End
    							Else	Statut.SimpleText := 'Mise à jour du compte effectuée avec succès.';
    						End
    			Else
    				If (ListeCompte.ItemIndex <> -1) AND (Sql.Connexion(0))
    					Then
    						Begin
    							If Sql.Query('UPDATE account SET username = "' + EditModLogC.Text + '",' + 'sha_pass_hash = "' + Action6.Caption + '", ' + 'gmlevel = ' + Action8.Caption + ', '+ 'email = "' + EditModMailC.Text + '", '+ 'tbc = ' + Action10.Caption + ' WHERE username = "'+ListeCompte.Items.Strings[ListeCompte.ItemIndex]+'";') <> 0 Then
    								Begin
    									Sql.Fermeture;
    									Statut.SimpleText := 'Erreur durant la mise à jour du compte.';
    								End
    							Else	Statut.SimpleText := 'Mise à jour du compte effectuée avec succès.';
    						End;
    		End;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If RadioButton6.Checked = True then
    peut s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If RadioButton6.Checked then
    tu as un ; devant un else, cela ne devrait même pas compilé, bon tu as trop de code et puis mal identé !

    les * ne viennent pas de l'option PasswordChar ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If EditModPassC.Text = '******' Then
    begin 
      If (ListeCompte.ItemIndex <> -1) then
      begin
        ....
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 118
    Points
    118
    Par défaut
    Non je les écrits moi même dans le EditModPassC.Text (C comme compte)
    L'utilisateur ne peut être que l'administrateur du serveur donc il doit savoir ce qu'il écrit comme mot de passe sans faire erreur. (car le SHA1 est indecryptable pour le faire afficher..)
    Je prend note pour les checked box.

    Euh, si ça compile ^^

    Pourtant, je pense que si ce End; n'avait pas de ; ca executerais la suite au lieu d'aller au end. ... je vais essayer !

    Sur mon code l'erreur du ; ne s'est pas insérer, je sais pas comment elle est apparut la !


    Bon, j'ai trouver l'erreur cela dit

    Après mon premier THEN, je ne fait pas de "begin", donc la j'en ai fait un, je ferme juste avant mon Else sans ; bien sur, et ca marche.


    Maintenant, j'aimerais que mon premier if fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If EditModPassC.Text = '******' AND EditModPassC.Text = ''
    en gros si il n'y a rien...
    Mais ca me dit Opérateur non applicable à ce type d'opération

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Essaie déjà de mettre des blocs begin/end à chaque if/else.

    La partie:
    Else
    If (ListeCompte.ItemIndex <> -1) AND (Sql.Connexion(0))
    correspond au:
    If (ListeCompte.ItemIndex <> -1) AND (Sql.Connexion(0))

    ce que vu l'indentation n'est pas l'effet recherché.

    Edit: grillé pour la première question.

    Pour la seconde, il faut mettre des parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If (EditModPassC.Text = '******') AND(EditModPassC.Text = '')
    Mais je mettrais plutôt un OR
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 118
    Points
    118
    Par défaut
    Oui, il me manquer un begin/end, ca s'est corriger, maintenant, je veux juste pouvoir controler si le champ et vide ou pas tout en haut

    Re edit:
    merci ^^

    MAIS.. ^^

    Ca me prend quand même en compte le champ vide, donc le nouveau mot de passe est le hash du pseudo (puisque il n'y a plus de valeur mot de passe)

    Bah voilà qui est fait !
    Avec le OR ca marche niquel !

    Merci à vous !

  6. #6
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    et si tu remplace tes radios par un groupradio comme sa tu peut remplacer tes if par une seul case of
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case RadioGroup1.ItemIndex of
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

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

Discussions similaires

  1. [XL-2010] erreur dans l'utilisation de if, elseif, else imbriqués
    Par Maude_84 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/02/2015, 11h41
  2. IF/ELSE imbriqués qui ne marchent pas
    Par FraocH dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 04/08/2010, 11h13
  3. IF THEN ELSE imbriqués
    Par nuke_y dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2004, 14h57
  4. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 15h36
  5. "boutons" imbriqués !!
    Par biloubil dans le forum Flash
    Réponses: 9
    Dernier message: 04/12/2003, 14h03

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