Voir si la ligne existe user/pass en MySQL sur VB.net
Résolu/Fermé
A voir également:
- Voir si la ligne existe user/pass en MySQL sur VB.net
- Aller à la ligne excel - Guide
- Voir mot de passe wifi android - Guide
- Vente en ligne particulier - Guide
- Comment voir qui regarde mon profil facebook - Guide
- Voir ma maison par satellite - Guide
3 réponses
Excusez-moi vraiment mais j'ai trouvé la réponse depuis longtemps (je ne me souvenais plus avoir posté la question sur ce forum.
Voici comment on fait pour d'éventuel demandeurs:
Voilà, au revoir et merci d'avoir répondu à ma demande
Amicalement
Jérôme
Voici comment on fait pour d'éventuel demandeurs:
try Public ConnexionSql As String = "Database=madatabase;" & "Data Source=monsite.fr;" & "User Id=monid;Password=monpass;" & "Connection Timeout=20" Dim connection As New MySqlConnection(ConnexionSql) connection.Open() Dim query As String = "SELECT id FROM matable WHERE pass = @pass and user = @user LIMIT 1" 'Moi mon pass je l'ai concacter puis md5ter :) Dim command As New MySqlCommand(query, connection) command.Prepare() command.Parameters.AddWithValue("@pass", PASS) '@pass ne peux rien dire dans la query, je lui dit donc qu'il est égale à la variable PASS. command.Parameters.AddWithValue("@user", USER) Dim mysqlReader As MySqlDataReader = command.ExecuteReader() ' Call Read before accessing data. Dim hasmatch As Boolean = False While mysqlReader.Read() Dim record As IDataRecord = CType(mysqlReader, IDataRecord) If record(0) Then hasmatch = True End If End While If hasmatch Then userbon = TXTBOX_USER.Text LB_CONNECT.Text = "Bravo " & USER & ", vous êtes connectés" TXTBOX_PASS.Clear() TXTBOX_USER.Clear() 'là vous mettez tout ce que vous vouez faire si le user est bon. Exit Sub Else MsgBox("Vous n'êtes pas connecté") LB_CONNECT.Text = "Vous n'êtes pas connectés" End If 'mysqlReader.Close() ' Call Close when done reading. mysqlReader.Close() connection.Close() Catch ex As Exception LB_ERREUR.Text = ex.Message 'ou MsgBox si vous voulez End Try
Voilà, au revoir et merci d'avoir répondu à ma demande
Amicalement
Jérôme
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 janv. 2013 à 10:19
4 janv. 2013 à 10:19
Bonjour,
Tu ne dis pas quel est ton problème !
Est-ce que tu as une erreur à l'exécution ?
À la compilation ?
Est-ce que le comportement n'est pas celui attendu ?
Sinon, ta méthode d'authentification n'est pas bonne.
Imagine que deux utilisateurs aient le même mot de passe : tu ne sais pas quel id te sera retourné en premier.
Il vaut mieux faire une seule requête qui vérifie les deux égalités :
SELECT count(id) from users Where pass = @PASS AND user = @USER
Et vérifier que le résultat est positif (comprendre : qu'il y a au moins une ligne qui contienne ce User et ce Pass)
Xavier
Tu ne dis pas quel est ton problème !
Est-ce que tu as une erreur à l'exécution ?
À la compilation ?
Est-ce que le comportement n'est pas celui attendu ?
Sinon, ta méthode d'authentification n'est pas bonne.
Imagine que deux utilisateurs aient le même mot de passe : tu ne sais pas quel id te sera retourné en premier.
Il vaut mieux faire une seule requête qui vérifie les deux égalités :
SELECT count(id) from users Where pass = @PASS AND user = @USER
Et vérifier que le résultat est positif (comprendre : qu'il y a au moins une ligne qui contienne ce User et ce Pass)
Xavier
mryapados
Messages postés
2
Date d'inscription
vendredi 11 janvier 2013
Statut
Membre
Dernière intervention
11 janvier 2013
11 janv. 2013 à 17:00
11 janv. 2013 à 17:00
Si ça peut aider...
Voici une classe, écrite il y a longtemps mais qui marche bien qui permet de travailler dans une base mysql : exécuter des requêtes sql, lire, écrire des données...
'il faut avoir importé dans les références : MySql.Data
'Disponible sur : https://dev.mysql.com/downloads/connector/net/
exemple d'utilisation :
Voici une classe, écrite il y a longtemps mais qui marche bien qui permet de travailler dans une base mysql : exécuter des requêtes sql, lire, écrire des données...
'il faut avoir importé dans les références : MySql.Data
'Disponible sur : https://dev.mysql.com/downloads/connector/net/
Imports MySql.Data.MySqlClient Public Class SQLM #Region "Variables" Private Const inObjectError = vbObjectError + 100 Private dbSQLM As MySqlConnection Private _Current_Row As Integer = 0 'Variable de propriété : GET/SET : N° de ligne en cour lue dans la table Private _EoT As Boolean = True 'Variable de propriété : GET : Indique si l'on est arrivé en fin de table Private _SQL As String = "" 'Variable de propriété : GET/SET : Requête SQL en cour Private _Rows As Integer = 0 'Variable de propriété : GET : Nombre de lignes total Private _Cols As Integer = 0 'Variable de propriété : GET : Nombre de colonnes total Private _DataTable As DataTable 'Variable de propriété : GET : Le DataTable en cour = ON PEUT NAVIGUER DIRECTEMENT DEDANS après avoir executer 'la fonction query ou query_auto (Si on ne veut pas passer par les fonctions simplifié que j'ai crée ci-dessous) Private _Affected_Rows As Integer = 0 'Variable de propriété : GET/SET : Le nombre de lignes affectés par une requête non SELECT Private _Option_NonQuery_Auto As Boolean = True 'Variable de propriété : GET : Définit une option qui laisse la classe déterminer elle même le type de requête : SELECT ou non Private _SQLError As Boolean = False Private _SQLErrorExpression As String = "" #End Region #Region "Liste des propriétés" Public Property Current_Row() As Integer Get Return _Current_Row End Get Set(ByVal Current_Row As Integer) _Current_Row = Current_Row End Set End Property Public Property SQL() As String Get Return _SQL End Get Set(ByVal SQL As String) _SQL = SQL End Set End Property Public Property Option_NonQuery_Auto() As Boolean Get Return _Option_NonQuery_Auto End Get Set(ByVal Option_NonQuery_Auto As Boolean) _Option_NonQuery_Auto = Option_NonQuery_Auto End Set End Property Public ReadOnly Property Rows() As Integer Get Return _Rows End Get End Property Public ReadOnly Property Cols() As Integer Get Return _Cols End Get End Property Public ReadOnly Property EoT() As Boolean Get Return _EoT End Get End Property Public ReadOnly Property DataTable() As DataTable Get Return _DataTable End Get End Property Public ReadOnly Property Affected_Rows() As Integer Get Return _Affected_Rows End Get End Property Public ReadOnly Property Column(ByVal Index As Integer) As String Get Return _DataTable.Columns(Index).Caption End Get End Property Public ReadOnly Property SQLError() As Boolean Get Return _SQLError End Get End Property Public ReadOnly Property SQLErrorExpression() As String Get Return _SQLErrorExpression End Get End Property #End Region #Region "New" Private Sub New() MyBase.New() End Sub Public Sub New(ByVal ConnectionString As String) MyClass.New() dbSQLM = New MySqlConnection(ConnectionString) End Sub Public Sub New(ByVal SQL As String, ByVal ConnectionString As String) MyClass.New(ConnectionString) Query_Auto(SQL) End Sub #End Region #Region "Connexion / Fermeture" Public Sub Connect() dbSQLM.Open() End Sub Public Sub Close() dbSQLM.Close() End Sub #End Region #Region "Query" Public Function Query(ByVal SQL As String) As Boolean 'Execute la requête SQL fournie en argument 'et détermine si elle est de type SELECT ou non (si la 'propriété Option_NonQuery_Auto est égal à True) afin 'd'affecté dans les propriétés de "retour" des valeurs adéquates Return Query_NonQuery_Auto(SQL) End Function Public Function Query(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean 'Execute la requête SQL stocké dans la propriété SQL 'selon le mode NonQuery Dim RST As Boolean = False Return Query_Execute(SQL, NonQuery) End Function #End Region #Region "Query_Auto (Connexion et deconnexion automatique)" 'Fonctions identiques à Query sauf que la connexion et 'la deconnexion à la base se fait automatiquement (pourvu qu'on 'est bien remplit les propriétés de connexion Public Function Query_Auto(ByVal SQL As String) As Boolean Dim RST As Boolean = False Connect() RST = Query_NonQuery_Auto(SQL) Close() Return RST End Function Public Function Query_Auto(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean Dim RST As Boolean = False Connect() RST = Query_Execute(SQL, NonQuery) Close() Return RST End Function #End Region #Region "Traitement de le requête SQL" Private Function As_SELECT(ByVal SQL As String) As Boolean 'Détermine si la requête est de type SELECT If SQL.Substring(0, 6).ToLower.ToString = "select" Then Return True Return False End Function Private Function Query_NonQuery_Auto(ByVal SQL As String) As Boolean 'Détermine le mode d'execution de la requete : SELECT ou AUTRE If _Option_NonQuery_Auto Then Dim NonQuery As Boolean = Not As_SELECT(SQL) Return Query_Execute(SQL, NonQuery) Else Return Query_Execute(SQL, False) End If Return Nothing End Function Private Function Query_Execute(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean 'Execute la requête 'Initialise les propriétés _Current_Row = 0 _EoT = True _Rows = 0 _Cols = 0 _DataTable = Nothing _Affected_Rows = 0 _SQLError = False 'Debug.Print(SQL) Try If NonQuery Then 'Si la requête n'est pas de type SELECT et donc ne renvoit pas de DataTable Dim reader As MySqlDataReader Dim cmd As New MySqlCommand(SQL, dbSQLM) reader = cmd.ExecuteReader() 'affecte la proprité contenant le nombre d'enregistrement affecté par la requête _Affected_Rows = reader.RecordsAffected Else 'La requête renvoit un DataTable Dim RST_DataTable As DataTable = New DataTable Dim Table As New DataSet Dim da As New MySqlDataAdapter da = New MySqlDataAdapter(SQL, dbSQLM) da.Fill(Table, "RST") RST_DataTable = Table.Tables("RST") 'Affecte les propriétés _Current_Row = 0 If RST_DataTable.Rows.Count = 0 Then _EoT = True Else _EoT = False End If _Rows = RST_DataTable.Rows.Count _Cols = RST_DataTable.Columns.Count _DataTable = RST_DataTable End If Catch ex As MySqlException _SQLError = True _SQLErrorExpression = ex.Message 'MessageBox.Show("Error connecting to the server: " + ex.Message + vbCrLf + vbCrLf + "SQL : " + vbCrLf + SQL, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally _SQL = SQL End Try Return Not _SQLError End Function #End Region #Region "Fonctions de navigation de le DataTable" Private Function Update_Current_Row(ByVal Current_Row As Integer) As Boolean 'Met à jour la propriété Current_Row si possible Dim RST As Boolean = False If Current_Row > 0 Then If Current_Row <= _DataTable.Rows.Count Then _Current_Row = Current_Row If _Current_Row = _DataTable.Rows.Count Then _EoT = True End If RST = True End If End If Return RST End Function Public Function Record_Previous() As Boolean 'Recule de 1 la propriété Current_Row si possible Return Update_Current_Row(_Current_Row - 1) End Function Public Function Record_Next() As Boolean 'Avance de 1 la propriété Current_Row si possible Return Update_Current_Row(_Current_Row + 1) End Function Public Function Get_Value(ByVal key As Object) As Object 'Permet de récupéré la valeur de la colonne "key" qui peut 'soit être de type String (key) soit de type Numerique (Index) 'en fonction de la propriété Current_Row Dim RST As Object Dim Row = _Current_Row If IsNumeric(key) Then RST = _DataTable.Rows(Row).Item(CInt(key)) Else RST = _DataTable.Rows(Row).Item(key.ToString) End If Return RST End Function Public Function Get_Value() As Dictionary(Of String, Object) 'Permet de récupéré les valeurs de la ligne Current_Row et les place dans un tableau associatif Dim RST As New Dictionary(Of String, Object) Dim Row = _Current_Row Dim j As Integer = 0 Dim Key As String = "" With _DataTable For j = 0 To .Columns.Count - 1 Key = .Columns(j).ColumnName RST.Add(Key, .Rows(Row).Item(Key)) Next End With Return RST End Function Public Function ColumnExist(ByVal Column As String) As Boolean Dim RST As Boolean = False If _DataTable.Columns.Contains(Column) Then RST = True Return RST End Function Public Sub Dispose() If dbSQLM IsNot Nothing Then dbSQLM.Dispose() _Current_Row = 0 _EoT = True _SQL = "" _Rows = 0 _Cols = 0 If _DataTable IsNot Nothing Then _DataTable.Dispose() _Affected_Rows = 0 _Option_NonQuery_Auto = True End Sub #End Region Public Shared Function EscapeSQL(ByVal Value As String) As String Return Value.Replace("\", "\\") End Function Public Shared Function Addslashes(ByVal Value As String, Optional ByVal Esc As Char = CChar("\")) As String Dim RST As String = Value If Not Esc = Nothing Then Dim Co() As Char = RST.ToCharArray Dim Cf() As Char Dim MyC As New Char ReDim Cf(-1) For Each MyC In Co If MyC = "'" Or MyC = Chr(34) Or MyC = Esc Or MyC = Chr(0) Or MyC = "'" Then ReDim Preserve Cf(Cf.Length) Cf(Cf.Length - 1) = Esc End If ReDim Preserve Cf(Cf.Length) Cf(Cf.Length - 1) = MyC Next RST = Cf End If Return RST End Function Public Shared Function Stripslashes(ByVal Value As String, Optional ByVal Esc As Char = CChar("\")) As String Value = Value.Replace(Esc + Chr(34), Chr(34)) Value = Value.Replace(Esc + Esc, Esc) Value = Value.Replace(Esc + Chr(0), Chr(0)) Value = Value.Replace(Esc + "'", "'") Value = Value.Replace(Esc + "'", "'") Return Value End Function Public Shared Function EntoureVar(ByVal Expression As String, Optional ByVal Entoure As Char = CChar("'")) As String Return EntoureVar(Expression, False, Entoure) End Function Public Shared Function EntoureVar(ByVal Expression As String, Force As Boolean, Optional ByVal Entoure As Char = CChar("'")) As String If Not Force And IsNumericNotSpace(Expression) Then Return Expression.Replace(",", ".") Else Return Entoure + Addslashes(Expression) + Entoure End If End Function Public Shared Function IsNumericNotSpace(ByVal Expression As String) As Boolean If Expression.IndexOf(" ") = -1 Then If IsNumeric(Expression) Then Return True End If Return False End Function Public Function RunQuery(ByVal Query As String) As DataSet Try dbSQLM.Open() Dim DA As New MySqlDataAdapter Dim MyRs As New DataSet DA.SelectCommand = New MySqlCommand(Query, dbSQLM) DA.Fill(MyRs) dbSQLM.Close() Return MyRs Catch ex As Exception dbSQLM.Close() Err.Raise(inObjectError + 2, "SQLM_MySQL", "Erreur lors de la requete:" + vbCrLf + vbCrLf + Query + vbCrLf + vbCrLf + ex.Message) Return New DataSet End Try End Function End Class
exemple d'utilisation :
Dim S As New SQLM("SELECT * FROM composer WHERE idarticle = " + Father.Id.ToString, Parametres.ConnectionStringArticles) While Not S.EoT Dim Id As Integer = CInt(S.Get_Value("idcomposant")) Dim Quantite As Single = CSng(S.Get_Value("quantite")) '(...) '(...) S.Record_Next() End While