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 :

Comment remplacer des fonctions MySQL/PHP en Delphi


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 Comment remplacer des fonctions MySQL/PHP en Delphi
    Bonjour, j'ai commencer petit programme pour gérer des comptes sur un logiciel de type serveur.

    J'ai besoin d'un HASH SHA-1, ce qui est fait.

    Mais aussi du concaténation MySQL (CONCAT()), et d'un UPPER(); PHP.


    Ma requete en PHP:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO account(username, sha_pass_hash, gmlevel, email, tbc) VALUES('$pseudo', SHA1(CONCAT(UPPER('$pseudo'),':',UPPER('$pass'))), 0, '$email', '$tbc')")or die(mysql_error());

    Ma requete reprise en Delphi avec le code autour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      If Sql.Query('INSERT INTO account (username, sha_pass_hash, gmlevel, email, tbc) VALUES ("' + EditLoginCompte.Text +  '", "' + Action3.Caption + '", ' + Action4.Caption + ', "' + EditEmailCompte.Text + '", ' + Action5.Caption + ');') <> 0 Then
          Begin
            Sql.Fermeture;
            Statut.SimpleText := 'Erreur durant la création du compte.';
          End
        Else Statut.SimpleText := 'Création du compte effectuée avec succès.';
    End;
    La parti qui nous interesse là est "' + Action3.Caption + '" qui est égal à:
    Action3.Caption := SHA1ToStr( SHA1(EditPasseCompte.Text) );

    Mais je veux donc concaténer mon Loginasse et le "UPPER" sauf que je ne vois pas dutout comment reproduire la fonction UPPER, et je ne sais pas si la fonction CONCAT() de MySQL marchera ici.

    Ne me demander pas pourquoi autant d'ActionX, j'était parti dans l'idée de me créer mon propre objet avec mes propres valeur, mais le logiciel doit être terminé au plus vite, et la POO ne s'apprend pas en un jour.. x_x

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    si j'ai tout compris, ceci suffira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      If Sql.Query('INSERT INTO account (username, sha_pass_hash, gmlevel, email, tbc) VALUES (SHA1(UPPER("' + EditLoginCompte.Text +  '")), "' + Action3.Caption + '", ' + Action4.Caption + ', "' + EditEmailCompte.Text + '", ' + Action5.Caption + ');') <> 0 Then
          Begin
            Sql.Fermeture;
            Statut.SimpleText := 'Erreur durant la création du compte.';
          End
        Else Statut.SimpleText := 'Création du compte effectuée avec succès.';
    End;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  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
    Euh, pas exactement.

    Enfete le mot de passe est génerer AVEC le login, mais il y a bien le login à par.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table ('login, passe') VALUES ('login, UPPER(login:passe)');
    la requete ressemble à sa (sans le CONCAT pour concatener les valeur login et passe pour quel rentre dans la fonction)

    Enfin je sais pas, à vous de voir c_c

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Sundark Voir le message
    Euh, pas exactement.

    Enfete le mot de passe est génerer AVEC le login, mais il y a bien le login à par.

    INSERT INTO table (login, passe) login, UPPER(login:passe);
    la requete ressemble à sa (sans le CONCAT pour concatener les valeur login et passe pour quel rentre dans la fonction)

    Enfin je sais pas, à vous de voir c_c
    quoi qu'il en soit, UpperCase() doit correspondre à UPPER(), mais quand tu construis ta requête SQL, rien ne t'empêche d'utiliser les fonctions SQL de la même façon qu'en PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sql:='INSERT INTO table (login,passe) VALUES("'+username+'",SHA1(UPPER("'+username+':'+password+'"))';
    // ben oui UPPER(user:pass) c'est la même chose que UPPER(user)+':'+UPPER(pass)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  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
    Mouarf, je n'ai même pas penser à essayer ^^
    Je le fait dessuite et je te dit quoi.

    Bah, SUNDARK:B1EE5F8C8468A529EA5F341980441B00 = Sundark:Sundark

    Ca me donne ça dans ma table, ce qui est incorrect.

    Il faut donc que je concatène (ca se dit oO ?) je vais essayer CONCAT() en plus.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      If Sql.Query('INSERT INTO account (username, sha_pass_hash, gmlevel, email, tbc) VALUES ("' + EditLoginCompte.Text +  '", CONCAT(UPPER("' + EditLoginCompte.Text +  ':' + Action3.Caption + '")), ' + Action4.Caption + ', "' + EditEmailCompte.Text + '", ' + Action5.Caption + ');') <> 0 Then {Back up de mon mot de passe: "' + Action3.Caption + '", }
          Begin          
            Sql.Fermeture;  
            Statut.SimpleText := 'Erreur durant la création du compte.';
          End
        Else Statut.SimpleText := 'Création du compte effectuée avec succès.';
    End;
    Donc ça me refait la même chose.. (que sans CONCAT)

  6. #6
    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
    Je double post pour rendre le message clair.

    J'ai essayer de reprendre à 100% ma requete comme sur PHP et là ca me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      If Sql.Query('INSERT INTO account (username, sha_pass_hash, gmlevel, email, tbc) VALUES ("' + EditLoginCompte.Text +  '", CONCAT(UPPER("' + EditLoginCompte.Text +  '"),':',UPPER("' + Action3.Caption + '")), ' + Action4.Caption + ', "' + EditEmailCompte.Text + '", ' + Action5.Caption + ');') <> 0 Then
          Begin  {Back Up de mon mot de passe: "' + Action3.Caption + '",}
            Sql.Fermeture;
            Statut.SimpleText := 'Erreur durant la création du compte.';
          End
        Else Statut.SimpleText := 'Création du compte effectuée avec succès.';
    End;
    "),':PROBLEME ICI',U

    ) attendu mais : trouvé


    Edit: Une de mes erreurs:
    Je ne refait pas comme PHP, puisque mon mot de passe est hasher avant d'être dans la requete, je vais réutilier mais maintenant hors requete, donc à ce moment là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Action3.Caption := SHA1ToStr( SHA1(EditPasseCompte.Text) );
    Je vous tien au courant


    Donc Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Action6.Caption := UPPER("' + EditLoginCompte.Text +  ':' + EditPasseCompte.Text + '"));
      Action3.Caption := SHA1ToStr( SHA1(Action6.Caption) );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      If Sql.Query('INSERT INTO account (username, sha_pass_hash, gmlevel, email, tbc) VALUES ("' + EditLoginCompte.Text +  '", "' + Action3.Caption + '", ' + Action4.Caption + ', "' + EditEmailCompte.Text + '", ' + Action5.Caption + ');') <> 0 Then
          Begin
            Sql.Fermeture;
            Statut.SimpleText := 'Erreur durant la création du compte.';
          End
        Else Statut.SimpleText := 'Création du compte effectuée avec succès.';
    UPPER est non déclarer, je pourrais utiliser un pointeur pour corriger le problème ?


    Edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Action6.Caption := pChar('UPPER("'+EditLoginCompte.Text+',:,'+EditPasseCompte.Text+'")');
      Action3.Caption := SHA1ToStr( SHA1(Action6.Caption) );

    Resultat pour Sundark:Sundark (login:pass)
    Mon logiciel: 4d8532e0cfcfac80c7a5ad9c51a1608fcc729acb
    Ma page web (fonctionnel) :7e16aba26c267ad14e56ee6d1299487abe20d4c4

    Avec mon logiciel si j'enleve les virgule avant et après les deux points
    cd59afc4107b8cabfd794a2b2e9495f2f9104b97

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Essayez plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Action6.Caption := UpperCase( EditLoginCompte.Text + ':' + EditPasseCompte.Text );
    Action3.Caption := SHA1ToStr( SHA1(Action6.Caption) );
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  8. #8
    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
    Resultat du logiciel: 7e16aba26c267ad14e56ee6d1299487abe20d4c4
    Resultat de la page web: 7e16aba26c267ad14e56ee6d1299487abe20d4c4

    Ca marche ! Grand merci à vous deux

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 25/06/2007, 09h45
  2. Réponses: 8
    Dernier message: 29/11/2004, 16h28
  3. Réponses: 1
    Dernier message: 05/11/2004, 17h15
  4. Réponses: 14
    Dernier message: 15/01/2004, 01h15

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