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

C# Discussion :

Vérification de données dans une table SQL


Sujet :

C#

  1. #1
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut Vérification de données dans une table SQL
    Bonjour,

    Je suis débutante en c#, et j'ai essayé de faire une page de login/mot de passe afin de rediriger l'utilisateur vers sa section (mais je ne suis pas encore à ce stade là).

    Là pour le moment ce que j'essai de faire est de vérifier si le login et le mot de passe entrer correspond à l'une des entrées de ma table personne se trouvant dans une base de données SQL server 2008.

    Voici mon 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
    protected void verification(object sender, EventArgs e)
            {   
                String user = txt_user.Text;
                String mdp = txt_mdp.Text;
     
                Session["user"] = txt_user.Text;
     
                SqlConnection connexion = new SqlConnection(System.Configuration.ConfigurationManager.
                    ConnectionStrings["connectString1"].ConnectionString);
                connexion.Open();
     
                string query = @"select * from personne where mdp_pe = "+mdp+"   and login_per = "+user+"";
                SqlCommand sql = new SqlCommand();
                sql.CommandText = query;
                sql.CommandType = CommandType.Text;
                sql.Connection = connexion;
     
                string resultat1 = (string)sql.ExecuteScalar();
                txt_resultat1.Text = string.Format(resultat1);
     
     
                sql.Connection.Dispose();
                connexion.Close();
            }
    Je suis sûre qu'il manque des choses ou encore que j'ai mal fait d'autres choses... Mais je n'arrive pas encore à voir mes erreurs.

    Cependant je crois qu'il faut que je mette une instruction qui dit 'si données trouvées faire.... sinon faire...', et je sais que cette instruction c'est if... Mais je ne sais pas comment matérialiser le : 'données trouvées'...

    En vous remerciant.

  2. #2
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    Si tu travaille avec asp.net, pourquoi t'utilise pas memberShip ou L'appartenance d'ASP.NET ? :

    http://www.codeproject.com/KB/aspnet...ngWebSite.aspx

    http://msdn.microsoft.com/fr-fr/libr...(v=VS.80).aspx

    C'est mieux et c'est sécurisé.

    Déjà c'est pas bon de mettre des requettes sql dans ton code, comme t'as fait, risque de "SQL Injection".

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    pourquoi ne pas faire un "SELECT COUNT" au lieu du "SELECT *", ainsi on aura comme resultat 1 si la personne existe, et 0 sinon.

    Du coup tu remplaces ton String resultat1 en Integer resultat1 pour pouvoir tester si c'est égal à 1 ou différent de 1

  4. #4
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Je vous remercie pour vos réponses.

    Pour un premier pas je vais essayer la méthode la plus simple celle de asmduty.

    Quand je m'y connaîtrais un peu mieux j'essaierais ta méthode Redouane.

    Mais même si elle est plus simple, j'ai quand même réussi à avoir un problème que je ne réussi pas à résoudre.....

    Voici mon code modifié :
    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
    protected void verification(object sender, EventArgs e)
            {   
                String user = txt_user.Text;
                String mdp = txt_mdp.Text;
                //int resultat;
    
                Session["user"] = txt_user.Text;
    
                SqlConnection connexion = new SqlConnection(System.Configuration.ConfigurationManager.
                    ConnectionStrings["connectString1"].ConnectionString);
                connexion.Open();
    
                string query = @"select count(*) from personne where mdp_pe = "+mdp+" and login_per = "+user+"";
                SqlCommand sql = new SqlCommand();
                sql.CommandText = query;
                sql.CommandType = CommandType.Text;
                sql.Connection = connexion;
    
                int resultat1 = (int)sql.ExecuteScalar();
                //resultat = int(resultat1.ToString);
                //txt_resultat1.Text = ""+resultat1+"";
    
                if (resultat1 == 0)
                {
                    txt_resultat1.Text = "Attention login ou mot de passe inconnu";
                }
                    else if (resultat1 == 1)
                    {
                        if (mdp == "admin")
                        {
                            Response.Redirect("accueilAdmin.aspx");
                        }
    
                            else 
                                {
                                Response.Redirect("accueilCli.aspx");
                                }
                     }
                
               
                sql.Connection.Dispose();
                connexion.Close();
            }
        }
    Il me met une erreur et me surligne ce qui est en violet et me dit :
    "L'exception SqlException n'a pas été géré par le code utilisateur :
    Nom de colonne non valide : 'admin'.
    Nom de colonne non valide : 'Admin'."
    Et les deux admin, ce sont mes login et mot de passe......

    Que dois-je faire pour réparer l'erreur ?

    En vous remerciant.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    On va en arriver à ce que disait Redouane donc.

    Le soucis est que, une fois le login et le mot de passe remplis, ta requête devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from personne where mdp_pe = Admin and login_per = admin
    Il manque donc les ' pour que ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from personne where mdp_pe = 'Admin' and login_per = 'admin'
    Donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string query = @"select count(*) from personne where mdp_pe = '"+mdp+"' and login_per = '"+user+"'";
                SqlCommand sql = new SqlCommand();
    Donc comme disait Redouane, si un utilisateur tape du SQL à la place du login ou du mot de passe il peut modifier ta requête.

  6. #6
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    il faut que tu ajoute des quotes :

    sinon, t'auras dans ton requette :

    au lieu de
    teste ta requette d'abord dans ton query analyzer.

    essaye de travailler avec des parametres ou procedure stockée que de passer directement des données dans ta requete.

    bonne courage

  7. #7
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Arf !

    Ça j'aurais pu y penser, mais bon je suis tellement ancré dans 'nouveau langage = tout apprendre', que j'en avais oublié de vérifier les trucs les plus simple....

    Je vous remercie tout deux de m'avoir répondu si rapidement, parce que je crois que j'aurais encore chercher longtemps.


    Edit : C'est bon maintenant ça fonctionne.
    Encore merci.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    il faut que tu ajoute des quotes :

    Code :

    mdp_pe = '"+mdp+"'...

    sinon, t'auras dans ton requette :

    Code :

    mdp_pe = admin

    au lieu de
    Code :

    mdp_pe = 'admin'

    teste ta requette d'abord dans ton query analyzer.
    Redouane, tu es fou d'écrire ça, donc lou87 du dernier message de Redouane ne retient que l'avant-dernière ligne

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Mais de rien, n'oublie pas de mettre la balise résolu.
    Bonne journée

  10. #10
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    ostenhard a raison, surtout pas de requêtes d'authentification de ce type !

    Utilise plutôt des requêtes paramétrées qui sont résistantes à l'injection SQL .

  11. #11
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Citation Envoyé par ostenhard Voir le message
    Redouane, tu es fou d'écrire ça, donc lou87 du dernier message de Redouane ne retient que l'avant-dernière ligne
    J ne comprend pas

  12. #12
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    D'accord. ^_^

    Merci bien eusebe19 et ostenhard.

    eusebe19 => Je modifierais ça rapidement.

    Merci encore tout le monde.

  13. #13
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Oui vous aviez raison tt les 2, ci ce que j'ai essayé d'expliquer au début, mais je fait confiance à lou87 elle a dit qu'elle va voir la méthode de memberShip.

    lou87 ne retient pas mon dernier message, essaye de travailler avec les bonnes méthodes pour ne pas galérer aprés.

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

Discussions similaires

  1. Recherche de données dans une table SQL
    Par kibbb dans le forum Général Python
    Réponses: 0
    Dernier message: 15/01/2013, 10h41
  2. Réponses: 3
    Dernier message: 07/06/2006, 12h05
  3. Vérification de donné dans une table access
    Par xdiethank dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2006, 15h29
  4. Réponses: 7
    Dernier message: 27/01/2006, 15h57
  5. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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