0

プログラムの簡単なログインコードを作成しました。

私のウェブサイトでは、ユーザー名、メールアドレス、パスワードが保存されているプログラム用のmysqlデータベースを作成しました。データベースに2回クエリを実行して、2つのアカウントを挿入しました。

最初のアカウントでは問題なくログインできますが、2番目と3番目のアカウントでは問題なくログインできます。

とにかくここにコードがあります:

Dim dbConn As New MySqlConnection
                        Dim UsernameVerify As New MySqlCommand
                        Dim PasswordVerify As New MySqlCommand
                        Dim EmailVerify As New MySqlCommand
                        Dim typeverify As New MySqlCommand
                        Dim lgnUsername As String
                        Dim lgnPassword As String
                        Dim lgnEmail As String
                        Dim lgntype As String
                        'server info
                        dbConn.ConnectionString = "server=*************;UserID=*******;password=********;database=*****"
                        Try
                            dbConn.Open()
                            UsernameVerify.Connection = dbConn
                            UsernameVerify.CommandText = "Select USERNAME from users"
                            PasswordVerify.Connection = dbConn
                            PasswordVerify.CommandText = "Select PASSWORD from users"
                            EmailVerify.Connection = dbConn
                            EmailVerify.CommandText = "Select EMAIL from users"
                            typeverify.Connection = dbConn
                            typeverify.CommandText = "Select TYPE from users"


                            lgnUsername = UsernameVerify.ExecuteScalar
                            lgnPassword = PasswordVerify.ExecuteScalar
                            lgnEmail = EmailVerify.ExecuteScalar
                            lgntype = typeverify.ExecuteScalar
                            dbConn.Close()
                            If ComboBox1.Text = lgnUsername And ComboBox2.Text = lgnPassword And ComboBox3.Text = lgnEmail And ComboBox4.Text = lgntype Then
                                Panel1.BackgroundImage = mpng2
                                Label5.Text = "Succesfully verified user !"
                                Me.Close()

                            Else
                                Panel1.BackgroundImage = mpng
                                Label5.Text = "Could not find user check your credentials"
                                ComboBox1.Focus()

                            End If
                        Catch ex As MySqlException
                            Label5.Text = "Error while verifying "
                            MessageBox.Show("Error when connecting to database|" + ex.Message)
                            dbConn.Dispose()
                            verifying.Close()

                        End Try

誰かがこれを修正する方法を知っていますか?

私はすでにwhileループか何かを使うことを考えていましたか、それとも何か他のものがありますか?

4

1 に答える 1

0

ループの必要はありません、そしてあなたはあなた自身のために人生を難しくしています。常にシンプルに保つことを忘れないでください。

単純なログインコードは次のようになります。

Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As SYstem.EventArgs) Handles btnLogin.Click

    Dim conn As New MysqlConnection("Server=****;Database=****;User=****;Password=****;")

    Dim sql As String = "SELECT userid, username, password, email, type FROM users WHERE username = xname AND password = xpass"

    Dim args As New List(Of MySqlParameter)
    args.Add(New MySqlParameter("xname", txtUsername.Text))
    args.Add(New MySqlParameter("xpass", txtPassword.Text))

    Dim cmd As MySqlCommand = New MySqlCommand(sql, conn)
    cmd.Parameters.AddRange(args.ToArray) ' You might want to check this, not sure if it needs the .ToArray

    Dim drLogin As MySqlDataReader = cmd.ExecuteReader()

    If drLogin.HasRows

        ' do login code here (I'll store user details out the DataReader and redirect)
        dr.Read()

        Session("userid") = dr("userid")
        Session("username") = dr("username")
        Session("usertype") = dr("type")

        Response.Redirect("~/Members/Home.aspx")
    Else
        lblerr.Text = "Invalid username/password"
        lblerr.ForeColor = System.Drawing.Color.Red
    End If
End Sub

このコードは、1つのクエリで必要になる可能性のあるすべてのユーザー情報を取得します(データベースのオーバーヘッドを制限するのに適しています)。SQLのWHERE句は、ユーザー名とパスワードがユーザーのログインに一致する行のみを取得することを意味します。

List(Of SqlParameter)入力した値をSQLで使用するために保存するだけです。これは、SQLインジェクションがこの方法で行われる可能性がはるかに低いため、フォームをより安全にするのに役立ちます。SqlCommand.Paramaters.AddRangeがリストを受け入れるかどうかわからないため、ここでこのリストを配列に変換しました。いずれかの方法で機能します。

セッション変数は、ログインしているユーザーのみに関連するコンテンツを表示する場合に役立ちます。ユーザーIDを使用してデータベースからの結果を制限し、ユーザーIDがSession( "userid")値と同じであるもののみを取得することができます。

お役に立てれば!

于 2012-07-06T11:34:13.423 に答える